130 lines
3.9 KiB
TypeScript
130 lines
3.9 KiB
TypeScript
/**
|
|
* Copyright (c) 2026 Dominic Masters
|
|
*
|
|
* This software is released under the MIT License.
|
|
* https://opensource.org/licenses/MIT
|
|
*/
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Component (generic base returned by entity.add() for untyped components)
|
|
// ---------------------------------------------------------------------------
|
|
|
|
/** Base component returned by entity.add() for component types without a specific module. */
|
|
interface Component {
|
|
/** Entity ID this component belongs to. */
|
|
readonly entity: number;
|
|
/** Component slot ID. */
|
|
readonly id: number;
|
|
toString(): string;
|
|
}
|
|
|
|
interface ComponentConstructor {
|
|
/** Sentinel value for an invalid component ID. */
|
|
readonly INVALID: number;
|
|
|
|
// Component type constants (generated from componentlist.h)
|
|
readonly POSITION: number;
|
|
readonly CAMERA: number;
|
|
readonly RENDERABLE: number;
|
|
readonly PHYSICS: number;
|
|
readonly TRIGGER: number;
|
|
readonly OVERWORLD: number;
|
|
readonly PLAYER: number;
|
|
readonly INTERACTABLE: number;
|
|
readonly OVERWORLD_CAMERA: number;
|
|
readonly OVERWORLD_TRIGGER: number;
|
|
|
|
new(): never;
|
|
}
|
|
|
|
declare var Component: ComponentConstructor;
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Position
|
|
// ---------------------------------------------------------------------------
|
|
|
|
/** Position/rotation/scale transform component with optional parent hierarchy. */
|
|
interface Position extends Component {
|
|
/**
|
|
* Local-space position. Assigning a Vec3 writes to the C transform and
|
|
* marks the world transform dirty. Reading returns a fresh Vec3 copy.
|
|
*/
|
|
localPosition: Vec3;
|
|
/** World-space position (accounts for all parent transforms). */
|
|
worldPosition: Vec3;
|
|
/** Local-space euler rotation in radians (XYZ). */
|
|
localRotation: Vec3;
|
|
/** World-space euler rotation in radians. */
|
|
worldRotation: Vec3;
|
|
/** Local-space scale. */
|
|
localScale: Vec3;
|
|
/** World-space scale. */
|
|
worldScale: Vec3;
|
|
/**
|
|
* Orients the transform to look at a world-space target point.
|
|
* Uses the current local position as the eye. Optionally specify an up
|
|
* vector (defaults to Y-up).
|
|
*/
|
|
lookAt(target: Vec3, up?: Vec3): void;
|
|
/**
|
|
* Sets this component's parent in the transform hierarchy.
|
|
* Pass `null` or `undefined` to detach.
|
|
*/
|
|
setParent(parent: Position | null | undefined): void;
|
|
toString(): string;
|
|
}
|
|
|
|
interface PositionConstructor {
|
|
new(): never;
|
|
}
|
|
|
|
declare var Position: PositionConstructor;
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Camera
|
|
// ---------------------------------------------------------------------------
|
|
|
|
/** Camera projection component. */
|
|
interface Camera extends Component {
|
|
/** Field of view in radians (perspective projections only). */
|
|
fov: number;
|
|
/** Near clip plane distance. */
|
|
nearClip: number;
|
|
/** Far clip plane distance. */
|
|
farClip: number;
|
|
/** Projection type — one of the Camera.PERSPECTIVE / Camera.ORTHOGRAPHIC constants. */
|
|
projType: number;
|
|
toString(): string;
|
|
}
|
|
|
|
interface CameraConstructor {
|
|
readonly PERSPECTIVE: number;
|
|
readonly PERSPECTIVE_FLIPPED: number;
|
|
readonly ORTHOGRAPHIC: number;
|
|
new(): never;
|
|
}
|
|
|
|
declare var Camera: CameraConstructor;
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Entity
|
|
// ---------------------------------------------------------------------------
|
|
|
|
interface Entity {
|
|
/** Add a component of the given type and return a typed instance. */
|
|
add(type: CameraConstructor["PERSPECTIVE"] | number): Component;
|
|
toString(): string;
|
|
}
|
|
|
|
interface EntityConstructor {
|
|
/** Sentinel value for an invalid entity ID. */
|
|
readonly INVALID: number;
|
|
/** Creates a new entity and returns it. Returns Entity.INVALID slot if the pool is full. */
|
|
create(): Entity;
|
|
/** Disposes the entity and all its components. */
|
|
dispose(entity: Entity): void;
|
|
new(): never;
|
|
}
|
|
|
|
declare var Entity: EntityConstructor;
|