42 lines
1.5 KiB
JavaScript
42 lines
1.5 KiB
JavaScript
|
GameLib.D3.ComponentMeshPermutation = function(
|
||
|
componentId,
|
||
|
positionOffset,
|
||
|
quaternionOffset
|
||
|
) {
|
||
|
this.componentId = componentId || GameLib.D3.Tools.RandomId();
|
||
|
this.parentEntity = null;
|
||
|
|
||
|
this.positionOffset = positionOffset || new GameLib.D3.Vector3(0, 0, 0);
|
||
|
this.quaternionOffset = quaternionOffset || new GameLib.D3.Quaternion(0, 0, 0, 1);
|
||
|
|
||
|
// Todo: this should be executed somewhere in game-lib-z, so that we don't execute it on every construction of an object.
|
||
|
GameLib.D3.Utils.Extend(GameLib.D3.ComponentMeshPermutation, GameLib.D3.ComponentInterface);
|
||
|
};
|
||
|
|
||
|
///////////////////////// Methods to override //////////////////////////
|
||
|
GameLib.D3.ComponentMeshPermutation.prototype.onLateUpdate = function(
|
||
|
deltaTime,
|
||
|
parentEntity
|
||
|
) {
|
||
|
|
||
|
if(parentEntity && parentEntity.mesh) {
|
||
|
var quaternion = new THREE.Quaternion();
|
||
|
quaternion.copy(parentEntity.mesh.quaternion);
|
||
|
|
||
|
var quaternionCopy = quaternion.clone();
|
||
|
|
||
|
var position = new THREE.Vector3();
|
||
|
position.copy(parentEntity.mesh.position);
|
||
|
|
||
|
var offsetQuaternion = new THREE.Quaternion();
|
||
|
offsetQuaternion.copy(this.quaternionOffset);
|
||
|
quaternion = quaternion.multiply(offsetQuaternion).normalize();
|
||
|
|
||
|
var offsetPosition = new THREE.Vector3();
|
||
|
offsetPosition.copy(this.positionOffset);
|
||
|
position = position.add(offsetPosition.applyQuaternion(quaternionCopy));
|
||
|
|
||
|
parentEntity.mesh.position.copy(position);
|
||
|
parentEntity.mesh.quaternion.copy(quaternion);
|
||
|
}
|
||
|
};
|