got to remove logic from components
parent
7132fc7528
commit
4a880dc2db
|
@ -115,4 +115,9 @@ GameLib.D3.API.Mesh = function(
|
||||||
up = new GameLib.D3.API.Vector3(0,1,0);
|
up = new GameLib.D3.API.Vector3(0,1,0);
|
||||||
}
|
}
|
||||||
this.up = up;
|
this.up = up;
|
||||||
|
|
||||||
|
this.localRotation = new GameLib.D3.API.Vector3(0,0,0);
|
||||||
|
this.localScale = new GameLib.D3.API.Vector3(1,1,1);
|
||||||
|
this.localPosition = new GameLib.D3.API.Vector3(0,0,0);
|
||||||
|
|
||||||
};
|
};
|
|
@ -1,4 +1,4 @@
|
||||||
GameLib.D3.API.Quaternion = function ApiQuaternion(x, y, z, w, axis, angle) {
|
GameLib.D3.API.Quaternion = function (x, y, z, w, axis, angle) {
|
||||||
|
|
||||||
if (GameLib.D3.Utils.UndefinedOrNull(x)) {
|
if (GameLib.D3.Utils.UndefinedOrNull(x)) {
|
||||||
x = 0;
|
x = 0;
|
||||||
|
@ -21,7 +21,7 @@ GameLib.D3.API.Quaternion = function ApiQuaternion(x, y, z, w, axis, angle) {
|
||||||
this.w = w;
|
this.w = w;
|
||||||
|
|
||||||
if (GameLib.D3.Utils.UndefinedOrNull(axis)) {
|
if (GameLib.D3.Utils.UndefinedOrNull(axis)) {
|
||||||
axis = new GameLib.D3.API.Vector3(0, 0, 0);
|
axis = new GameLib.D3.API.Vector3();
|
||||||
}
|
}
|
||||||
this.axis = axis;
|
this.axis = axis;
|
||||||
|
|
||||||
|
@ -67,23 +67,43 @@ GameLib.D3.API.Quaternion.prototype.normalize = function () {
|
||||||
this.z *= invLength;
|
this.z *= invLength;
|
||||||
};
|
};
|
||||||
|
|
||||||
GameLib.D3.API.Quaternion.prototype.multiply = function (s) {
|
GameLib.D3.API.Quaternion.prototype.multiply = function (q) {
|
||||||
if (s instanceof GameLib.D3.API.Vector3) {
|
|
||||||
this.x *= s.x;
|
var x, y, z, w;
|
||||||
this.y *= s.y;
|
var a = q;
|
||||||
this.z *= s.z;
|
var b = this;
|
||||||
} else if (s instanceof GameLib.D3.API.Matrix4) {
|
|
||||||
var x = s.rows[0].x * this.x + s.rows[0].y * this.y + s.rows[0].z * this.z + s.rows[0].w * this.w;
|
if (q instanceof GameLib.D3.API.Matrix4) {
|
||||||
var y = s.rows[1].x * this.x + s.rows[1].y * this.y + s.rows[1].z * this.z + s.rows[1].w * this.w;
|
|
||||||
var z = s.rows[2].x * this.x + s.rows[2].y * this.y + s.rows[2].z * this.z + s.rows[2].w * this.w;
|
x = a.rows[0].x * b.x + a.rows[0].y * b.y + a.rows[0].z * b.z + a.rows[0].w * b.w;
|
||||||
var w = s.rows[3].x * this.x + s.rows[3].y * this.y + s.rows[3].z * this.z + s.rows[3].w * this.w;
|
y = a.rows[1].x * b.x + a.rows[1].y * b.y + a.rows[1].z * b.z + a.rows[1].w * b.w;
|
||||||
|
z = a.rows[2].x * b.x + a.rows[2].y * b.y + a.rows[2].z * b.z + a.rows[2].w * b.w;
|
||||||
|
w = a.rows[3].x * b.x + a.rows[3].y * b.y + a.rows[3].z * b.z + a.rows[3].w * b.w;
|
||||||
|
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
this.z = z;
|
this.z = z;
|
||||||
this.w = w;
|
this.w = w;
|
||||||
|
|
||||||
|
return this;
|
||||||
|
|
||||||
|
} else if (q instanceof GameLib.D3.API.Quaternion) {
|
||||||
|
|
||||||
|
x = ((a.x * b.x) - (a.y * b.y) - (a.z * b.z) - (a.w * a.w));
|
||||||
|
y = ((a.x * b.y) + (a.y * b.x) - (a.z * b.w) + (a.w * a.z));
|
||||||
|
z = ((a.x * b.z) + (a.y * b.w) + (a.z * b.x) - (a.w * a.y));
|
||||||
|
w = ((a.x * b.w) - (a.y * b.z) + (a.z * b.y) + (a.w * a.x));
|
||||||
|
|
||||||
|
this.x = x;
|
||||||
|
this.y = y;
|
||||||
|
this.z = z;
|
||||||
|
this.w = w;
|
||||||
|
|
||||||
|
return this;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
console.log("functionality not implemented - please do this");
|
console.log("This functionality not implemented - please do this");
|
||||||
throw new Error("not implemented");
|
throw new Error("This functionality not implemented - please do this");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -116,3 +136,62 @@ GameLib.D3.API.Quaternion.prototype.subtract = function (v) {
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
GameLib.D3.API.Quaternion.prototype.magnitude = function () {
|
||||||
|
return Math.sqrt(
|
||||||
|
(this.x * this.x) +
|
||||||
|
(this.y * this.y) +
|
||||||
|
(this.z * this.z) +
|
||||||
|
(this.w * this.w)
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
GameLib.D3.API.Quaternion.prototype.normalize = function () {
|
||||||
|
|
||||||
|
var magnitude = this.magnitude();
|
||||||
|
|
||||||
|
if (magnitude < 0.000001) {
|
||||||
|
return this; //do nothing for zero vector
|
||||||
|
}
|
||||||
|
|
||||||
|
this.x *= magnitude;
|
||||||
|
this.y *= magnitude;
|
||||||
|
this.z *= magnitude;
|
||||||
|
this.w *= magnitude;
|
||||||
|
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param matrix4 GameLib.D3.Matrix4
|
||||||
|
*/
|
||||||
|
GameLib.D3.API.Quaternion.prototype.setFromRotationMatrix = function(matrix4) {
|
||||||
|
|
||||||
|
this.instance.setFromRotationMatrix(matrix4.instance);
|
||||||
|
|
||||||
|
this.x = this.instance.x;
|
||||||
|
this.y = this.instance.y;
|
||||||
|
this.z = this.instance.z;
|
||||||
|
this.w = this.instance.w;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param quaternion GameLib.D3.Quaternion
|
||||||
|
* @param t
|
||||||
|
* @returns {GameLib.D3.Quaternion}
|
||||||
|
*/
|
||||||
|
GameLib.D3.API.Quaternion.prototype.slerp = function (quaternion, t) {
|
||||||
|
|
||||||
|
this.updateInstance();
|
||||||
|
|
||||||
|
this.instance.slerp(quaternion.instance, t);
|
||||||
|
|
||||||
|
this.x = this.instance.x;
|
||||||
|
this.y = this.instance.y;
|
||||||
|
this.z = this.instance.z;
|
||||||
|
this.w = this.instance.w;
|
||||||
|
|
||||||
|
return this;
|
||||||
|
};
|
|
@ -1,4 +1,4 @@
|
||||||
GameLib.D3.API.Vector3 = function ApiVector3(x, y, z) {
|
GameLib.D3.API.Vector3 = function (x, y, z) {
|
||||||
|
|
||||||
if (GameLib.D3.Utils.UndefinedOrNull(x)) {
|
if (GameLib.D3.Utils.UndefinedOrNull(x)) {
|
||||||
x = 0;
|
x = 0;
|
||||||
|
@ -74,11 +74,10 @@ GameLib.D3.API.Vector3.prototype.translate = function (v) {
|
||||||
};
|
};
|
||||||
|
|
||||||
GameLib.D3.API.Vector3.prototype.add = function (v) {
|
GameLib.D3.API.Vector3.prototype.add = function (v) {
|
||||||
return new GameLib.D3.API.Vector3(
|
this.x += v.x;
|
||||||
this.x + v.x,
|
this.y += v.y;
|
||||||
this.y + v.y,
|
this.z += v.z;
|
||||||
this.z + v.z
|
return this;
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
GameLib.D3.API.Vector3.prototype.squared = function () {
|
GameLib.D3.API.Vector3.prototype.squared = function () {
|
||||||
|
@ -128,54 +127,57 @@ GameLib.D3.API.Vector3.AngleDirection = function(forward, directionToCheck, up)
|
||||||
} else {
|
} else {
|
||||||
return 0.0;
|
return 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
GameLib.D3.API.Vector3.prototype.multiply = function (s) {
|
/**
|
||||||
|
* Multiplies this vector with a scalar, vector or matrix. If you want a copy, copy() it first
|
||||||
|
* @param object {Number | GameLib.D3.API.Vector3 | GameLib.D3.API.Vector4 | GameLib.D3.API.Matrix3 | GameLib.D3.API.Matrix4}
|
||||||
|
* @param cross boolean true if you want the cross product, otherwise returns the scalar (dot or inner) product
|
||||||
|
* @returns {GameLib.D3.API.Vector3 | Number}
|
||||||
|
*/
|
||||||
|
GameLib.D3.API.Vector3.prototype.multiply = function (object, cross) {
|
||||||
|
|
||||||
var x, y, z;
|
var x, y, z;
|
||||||
|
|
||||||
if (s instanceof GameLib.D3.API.Vector3) {
|
var a = object;
|
||||||
|
var b = this;
|
||||||
|
|
||||||
return new GameLib.D3.API.Vector3(
|
if (GameLib.D3.Utils.UndefinedOrNull(cross)) {
|
||||||
this.x * s.x,
|
cross = false;
|
||||||
this.y * s.y,
|
}
|
||||||
this.z * s.z
|
|
||||||
)
|
|
||||||
|
|
||||||
} else if (s instanceof GameLib.D3.API.Matrix4) {
|
if (typeof object == 'number') {
|
||||||
|
|
||||||
x = s.rows[0].x * this.x + s.rows[0].y * this.y + s.rows[0].z * this.z + s.rows[0].w;
|
if (cross) {
|
||||||
y = s.rows[1].x * this.x + s.rows[1].y * this.y + s.rows[1].z * this.z + s.rows[1].w;
|
this.x *= object;
|
||||||
z = s.rows[2].x * this.x + s.rows[2].y * this.y + s.rows[2].z * this.z + s.rows[2].w;
|
this.y *= object;
|
||||||
|
this.z *= object;
|
||||||
|
return this;
|
||||||
|
} else {
|
||||||
|
return ((this.x * object) + (this.y * object) + (this.z * object));
|
||||||
|
}
|
||||||
|
|
||||||
return new GameLib.D3.API.Vector3(
|
}
|
||||||
x,
|
|
||||||
y,
|
|
||||||
z
|
|
||||||
);
|
|
||||||
|
|
||||||
} else if (s instanceof GameLib.D3.API.Matrix3) {
|
if (object instanceof GameLib.D3.API.Vector3) {
|
||||||
|
|
||||||
x = s.rows[0].x * this.x + s.rows[0].y * this.y + s.rows[0].z * this.z;
|
if (cross) {
|
||||||
y = s.rows[1].x * this.x + s.rows[1].y * this.y + s.rows[1].z * this.z;
|
|
||||||
z = s.rows[2].x * this.x + s.rows[2].y * this.y + s.rows[2].z * this.z;
|
|
||||||
|
|
||||||
return new GameLib.D3.API.Vector3(
|
x = (a.y * b.z) - (a.z * b.y);
|
||||||
x,
|
y = (a.z * b.x) - (a.x * b.z);
|
||||||
y,
|
z = (a.x * b.y) - (a.y * b.x);
|
||||||
z
|
|
||||||
);
|
|
||||||
|
|
||||||
} else if(!isNaN(parseFloat(s)) && isFinite(s)) {
|
this.x = x;
|
||||||
|
this.y = y;
|
||||||
|
this.z = z;
|
||||||
|
|
||||||
return new GameLib.D3.API.Vector3(
|
return this;
|
||||||
this.x * s,
|
|
||||||
this.y * s,
|
|
||||||
this.z * s
|
|
||||||
);
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
return ((this.x * object.x) + (this.y * object.y) + (this.z * object.z));
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
console.log("functionality not implemented - please do this");
|
console.log("functionality not implemented - please do this");
|
||||||
throw new Error("not implemented");
|
throw new Error("not implemented");
|
||||||
}
|
}
|
||||||
|
@ -226,6 +228,8 @@ GameLib.D3.API.Vector3.prototype.applyQuaternion = function(q) {
|
||||||
this.x = ix * qw + iw * - qx + iy * - qz - iz * - qy;
|
this.x = ix * qw + iw * - qx + iy * - qz - iz * - qy;
|
||||||
this.y = iy * qw + iw * - qy + iz * - qx - ix * - qz;
|
this.y = iy * qw + iw * - qy + iz * - qx - ix * - qz;
|
||||||
this.z = iz * qw + iw * - qz + ix * - qy - iy * - qx;
|
this.z = iz * qw + iw * - qz + ix * - qy - iy * - qx;
|
||||||
|
|
||||||
|
return this;
|
||||||
};
|
};
|
||||||
|
|
||||||
GameLib.D3.API.Vector3.prototype.clamp = function(min, max) {
|
GameLib.D3.API.Vector3.prototype.clamp = function(min, max) {
|
||||||
|
|
|
@ -162,7 +162,7 @@ GameLib.D3.Component.FromObjectComponent = function(graphics, objectComponent) {
|
||||||
component = new GameLib.D3.ComponentPathFollowing(null, null, graphics);
|
component = new GameLib.D3.ComponentPathFollowing(null, null, graphics);
|
||||||
break;
|
break;
|
||||||
case GameLib.D3.Component.COMPONENT_MESH :
|
case GameLib.D3.Component.COMPONENT_MESH :
|
||||||
component = new GameLib.D3.ComponentMesh();
|
component = new GameLib.D3.ComponentMesh(null, null, graphics);
|
||||||
break;
|
break;
|
||||||
case GameLib.D3.Component.COMPONENT_MESH_PERMUTATION :
|
case GameLib.D3.Component.COMPONENT_MESH_PERMUTATION :
|
||||||
component = new GameLib.D3.ComponentMeshPermutation(null, null, graphics);
|
component = new GameLib.D3.ComponentMeshPermutation(null, null, graphics);
|
||||||
|
|
|
@ -61,7 +61,7 @@ GameLib.D3.ComponentMeshPermutation = function ComponentMeshPermutation(
|
||||||
quaternionOffset = new GameLib.D3.Quaternion(
|
quaternionOffset = new GameLib.D3.Quaternion(
|
||||||
graphics,
|
graphics,
|
||||||
this,
|
this,
|
||||||
new GameLib.D3.API.Quaternion()
|
new GameLib.D3.API.Quaternion(0, 0, 0, 1)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
this.quaternionOffset = quaternionOffset;
|
this.quaternionOffset = quaternionOffset;
|
||||||
|
@ -98,6 +98,8 @@ GameLib.D3.ComponentMeshPermutation = function ComponentMeshPermutation(
|
||||||
this,
|
this,
|
||||||
new GameLib.D3.API.Vector3()
|
new GameLib.D3.API.Vector3()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
this.customCode = "";
|
||||||
};
|
};
|
||||||
|
|
||||||
GameLib.D3.ComponentMeshPermutation.prototype = Object.create(GameLib.D3.Component.prototype);
|
GameLib.D3.ComponentMeshPermutation.prototype = Object.create(GameLib.D3.Component.prototype);
|
||||||
|
@ -111,42 +113,56 @@ GameLib.D3.ComponentMeshPermutation.prototype.onUpdate = function(deltaTime) {
|
||||||
|
|
||||||
if (this.parentEntity && this.mesh) {
|
if (this.parentEntity && this.mesh) {
|
||||||
|
|
||||||
this.position.x = this.parentEntity.position.x + this.positionOffset.x;
|
this.quaternion.x = this.parentEntity.quaternion.x;
|
||||||
this.position.y = this.parentEntity.position.y + this.positionOffset.y;
|
this.quaternion.y = this.parentEntity.quaternion.y;
|
||||||
this.position.z = this.parentEntity.position.z + this.positionOffset.z;
|
this.quaternion.z = this.parentEntity.quaternion.z;
|
||||||
|
this.quaternion.w = this.parentEntity.quaternion.w;
|
||||||
|
|
||||||
this.scale.x = this.parentEntity.scale.x * this.scaleOffset.x;
|
this.position.x = this.parentEntity.position.x;
|
||||||
this.scale.y = this.parentEntity.scale.y * this.scaleOffset.y;
|
this.position.y = this.parentEntity.position.y;
|
||||||
this.scale.z = this.parentEntity.scale.z * this.scaleOffset.z;
|
this.position.z = this.parentEntity.position.z;
|
||||||
|
|
||||||
this.quaternion.x = this.parentEntity.quaternion.x;// + this.quaternionOffset.x;
|
this.scale.x = this.parentEntity.scale.x;
|
||||||
this.quaternion.y = this.parentEntity.quaternion.y;// + this.quaternionOffset.y;
|
this.scale.y = this.parentEntity.scale.y;
|
||||||
this.quaternion.z = this.parentEntity.quaternion.z;// + this.quaternionOffset.z;
|
this.scale.z = this.parentEntity.scale.z;
|
||||||
this.quaternion.w = this.parentEntity.quaternion.w;// + this.quaternionOffset.w;
|
|
||||||
|
|
||||||
this.quaternion.axis.x = this.quaternionOffset.axis.x;
|
|
||||||
this.quaternion.axis.y = this.quaternionOffset.axis.y;
|
|
||||||
this.quaternion.axis.z = this.quaternionOffset.axis.z;
|
|
||||||
|
|
||||||
this.quaternion.updateInstance();
|
|
||||||
|
//this.quaternion.multiply(this.quaternionOffset).normalize();
|
||||||
|
|
||||||
|
//this.position.add(this.positionOffset.applyQuaternion(this.quaternion));
|
||||||
|
|
||||||
|
//this.quaternion.updateInstance();
|
||||||
|
|
||||||
|
//TODO: ifdef debug this --- start
|
||||||
|
|
||||||
|
if (this.customCode) {
|
||||||
|
eval(this.customCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//TODO: ifdef debug this --- end
|
||||||
|
|
||||||
|
//this.quaternion.updateInstance();
|
||||||
|
|
||||||
//this.quaternion.setFromAngle(this.quaternionOffset.angle);
|
//this.quaternion.setFromAngle(this.quaternionOffset.angle);
|
||||||
|
|
||||||
this.quaternion.normalize();
|
//this.quaternion.normalize();
|
||||||
|
|
||||||
this.mesh.position.x = this.position.x;
|
this.mesh.position.x = this.position.x;
|
||||||
this.mesh.position.y = this.position.y;
|
this.mesh.position.y = this.position.y;
|
||||||
this.mesh.position.z = this.position.z;
|
this.mesh.position.z = this.position.z;
|
||||||
|
|
||||||
this.mesh.scale.x = this.scale.x;
|
|
||||||
this.mesh.scale.y = this.scale.y;
|
|
||||||
this.mesh.scale.z = this.scale.z;
|
|
||||||
|
|
||||||
this.mesh.quaternion.x = this.quaternion.x;
|
this.mesh.quaternion.x = this.quaternion.x;
|
||||||
this.mesh.quaternion.y = this.quaternion.y;
|
this.mesh.quaternion.y = this.quaternion.y;
|
||||||
this.mesh.quaternion.z = this.quaternion.z;
|
this.mesh.quaternion.z = this.quaternion.z;
|
||||||
this.mesh.quaternion.w = this.quaternion.w;
|
this.mesh.quaternion.w = this.quaternion.w;
|
||||||
|
|
||||||
|
this.mesh.scale.x = this.scale.x;
|
||||||
|
this.mesh.scale.y = this.scale.y;
|
||||||
|
this.mesh.scale.z = this.scale.z;
|
||||||
|
|
||||||
this.mesh.updateInstance();
|
this.mesh.updateInstance();
|
||||||
|
|
||||||
// this.updateInstance();
|
// this.updateInstance();
|
||||||
|
|
|
@ -3,16 +3,27 @@
|
||||||
* is.
|
* is.
|
||||||
* @param id
|
* @param id
|
||||||
* @param name String
|
* @param name String
|
||||||
|
* @param graphics GameLib.D3.Graphics
|
||||||
* @param parentEntity GameLib.D3.Entity
|
* @param parentEntity GameLib.D3.Entity
|
||||||
* @param mesh GameLib.D3.Camera
|
* @param mesh GameLib.D3.Camera
|
||||||
|
* @param positionOffset
|
||||||
|
* @param scaleOffset
|
||||||
|
* @param quaternionOffset
|
||||||
* @constructor
|
* @constructor
|
||||||
*/
|
*/
|
||||||
GameLib.D3.ComponentMesh = function ComponentMesh(
|
GameLib.D3.ComponentMesh = function ComponentMesh(
|
||||||
id,
|
id,
|
||||||
name,
|
name,
|
||||||
|
graphics,
|
||||||
parentEntity,
|
parentEntity,
|
||||||
mesh
|
mesh,
|
||||||
|
positionOffset,
|
||||||
|
scaleOffset,
|
||||||
|
quaternionOffset
|
||||||
) {
|
) {
|
||||||
|
this.graphics = graphics;
|
||||||
|
this.graphics.isNotThreeThrow();
|
||||||
|
|
||||||
GameLib.D3.Component.call(
|
GameLib.D3.Component.call(
|
||||||
this,
|
this,
|
||||||
id,
|
id,
|
||||||
|
@ -31,6 +42,43 @@ GameLib.D3.ComponentMesh = function ComponentMesh(
|
||||||
mesh = null;
|
mesh = null;
|
||||||
}
|
}
|
||||||
this.mesh = mesh;
|
this.mesh = mesh;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Position
|
||||||
|
*/
|
||||||
|
if (GameLib.D3.Utils.UndefinedOrNull(positionOffset)) {
|
||||||
|
positionOffset = new GameLib.D3.Vector3(
|
||||||
|
graphics,
|
||||||
|
this,
|
||||||
|
new GameLib.D3.API.Vector3(0, 0, 0)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
this.positionOffset = positionOffset;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rotation
|
||||||
|
*/
|
||||||
|
if (GameLib.D3.Utils.UndefinedOrNull(quaternionOffset)) {
|
||||||
|
quaternionOffset = new GameLib.D3.Quaternion(
|
||||||
|
graphics,
|
||||||
|
this,
|
||||||
|
new GameLib.D3.API.Quaternion(1, 0, 0, 0)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
this.quaternionOffset = quaternionOffset;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Scale
|
||||||
|
*/
|
||||||
|
if (GameLib.D3.Utils.UndefinedOrNull(scaleOffset)) {
|
||||||
|
scaleOffset = new GameLib.D3.Vector3(
|
||||||
|
graphics,
|
||||||
|
this,
|
||||||
|
new GameLib.D3.API.Vector3(0, 0, 0)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
this.scaleOffset = scaleOffset;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
GameLib.D3.ComponentMesh.prototype = Object.create(GameLib.D3.Component.prototype);
|
GameLib.D3.ComponentMesh.prototype = Object.create(GameLib.D3.Component.prototype);
|
||||||
|
@ -38,29 +86,17 @@ GameLib.D3.ComponentMesh.prototype.constructor = GameLib.D3.ComponentMesh;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* onLateUpdate override method
|
* onUpdate override method
|
||||||
* @override
|
* @override
|
||||||
* @callback
|
* @callback
|
||||||
*/
|
*/
|
||||||
GameLib.D3.ComponentMesh.prototype.onLateUpdate = function() {
|
GameLib.D3.ComponentMesh.prototype.onUpdate = function() {
|
||||||
|
|
||||||
if (this.mesh) {
|
if (this.mesh) {
|
||||||
|
|
||||||
this.mesh.position.x = this.parentEntity.position.x;
|
this.mesh.position = this.parentEntity.position.copy().add(this.positionOffset);
|
||||||
this.mesh.position.y = this.parentEntity.position.y;
|
this.mesh.scale = this.parentEntity.scale.copy().add(this.scaleOffset);
|
||||||
this.mesh.position.z = this.parentEntity.position.z;
|
this.mesh.quaternion = this.parentEntity.quaternion.copy().multiply(this.quaternionOffset).normalize();
|
||||||
|
|
||||||
this.mesh.scale.x = this.parentEntity.scale.x;
|
|
||||||
this.mesh.scale.y = this.parentEntity.scale.y;
|
|
||||||
this.mesh.scale.z = this.parentEntity.scale.z;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Caller is responsible for correct quaternion - i.e. normalize quaternion if needed
|
|
||||||
*/
|
|
||||||
this.mesh.quaternion.x = this.parentEntity.quaternion.x;
|
|
||||||
this.mesh.quaternion.y = this.parentEntity.quaternion.y;
|
|
||||||
this.mesh.quaternion.z = this.parentEntity.quaternion.z;
|
|
||||||
this.mesh.quaternion.w = this.parentEntity.quaternion.w;
|
|
||||||
|
|
||||||
this.mesh.updateInstance();
|
this.mesh.updateInstance();
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,21 +5,35 @@
|
||||||
* @param apiMesh GameLib.D3.API.Mesh
|
* @param apiMesh GameLib.D3.API.Mesh
|
||||||
* @constructor
|
* @constructor
|
||||||
*/
|
*/
|
||||||
GameLib.D3.Mesh = function Mesh(
|
GameLib.D3.Mesh = function RuntimeMesh(
|
||||||
graphics,
|
graphics,
|
||||||
computeNormals,
|
computeNormals,
|
||||||
apiMesh
|
apiMesh
|
||||||
) {
|
) {
|
||||||
for (var property in apiMesh) {
|
|
||||||
if (apiMesh.hasOwnProperty(property)) {
|
|
||||||
this[property] = apiMesh[property];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.graphics = graphics;
|
this.graphics = graphics;
|
||||||
|
|
||||||
this.graphics.isNotThreeThrow();
|
this.graphics.isNotThreeThrow();
|
||||||
|
|
||||||
|
|
||||||
|
GameLib.D3.API.Mesh.call(
|
||||||
|
this,
|
||||||
|
apiMesh.id,
|
||||||
|
apiMesh.meshType,
|
||||||
|
apiMesh.name,
|
||||||
|
apiMesh.vertices,
|
||||||
|
apiMesh.faces,
|
||||||
|
apiMesh.faceVertexUvs,
|
||||||
|
apiMesh.materials,
|
||||||
|
apiMesh.parentMeshId,
|
||||||
|
apiMesh.parentSceneId,
|
||||||
|
apiMesh.skeleton,
|
||||||
|
apiMesh.skinIndices,
|
||||||
|
apiMesh.skinWeights,
|
||||||
|
apiMesh.position,
|
||||||
|
apiMesh.quaternion,
|
||||||
|
apiMesh.scale,
|
||||||
|
apiMesh.up
|
||||||
|
);
|
||||||
|
|
||||||
this.position = new GameLib.D3.Vector3(
|
this.position = new GameLib.D3.Vector3(
|
||||||
graphics,
|
graphics,
|
||||||
this,
|
this,
|
||||||
|
@ -41,24 +55,38 @@ GameLib.D3.Mesh = function Mesh(
|
||||||
0.001
|
0.001
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* We don't do a Runtime rotation since it interferes with the quaternion update
|
|
||||||
*/
|
|
||||||
|
|
||||||
this.quaternion = new GameLib.D3.Quaternion(
|
this.quaternion = new GameLib.D3.Quaternion(
|
||||||
graphics,
|
graphics,
|
||||||
this,
|
this,
|
||||||
this.quaternion
|
this.quaternion
|
||||||
);
|
);
|
||||||
|
|
||||||
|
this.localRotation = new GameLib.D3.Vector3(
|
||||||
|
graphics,
|
||||||
|
this,
|
||||||
|
this.localRotation
|
||||||
|
);
|
||||||
|
|
||||||
|
this.localPosition = new GameLib.D3.Vector3(
|
||||||
|
graphics,
|
||||||
|
this,
|
||||||
|
this.localPosition
|
||||||
|
);
|
||||||
|
|
||||||
|
this.localScale = new GameLib.D3.Vector3(
|
||||||
|
graphics,
|
||||||
|
this,
|
||||||
|
this.localScale
|
||||||
|
);
|
||||||
|
|
||||||
this.computeNormals = computeNormals;
|
this.computeNormals = computeNormals;
|
||||||
|
|
||||||
this.instance = this.createInstance(false);
|
this.instance = this.createInstance(false);
|
||||||
|
|
||||||
this.needsUpdate = false;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
GameLib.D3.Mesh.prototype = Object.create(GameLib.D3.API.Mesh.prototype);
|
||||||
|
GameLib.D3.Mesh.prototype.constructor = GameLib.D3.Mesh;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mesh Type
|
* Mesh Type
|
||||||
* @type {number}
|
* @type {number}
|
||||||
|
@ -330,6 +358,10 @@ GameLib.D3.Mesh.prototype.createInstance = function(update) {
|
||||||
instance.quaternion.z = this.quaternion.z;
|
instance.quaternion.z = this.quaternion.z;
|
||||||
instance.quaternion.w = this.quaternion.w;
|
instance.quaternion.w = this.quaternion.w;
|
||||||
|
|
||||||
|
instance.rotateX(this.localRotation.x);
|
||||||
|
instance.rotateY(this.localRotation.y);
|
||||||
|
instance.rotateZ(this.localRotation.z);
|
||||||
|
|
||||||
return instance;
|
return instance;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -12,25 +12,22 @@ GameLib.D3.Quaternion = function RuntimeQuaternion(
|
||||||
apiQuaternion,
|
apiQuaternion,
|
||||||
grain
|
grain
|
||||||
) {
|
) {
|
||||||
|
|
||||||
for (var property in apiQuaternion) {
|
|
||||||
if (apiQuaternion.hasOwnProperty(property)) {
|
|
||||||
this[property] = apiQuaternion[property];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
GameLib.D3.Utils.Extend(GameLib.D3.Quaternion, GameLib.D3.API.Quaternion);
|
|
||||||
|
|
||||||
this.graphics = graphics;
|
this.graphics = graphics;
|
||||||
|
|
||||||
this.graphics.isNotThreeThrow();
|
this.graphics.isNotThreeThrow();
|
||||||
|
|
||||||
this.parentObject = parentObject;
|
GameLib.D3.API.Quaternion.call(
|
||||||
|
this,
|
||||||
if (GameLib.D3.Utils.UndefinedOrNull(grain)) {
|
apiQuaternion.x,
|
||||||
grain = 0.001;
|
apiQuaternion.y,
|
||||||
}
|
apiQuaternion.z,
|
||||||
this.grain = grain;
|
apiQuaternion.w,
|
||||||
|
new GameLib.D3.API.Vector3(
|
||||||
|
apiQuaternion.axis.x,
|
||||||
|
apiQuaternion.axis.y,
|
||||||
|
apiQuaternion.axis.z
|
||||||
|
),
|
||||||
|
apiQuaternion.angle
|
||||||
|
);
|
||||||
|
|
||||||
this.axis = new GameLib.D3.Vector3(
|
this.axis = new GameLib.D3.Vector3(
|
||||||
this.graphics,
|
this.graphics,
|
||||||
|
@ -39,9 +36,22 @@ GameLib.D3.Quaternion = function RuntimeQuaternion(
|
||||||
0.001
|
0.001
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (GameLib.D3.Utils.UndefinedOrNull(parentObject)) {
|
||||||
|
parentObject = null;
|
||||||
|
}
|
||||||
|
this.parentObject = parentObject;
|
||||||
|
|
||||||
|
if (GameLib.D3.Utils.UndefinedOrNull(grain)) {
|
||||||
|
grain = 0.001;
|
||||||
|
}
|
||||||
|
this.grain = grain;
|
||||||
|
|
||||||
this.instance = this.createInstance();
|
this.instance = this.createInstance();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
GameLib.D3.Quaternion.prototype = Object.create(GameLib.D3.API.Quaternion.prototype);
|
||||||
|
GameLib.D3.Quaternion.prototype.constructor = GameLib.D3.Quaternion;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an instance quaternion
|
* Creates an instance quaternion
|
||||||
* @param update
|
* @param update
|
||||||
|
@ -90,51 +100,3 @@ GameLib.D3.Quaternion.prototype.toApiQuaternion = function() {
|
||||||
this.angle
|
this.angle
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
GameLib.D3.Quaternion.prototype.normalize = function () {
|
|
||||||
|
|
||||||
this.updateInstance();
|
|
||||||
|
|
||||||
this.instance.normalize();
|
|
||||||
|
|
||||||
this.x = this.instance.x;
|
|
||||||
this.y = this.instance.y;
|
|
||||||
this.z = this.instance.z;
|
|
||||||
this.w = this.instance.w;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param matrix4 GameLib.D3.Matrix4
|
|
||||||
*/
|
|
||||||
GameLib.D3.Quaternion.prototype.setFromRotationMatrix = function(matrix4) {
|
|
||||||
|
|
||||||
this.instance.setFromRotationMatrix(matrix4.instance);
|
|
||||||
|
|
||||||
this.x = this.instance.x;
|
|
||||||
this.y = this.instance.y;
|
|
||||||
this.z = this.instance.z;
|
|
||||||
this.w = this.instance.w;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param quaternion GameLib.D3.Quaternion
|
|
||||||
* @param t
|
|
||||||
* @returns {GameLib.D3.Quaternion}
|
|
||||||
*/
|
|
||||||
GameLib.D3.Quaternion.prototype.slerp = function (quaternion, t) {
|
|
||||||
|
|
||||||
this.updateInstance();
|
|
||||||
|
|
||||||
this.instance.slerp(quaternion.instance, t);
|
|
||||||
|
|
||||||
this.x = this.instance.x;
|
|
||||||
this.y = this.instance.y;
|
|
||||||
this.z = this.instance.z;
|
|
||||||
this.w = this.instance.w;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
};
|
|
||||||
|
|
Loading…
Reference in New Issue