r3-legacy/src/game-lib-d3-bone.js

171 lines
3.8 KiB
JavaScript
Raw Normal View History

2016-12-23 16:07:10 +01:00
/**
* Bone Superset
* @constructor
* @param graphics GameLib.D3.Graphics
* @param apiBone GameLib.D3.API.Bone
*/
GameLib.D3.Bone = function RuntimeBone(
graphics,
apiBone
) {
this.graphics = graphics;
this.graphics.isNotThreeThrow();
GameLib.D3.API.Bone.call(
this,
apiBone.id,
apiBone.name,
apiBone.childBoneIds,
apiBone.parentBoneIds,
apiBone.position,
apiBone.quaternion,
apiBone.scale,
apiBone.up
);
this.position = new GameLib.Vector3(
graphics,
this,
this.position
);
this.quaternion = new GameLib.Quaternion(
graphics,
this,
this.quaternion
);
this.scale = new GameLib.Vector3(
graphics,
this,
this.scale
);
this.up = new GameLib.Vector3(
graphics,
this,
this.up
);
this.instance = this.createInstance();
};
GameLib.D3.Bone.prototype = Object.create(GameLib.D3.API.Bone.prototype);
GameLib.D3.Bone.prototype.constructor = GameLib.D3.Bone;
/**
* Creates an instance bone
* @param update boolean
*/
GameLib.D3.Bone.prototype.createInstance = function(update) {
var instance = null;
if (update) {
instance = this.instance;
} else {
instance = new THREE.Bone();
}
instance.name = this.name;
instance.position.x = this.position.x;
instance.position.y = this.position.y;
instance.position.z = this.position.z;
instance.quaternion.x = this.quaternion.x;
instance.quaternion.y = this.quaternion.y;
instance.quaternion.z = this.quaternion.z;
instance.quaternion.w = this.quaternion.w;
instance.scale.x = this.scale.x;
instance.scale.y = this.scale.y;
instance.scale.z = this.scale.z;
instance.up.x = this.up.x;
instance.up.y = this.up.y;
instance.up.z = this.up.z;
return instance;
};
/**
* Updates the instance
*/
GameLib.D3.Bone.prototype.updateInstance = function() {
this.instance = this.createInstance(true);
};
/**
* Converts a GameLib.D3.Bone to GameLib.D3.API.Bone
* @returns {GameLib.D3.API.Bone}
*/
GameLib.D3.Bone.prototype.toApiBone = function() {
var apiBone = new GameLib.D3.API.Bone(
this.id,
this.name,
this.childBoneIds,
this.parentBoneIds,
this.position.toApiVector(),
this.quaternion.toApiQuaternion(),
this.scale.toApiVector(),
this.up.toApiVector()
);
return apiBone;
};
/**
* Returns a GameLib.D3.Bone from a bone Object
* @param graphics GameLib.D3.Graphics
* @param objectBone Object
* @returns GameLib.D3.Bone
* @constructor
*/
GameLib.D3.Bone.FromObjectBone = function(
graphics,
objectBone
) {
var apiBone = new GameLib.D3.API.Bone(
objectBone.id,
objectBone.name,
objectBone.childBoneIds,
objectBone.parentBoneIds,
new GameLib.API.Vector3(
objectBone.position.x,
objectBone.position.y,
objectBone.position.z
),
new GameLib.API.Quaternion(
objectBone.quaternion.x,
objectBone.quaternion.y,
objectBone.quaternion.z,
objectBone.quaternion.w,
new GameLib.API.Vector3(
objectBone.quaternion.axis.x,
objectBone.quaternion.axis.y,
objectBone.quaternion.axis.z
),
objectBone.quaternion.angle
),
new GameLib.API.Vector3(
objectBone.scale.x,
objectBone.scale.y,
objectBone.scale.z
),
new GameLib.API.Vector3(
objectBone.up.x,
objectBone.up.y,
objectBone.up.z
)
);
var bone = new GameLib.D3.Bone(
graphics,
apiBone
);
return bone;
};