parent entity link component: center to origin fixed

beta.r3js.org
polygonboutique 2016-11-29 15:26:54 +01:00
parent 3283eb40ce
commit fafc068fad
2 changed files with 44 additions and 14 deletions

View File

@ -36,23 +36,46 @@ GameLib.D3.ComponentEntityParent.prototype.onLateUpdate = function(
if(parentEntity && this.parent) {
if(this.centerToOrigin) {
parentEntity.position.x = this.parent.position.x + this.parent.origin.x - this.originPosition.x;
parentEntity.position.y = this.parent.position.y + this.parent.origin.y - this.originPosition.y;
parentEntity.position.z = this.parent.position.z + this.parent.origin.z - this.originPosition.z;
this.parentEntity.position.x = this.parent.position.x + ((this.parent.origin.x - this.originPosition.x) * this.parent.scale.x);
this.parentEntity.position.y = this.parent.position.y + ((this.parent.origin.y - this.originPosition.y) * this.parent.scale.y);
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 {
parentEntity.position.x = this.parent.position.x;
parentEntity.position.y = this.parent.position.y;
parentEntity.position.z = this.parent.position.z;
this.parentEntity.position.x = this.parent.position.x;
this.parentEntity.position.y = this.parent.position.y;
this.parentEntity.position.z = this.parent.position.z;
}
parentEntity.quaternion.x = this.parent.quaternion.x;
parentEntity.quaternion.y = this.parent.quaternion.y;
parentEntity.quaternion.z = this.parent.quaternion.z;
parentEntity.quaternion.w = this.parent.quaternion.w;
this.parentEntity.quaternion.x = this.parent.quaternion.x;
this.parentEntity.quaternion.y = this.parent.quaternion.y;
this.parentEntity.quaternion.z = this.parent.quaternion.z;
this.parentEntity.quaternion.w = this.parent.quaternion.w;
parentEntity.scale.x = this.parent.scale.x;
parentEntity.scale.y = this.parent.scale.y;
parentEntity.scale.z = this.parent.scale.z;
this.parentEntity.scale.x = this.parent.scale.x;
this.parentEntity.scale.y = this.parent.scale.y;
this.parentEntity.scale.z = this.parent.scale.z;
this.parentEntity.mesh.updateMatrix();
}
};

View File

@ -55,8 +55,15 @@ GameLib.D3.Entity.prototype.update = function(
if(this.mesh) {
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.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);