@awayjs/scene
Version:
AwayJS scene classes
76 lines (58 loc) • 2.17 kB
text/typescript
import { Vector3D } from '@awayjs/core';
import { DisplayObject } from '../display/DisplayObject';
import { ControllerBase } from '../controllers/ControllerBase';
export class LookAtController extends ControllerBase {
public _pLookAtPosition: Vector3D;
public _pLookAtObject: DisplayObject;
public _pOrigin: Vector3D = new Vector3D(0.0, 0.0, 0.0);
// private _onLookAtObjectChangedDelegate: (event: DisplayObjectEvent) => void;
constructor(targetObject: DisplayObject = null, lookAtObject: DisplayObject = null) {
super(targetObject);
// this._onLookAtObjectChangedDelegate = (event: DisplayObjectEvent) => this.onLookAtObjectChanged(event);
if (lookAtObject)
this.lookAtObject = lookAtObject;
else
this.lookAtPosition = new Vector3D();
}
public get lookAtPosition(): Vector3D {
return this._pLookAtPosition;
}
public set lookAtPosition(val: Vector3D) {
if (this._pLookAtObject) {
// this._pLookAtObject.removeEventListener(DisplayObjectEvent.SCENETRANSFORM_CHANGED,
// this._onLookAtObjectChangedDelegate);
this._pLookAtObject = null;
}
this._pLookAtPosition = val;
this.pNotifyUpdate();
}
public get lookAtObject(): DisplayObject {
return this._pLookAtObject;
}
public set lookAtObject(val: DisplayObject) {
if (this._pLookAtPosition)
this._pLookAtPosition = null;
if (this._pLookAtObject == val)
return;
// if (this._pLookAtObject)
// this._pLookAtObject.removeEventListener(DisplayObjectEvent.SCENETRANSFORM_CHANGED,
// this._onLookAtObjectChangedDelegate);
this._pLookAtObject = val;
// if (this._pLookAtObject)
// this._pLookAtObject.addEventListener(DisplayObjectEvent.SCENETRANSFORM_CHANGED,
// this._onLookAtObjectChangedDelegate);
this.pNotifyUpdate();
}
//@override
public update(interpolate: boolean = true): void {
if (this._pTargetObject) {
if (this._pLookAtPosition)
this._pTargetObject.lookAt(this._pLookAtPosition);
else if (this._pLookAtObject)
this._pTargetObject.lookAt(this._pLookAtObject.transform.matrix3D.position);
}
}
// private onLookAtObjectChanged(event: DisplayObjectEvent): void {
// this.pNotifyUpdate();
// }
}