parent entity link component: center to origin fixed
parent
3283eb40ce
commit
fafc068fad
|
@ -36,23 +36,46 @@ GameLib.D3.ComponentEntityParent.prototype.onLateUpdate = function(
|
||||||
if(parentEntity && this.parent) {
|
if(parentEntity && this.parent) {
|
||||||
|
|
||||||
if(this.centerToOrigin) {
|
if(this.centerToOrigin) {
|
||||||
parentEntity.position.x = this.parent.position.x + this.parent.origin.x - this.originPosition.x;
|
this.parentEntity.position.x = this.parent.position.x + ((this.parent.origin.x - this.originPosition.x) * this.parent.scale.x);
|
||||||
parentEntity.position.y = this.parent.position.y + this.parent.origin.y - this.originPosition.y;
|
this.parentEntity.position.y = this.parent.position.y + ((this.parent.origin.y - this.originPosition.y) * this.parent.scale.y);
|
||||||
parentEntity.position.z = this.parent.position.z + this.parent.origin.z - this.originPosition.z;
|
this.parentEntity.position.z = this.parent.position.z + ((this.parent.origin.z - this.originPosition.z) * this.parent.scale.z);
|
||||||
|
|
||||||
|
// apply quaternion
|
||||||
|
//
|
||||||
|
|
||||||
|
var tmpVector = new THREE.Vector3(
|
||||||
|
parentEntity.position.x,
|
||||||
|
parentEntity.position.y,
|
||||||
|
parentEntity.position.z
|
||||||
|
).applyQuaternion(
|
||||||
|
new THREE.Quaternion(
|
||||||
|
this.parent.quaternion.x,
|
||||||
|
this.parent.quaternion.y,
|
||||||
|
this.parent.quaternion.z,
|
||||||
|
this.parent.quaternion.w
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
this.parentEntity.position.x = tmpVector.x;
|
||||||
|
this.parentEntity.position.y = tmpVector.y;
|
||||||
|
this.parentEntity.position.z = tmpVector.z;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
parentEntity.position.x = this.parent.position.x;
|
this.parentEntity.position.x = this.parent.position.x;
|
||||||
parentEntity.position.y = this.parent.position.y;
|
this.parentEntity.position.y = this.parent.position.y;
|
||||||
parentEntity.position.z = this.parent.position.z;
|
this.parentEntity.position.z = this.parent.position.z;
|
||||||
}
|
}
|
||||||
|
|
||||||
parentEntity.quaternion.x = this.parent.quaternion.x;
|
this.parentEntity.quaternion.x = this.parent.quaternion.x;
|
||||||
parentEntity.quaternion.y = this.parent.quaternion.y;
|
this.parentEntity.quaternion.y = this.parent.quaternion.y;
|
||||||
parentEntity.quaternion.z = this.parent.quaternion.z;
|
this.parentEntity.quaternion.z = this.parent.quaternion.z;
|
||||||
parentEntity.quaternion.w = this.parent.quaternion.w;
|
this.parentEntity.quaternion.w = this.parent.quaternion.w;
|
||||||
|
|
||||||
parentEntity.scale.x = this.parent.scale.x;
|
this.parentEntity.scale.x = this.parent.scale.x;
|
||||||
parentEntity.scale.y = this.parent.scale.y;
|
this.parentEntity.scale.y = this.parent.scale.y;
|
||||||
parentEntity.scale.z = this.parent.scale.z;
|
this.parentEntity.scale.z = this.parent.scale.z;
|
||||||
|
|
||||||
|
this.parentEntity.mesh.updateMatrix();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -55,8 +55,15 @@ GameLib.D3.Entity.prototype.update = function(
|
||||||
|
|
||||||
if(this.mesh) {
|
if(this.mesh) {
|
||||||
this.mesh.position.set(this.position.x, this.position.y, this.position.z);
|
this.mesh.position.set(this.position.x, this.position.y, this.position.z);
|
||||||
this.mesh.quaternion.set(this.quaternion.x, this.quaternion.y, this.quaternion.z, this.quaternion.w);
|
|
||||||
this.mesh.scale.set(this.scale.x, this.scale.y, this.scale.z);
|
this.mesh.scale.set(this.scale.x, this.scale.y, this.scale.z);
|
||||||
|
this.mesh.quaternion.set(this.quaternion.x, this.quaternion.y, this.quaternion.z, this.quaternion.w).normalize();
|
||||||
|
|
||||||
|
// normalize the quaternion, if we have a mesh.
|
||||||
|
// if we don't do this, then the mesh will get stretched
|
||||||
|
this.quaternion.x = this.mesh.quaternion.x;
|
||||||
|
this.quaternion.y = this.mesh.quaternion.y;
|
||||||
|
this.quaternion.z = this.mesh.quaternion.z;
|
||||||
|
this.quaternion.w = this.mesh.quaternion.w;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.onUpdate(deltaTime);
|
this.onUpdate(deltaTime);
|
||||||
|
|
Loading…
Reference in New Issue