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

71 lines
1.7 KiB
TypeScript

import { EngineEvents } from '@freeblox/engine';
import { Euler, Intersection, Object3D, Vector2, Vector3 } from 'three';
export interface MousePositionEvent {
position: Vector2;
positionGL: Vector2;
}
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;
}
export interface TransformEvent {
object: Object3D;
position: Vector3;
rotation: Euler;
scale: Vector3;
}
export type TransformModeEvent = 'translate' | 'rotate' | 'scale' | null;
export interface TransformCompleteEvent extends TransformEvent {
lastPosition: Vector3;
lastRotation: Euler;
lastScale: Vector3;
}
export interface ChangeEvent {
object: Object3D;
property: string;
value: any;
edited?: boolean;
transformed?: boolean;
}
export interface SelectEvent {
object: Object3D;
selection: Object3D[];
multi?: boolean;
picker?: boolean;
}
export type Events = {
error: (error: Error) => void;
mouseDown: (event: MouseButtonEvent) => void;
mouseUp: (event: MouseButtonEvent) => void;
mouseMove: (event: MouseMoveEvent) => void;
transformStart: (event: TransformEvent) => void;
transformChange: (event: TransformCompleteEvent) => void;
transformEnd: (event: TransformEvent) => void;
transformMode: (event: TransformModeEvent) => void;
transformSnap: (event: number) => void;
transformRotationSnap: (event: number) => void;
change: (event: ChangeEvent) => void;
select: (event: SelectEvent) => void;
deselect: (event: SelectEvent) => void;
};
export type EditorEvents = Events & EngineEvents;