71 lines
1.7 KiB
TypeScript
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;
|