freeblox/packages/engine/src/types/events.ts

117 lines
2.6 KiB
TypeScript

import {
Vector2,
Intersection,
Object3D,
ColorRepresentation,
Vector3,
Quaternion,
} from 'three';
import { SerializedObject } from './game-object';
export interface MousePositionEvent {
position: Vector2;
positionNDC: Vector2;
raw: MouseEvent;
}
export interface MouseMoveEvent extends MousePositionEvent {
offset: Vector2;
offsetGL: Vector2;
helper?: boolean;
}
export interface MouseButtonEvent extends MousePositionEvent {
button: number;
helper?: boolean;
target?: Intersection<Object3D>;
shift?: boolean;
control?: boolean;
alt?: boolean;
otherTargets?: Intersection<Object3D>[];
}
export interface EnvironmentEvent {
sunColor?: ColorRepresentation;
sunPosition?: Vector3;
sunStrength?: number;
ambientColor?: ColorRepresentation;
ambientStrength?: number;
clearColor?: ColorRepresentation;
}
export interface ChangeEvent {
object: Object3D;
property: string;
value: any;
edited?: boolean;
applied?: boolean;
}
export interface SceneTreeEvent {
world: Object3D;
environment: EnvironmentEvent;
}
export interface RemoveEvent {
object: Object3D | Object3D[];
applied?: boolean;
}
export interface ReparentEvent {
object: Object3D | Object3D[];
parent: Object3D;
applied?: boolean;
}
export interface InstanceEvent {
type: string;
parent?: Object3D | string;
data?: SerializedObject;
}
export interface ServerTransformEvent {
object: string;
position: Vector3;
quaternion: Quaternion;
velocity?: Vector3;
angularVelocity?: Vector3;
}
export interface PlayerEvent {
velocity: Vector3;
lookAt: Vector3;
}
export interface SpawnEvent {
playerId: string;
playerName: string;
position: Vector3;
rotation: Quaternion;
}
export type EngineEvents = {
error: (error: Error) => void;
mouseDown: (event: MouseButtonEvent) => void;
mouseUp: (event: MouseButtonEvent) => void;
mouseMove: (event: MouseMoveEvent) => void;
setEnvironment: (event: EnvironmentEvent) => void;
change: (event: ChangeEvent) => void;
resize: (event: Vector2) => void;
remove: (event: RemoveEvent) => void;
reparent: (event: ReparentEvent) => void;
instance: (event: InstanceEvent) => void;
sceneJoin: (event: Object3D) => void;
sceneLeave: (event: Object3D) => void;
queueFree: (event: Object3D) => void;
loadComplete: () => void;
physicsComplete: () => void;
initialized: () => void;
reset: () => void;
spawnCharacter: (event: SpawnEvent) => void;
sendPlayer: (event: PlayerEvent) => void;
serverConnect: () => void;
serverTransform: (obj: ServerTransformEvent) => void;
serverDisconnect: () => void;
};