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

143 lines
2.9 KiB
JavaScript

/**
* Bone Superset
* @constructor
* @param graphics GameLib.D3.Graphics
* @param apiBone GameLib.D3.API.Bone
*/
GameLib.D3.Bone = function (
graphics,
apiBone
) {
this.graphics = graphics;
this.graphics.isNotThreeThrow();
if (GameLib.Utils.UndefinedOrNull(apiBone)) {
apiBone = {};
}
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.position,
this
);
this.quaternion = new GameLib.Quaternion(
graphics,
this.quaternion,
this
);
this.scale = new GameLib.Vector3(
graphics,
this.scale,
this
);
this.up = new GameLib.Vector3(
graphics,
this.up,
this
);
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 = GameLib.D3.API.Bone.FromObjectBone(objectBone);
var bone = GameLib.D3.Bone(
graphics,
apiBone
);
return bone;
};