the-world-engine
Version:
three.js based, unity like game engine for browser
280 lines (279 loc) • 10.2 kB
TypeScript
import type { Euler } from "three/src/Three";
import { Matrix4, Object3D, Quaternion, Vector3 } from "three/src/Three";
import type { ReadonlyVector3 } from "../math/ReadonlyVector3";
import type { GameObject } from "./GameObject";
/**
* transform that delegates Object3D
* do not drive this class
*/
export declare class Transform {
private static readonly _transformObject3D;
private readonly _object3D;
private readonly _gameObject;
private readonly _engineGlobalObject;
private readonly _onParentChanged;
private readonly _worldPosition;
private readonly _worldRotationEuler;
private readonly _worldRotation;
private readonly _worldScale;
private _hasChanged;
private _localMatrixNeedUpdate;
private _worldMatrixNeedUpdate;
private _worldPositionRotationScaleNeedUpdate;
private _localPositionRotationScaleNeedUpdate;
private readonly _onBeforeGetLocalBind;
private readonly _onBeforeLocalChangeBind;
private readonly _onLocalEulerRotationChangedBind;
private readonly _onLocalRotationChangedBind;
private readonly _onBeforeGetWorldBind;
private readonly _onBeforeWorldChangeBind;
private readonly _onWorldEulerRotationChangedBind;
private readonly _onWorldRotationChangedBind;
private _ignoreObservableEvent;
private onBeforeGetLocal;
private onBeforeLocalChange;
private onLocalEulerRotationChanged;
private onLocalRotationChanged;
private onBeforeGetWorld;
private onBeforeWorldChange;
private onWorldEulerRotationChanged;
private onWorldRotationChanged;
private setWorldPositionRotationScaleNeedUpdateRecursively;
private setChildrenWorldPositionRotationScaleNeedUpdateRecursively;
private setWorldMatrixNeedUpdateRecursively;
private setWorldMatrixNeedUpdateRecursivelyInternal;
private setHasChangedRecursively;
private static readonly _matrix4Buffer;
private updateLocalPositionRotationScaleFromOthers;
private updateWorldPositionRotationScaleFromOthers;
private updateWorldMatrixFromLocalMatrixAndParentWorldMatrix;
private updateLocalMatrixFromOthers;
private updateLocalPositionRotationScaleFromOthersRecursively;
private updateChildrenLocalPositionRotationScaleFromOthersRecursively;
private tryUpdateWorldMatrixRecursivelyFromThisToChildrenInternal;
/**
* foreach children transform
*
* you must not change length of children array while iterating
* @param callback
*/
foreachChild(callback: (transform: Transform) => void): void;
/**
* iterate children transfrom
*
* you must not change length of children array while iterating
* @param callback if return false, stop iteration
*/
iterateChild(callback: (transform: Transform) => boolean): void;
/**
* get parent. if parent is scene, returns null
*/
get parent(): Transform | null;
/**
* set parent, if value is null, set to scene
*
* you can't set parent that in another engine instance
*/
set parent(value: Transform | null);
setParent(parent: Transform | null, worldPositionStays?: boolean): void;
/**
* get children. it returns new instance of Array, so you can change it
*/
get children(): Transform[];
/**
* get gameObject of this transform
*/
get gameObject(): GameObject;
private static readonly _vector3Buffer;
/**
* Returns a normalized vector representing the blue axis of the transform in world space.
* @param target optional, target vector
*/
getForward(target?: Vector3): Vector3;
/**
* set vector representing the blue axis of the transform in world space.
*/
setForward(value: ReadonlyVector3): void;
/**
* The red axis of the transform in world space.
* @param target optional, target vector
*/
getRight(target?: Vector3): Vector3;
/**
* set vector representing the red axis of the transform in world space.
*/
setRight(value: ReadonlyVector3): void;
/**
* The green axis of the transform in world space.
* @param target optional, target vector
*/
getUp(target?: Vector3): Vector3;
/**
* set vector representing the green axis of the transform in world space.
*/
setUp(value: ReadonlyVector3): void;
/**
* Object's local position.
* @default new THREE.Vector3()
*/
get localPosition(): Vector3;
/**
* Object's local rotation (Euler angles), in radians.
* @default new THREE.Euler()
*/
get localEulerAngles(): Euler;
/**
* Object's local rotation as a Quaternion.
* @default new THREE.Quaternion()
*/
get localRotation(): Quaternion;
/**
* Object's local scale.
* @default new THREE.Vector3()
*/
get localScale(): Vector3;
/**
* Object's world position.
*/
get position(): Vector3;
/**
* Object's world rotation (Euler angles), in radians.
*/
get eulerAngles(): Euler;
/**
* Object's world rotation as a Quaternion.
*/
get rotation(): Quaternion;
/**
* Object's world scale.
*/
get lossyScale(): ReadonlyVector3;
/**
* Has the transform changed since the last time the flag was set to 'false'?
*/
get hasChanged(): boolean;
/**
* Has the transform changed since the last time the flag was set to 'false'?
* @param value
*/
set hasChanged(value: boolean);
/**
* world to local matrix
* @param target optional, target matrix
*/
getWorldToLocalMatrix(target?: Matrix4): Matrix4;
/**
* local to world matrix
* @param target optional, target matrix
*/
getLocalToWorldMatrix(target?: Matrix4): Matrix4;
/**
* Transforms position from local space to world space.
* @param position A local position.
*/
transformPoint(position: Vector3): Vector3;
/**
* Transforms position from world space to local space.
* @param position A world position.
*/
inverseTransformPoint(position: Vector3): Vector3;
/**
* Transforms direction from local space to world space.
* This operation is not affected by scale or position of the transform. The returned vector has the same length as direction.
* @param direction A local direction.
*/
transformDirection(direction: Vector3): Vector3;
/**
* Transforms direction from world space to local space.
* This operation is unaffected by scale.
* @param direction A world direction.
*/
inverseTransformDirection(direction: Vector3): Vector3;
/**
* Transforms vector from local space to world space.
* This operation is not affected by position of the transform, but it is affected by scale. The returned vector may have a different length than vector.
* @param vector A local vector.
*/
transformVector(vector: Vector3): Vector3;
/**
* Transforms a vector from world space to local space. The opposite of Transform.TransformVector.
* This operation is affected by scale.
*/
inverseTransformVector(vector: Vector3): Vector3;
/**
* Is this transform a child of parent?
* @returns a boolean value that indicates whether the transform is a child of a given transform. true if this transform is a child, deep child (child of a child) or identical to this transform, otherwise false.
*/
isChildOf(parent: Transform): boolean;
private static readonly _quaternionBuffer;
/**
* Rotates object to face point in space.
* @param vector A world vector to look at.
*/
lookAt(vector: Vector3): void;
setRotationFromAxisAngle(axis: Vector3, angle: number): void;
setRotationFromEuler(euler: Euler): void;
setRotationFromMatrix(m: Matrix4): void;
setRotationFromQuaternion(q: Quaternion): void;
/**
* Rotate an object along an axis in object space. The axis is assumed to be normalized.
* @param axis A normalized vector in object space.
* @param angle The angle in radians.
*/
rotateOnAxis(axis: Vector3, angle: number): this;
/**
* Rotate an object along an axis in world space. The axis is assumed to be normalized. Method Assumes no rotated parent.
* @param axis A normalized vector in object space.
* @param angle The angle in radians.
*/
rotateOnWorldAxis(axis: Vector3, angle: number): this;
/**
*
* @param angle
*/
rotateX(angle: number): this;
/**
*
* @param angle
*/
rotateY(angle: number): this;
/**
*
* @param angle
*/
rotateZ(angle: number): this;
/**
* @param axis A normalized vector in object space.
* @param distance The distance to translate.
*/
translateOnAxis(axis: Vector3, distance: number): this;
/**
* Translates object along x axis by distance.
* @param distance Distance.
*/
translateX(distance: number): this;
/**
* Translates object along y axis by distance.
* @param distance Distance.
*/
translateY(distance: number): this;
/**
* Translates object along z axis by distance.
* @param distance Distance.
*/
translateZ(distance: number): this;
/**
* get Object3D of the GameObject. you can use this to add three.js Object3D to the scene
* if you want to add a custom Object3D to the scene, you must manage the lifecycle of the Object3D yourself
*
* see also:
* "Object3D.visible" property has same value as "GameObject.activeInHierarchy"
* you must not change "Object3D.visible" directly, use "GameObject.activeInHierarchy" instead
* "Object3D.add" method is not available for GameObject Transform it for other Object3D classes
*/
unsafeGetObject3D(): Object3D;
enqueueRenderAttachedObject3D(rerenderObject: Object3D): void;
dequeueRenderAttachedObject3D(rerenderObject: Object3D): void;
static updateRawObject3DWorldMatrixRecursively(object3D: Object3D): void;
private static updateRawObject3DWorldMatrixRecursivelyInternal;
}