/** * 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; };