@vrspace/babylonjs
Version:
vrspace.org babylonjs client
138 lines (137 loc) • 4.86 kB
TypeScript
/**
This is control for user's avatar, both local and remote:
propagates local avatar events to the network, and acts as remote controller for all remote instances.
Installed as change listener to WorldManager, tracks position of all events that user
sends - typically movement - and optinally adds some more - typically avatar animations.
E.g. when position changes, it sends 'walk' animation, if current avatar has animation named 'walk'.
User stops, it sends 'idle' animation, if current avatar has animation named 'idle',
so all other users see this avatar moving and idling.
Provides methods to switch between 1st and 3rd person view, and manages movement of own avatar.
Use World.firstPersonCamera() and World.thirdPersonCamera() to ensure equal movement speeds.
*/
export class AvatarController {
constructor(worldManager: any, avatar: any);
/** Timestamp of last change */
lastChange: number;
/** After not receiving any events for this many millis, idle animation starts */
idleTimeout: number;
lastAnimation: any;
/** @type {WorldManager} */
worldManager: WorldManager;
/** @type {World} */
world: World;
scene: any;
keyboardHandler: (kbInfo: any) => void;
clickHandler: any;
trackingEnabled: boolean;
activeCamera: any;
setAvatar(avatar: any): void;
avatar: any;
animation: AvatarAnimation;
movement: AvatarMovement;
movementHandler: (() => void) | (() => void);
/**
* Create timer for idle animation, if it doesn't exist.
*/
setupIdleTimer(): void;
idleTimerId: any;
/**
* Send an animation to the server, if the avatar has it.
* @param animation AnimationGroup to activate remotely
* @param loop default false
*/
sendAnimation(animation: any, loop?: boolean): void;
/**
Process locally generated changes to avatar. Called from WorldManager.trackChanges().
Position changes also change idle animation timer, and wrote event may trigger appropriate animation.
@param changes array of field,value object pairs
*/
processChanges(changes: any): void;
/** Internal used to safely detach control
* @private
*/
private deactivateCamera;
/** Internal to safely attach control */
activateCamera(camera: any): void;
showAvatar(): void;
hideAvatar(): void;
processGamepadStick(stickValues: any): void;
/** Performs coordinate transformation and other bookkeeping required to switch from 1st to 3rd person camera. */
thirdPerson(): void;
addObserver(observable: any, observer: any): any;
removeObserver(observable: any, observer: any): any;
enableTracking(enabled: any): void;
/** Performs coordinate transformation and other bookkeeping required to switch from 3rd to 1st person camera. */
firstPerson(): void;
updateCamera(x: any, y: any, z: any): void;
/** Internal: add movement direction */
addDirection(direction: any): void;
/** Default keyboard handler, WASD keys for movement */
handleKeyboard(kbInfo: any): void;
/** Default pointer handler, calls moveToTarget on LMB click */
handleClick(pointerInfo: any): void;
clickTarget: any;
/** Cleanup, CHECKME */
dispose(): void;
}
import { WorldManager } from '../vrspace-min.js';
import { World } from '../world/world.js';
import { AvatarAnimation } from './avatar-animation.js';
declare class AvatarMovement {
constructor(avatarController: any, avatar: any, animation: any);
controller: any;
/** @type {World} */
world: World;
avatar: any;
animation: any;
movementTracker: any;
trackingCameraRotation: boolean;
vector: {
left: any;
right: any;
forward: any;
back: any;
up: any;
down: any;
};
terrrainUpdateDistance: number;
terrainUpdatedAt: any;
trackWalk: any;
findFeet(): void;
leftFoot: any;
rightFoot: any;
stop(): void;
timestamp: number;
movingDirections: number;
direction: any;
movingToTarget: boolean;
movementTarget: any;
xDist: number;
zDist: number;
movementTimeout: number;
state: {
left: boolean;
right: boolean;
forward: boolean;
back: boolean;
up: boolean;
};
startAnimation(animation: any): void;
activeAnimation: any;
setSpeed(speed: any): void;
addVector(direction: any): void;
removeVector(direction: any): void;
stopMovement(): void;
stopTrackingCameraRotation(): void;
applyRotationToMesh: () => void;
startTrackingCameraRotation(): void;
startMovement(animation: any): void;
movementStart: number;
moveToTarget(point: any): void;
cameraAnimation: any;
avatarRotationAnimation: any;
moveAvatar(): void;
updateTerrain(): void;
dispose(): void;
}
export {};