get sub property
parent
02e1718efa
commit
b6c019a00a
|
@ -394,8 +394,8 @@ GameLib.System.Animation.prototype.attachAnimation = function(animation, mesh) {
|
||||||
mesh.quaternion,
|
mesh.quaternion,
|
||||||
'angle',
|
'angle',
|
||||||
{
|
{
|
||||||
'get': this.getQuaternionAngle(mesh, animation),
|
'get': this.getProperty(mesh, 'angle', 'quaternion'),
|
||||||
'set': this.setQuaternionAngle(mesh, animation),
|
'set': this.setProperty(mesh, animation, 'angle', 'quaternion'),
|
||||||
'configurable': true
|
'configurable': true
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -404,8 +404,8 @@ GameLib.System.Animation.prototype.attachAnimation = function(animation, mesh) {
|
||||||
mesh.quaternion.axis,
|
mesh.quaternion.axis,
|
||||||
'x',
|
'x',
|
||||||
{
|
{
|
||||||
'get': this.getQuaternionAxisX(mesh, animation),
|
'get': this.getSubProperty(mesh, 'x', 'quaternion', 'axis'),
|
||||||
'set': this.setQuaternionAxisX(mesh, animation),
|
'set': this.setSubProperty(mesh, animation, 'x', 'quaternion', 'axis'),
|
||||||
'configurable': true
|
'configurable': true
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -414,8 +414,8 @@ GameLib.System.Animation.prototype.attachAnimation = function(animation, mesh) {
|
||||||
mesh.quaternion.axis,
|
mesh.quaternion.axis,
|
||||||
'y',
|
'y',
|
||||||
{
|
{
|
||||||
'get': this.getQuaternionAxisY(mesh, animation),
|
'get': this.getSubProperty(mesh, 'y', 'quaternion', 'axis'),
|
||||||
'set': this.setQuaternionAxisY(mesh, animation),
|
'set': this.setSubProperty(mesh, animation, 'y', 'quaternion', 'axis'),
|
||||||
'configurable': true
|
'configurable': true
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -424,8 +424,8 @@ GameLib.System.Animation.prototype.attachAnimation = function(animation, mesh) {
|
||||||
mesh.quaternion.axis,
|
mesh.quaternion.axis,
|
||||||
'z',
|
'z',
|
||||||
{
|
{
|
||||||
'get': this.getQuaternionAxisZ(mesh, animation),
|
'get': this.getSubProperty(mesh, 'z', 'quaternion', 'axis'),
|
||||||
'set': this.setQuaternionAxisZ(mesh, animation),
|
'set': this.setSubProperty(mesh, animation, 'z', 'quaternion', 'axis'),
|
||||||
'configurable': true
|
'configurable': true
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -521,282 +521,335 @@ GameLib.System.Animation.prototype.attachAnimation = function(animation, mesh) {
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
GameLib.System.Animation.prototype.getQuaternionAngle = function(mesh, animation) {
|
// GameLib.System.Animation.prototype.getQuaternionAngle = function(mesh, animation) {
|
||||||
|
//
|
||||||
|
// return function() {
|
||||||
|
// return;
|
||||||
|
// /**
|
||||||
|
// * TODO: fix this shit..
|
||||||
|
// * Back up the current property descriptor
|
||||||
|
// */
|
||||||
|
// mesh.animationObject = {
|
||||||
|
// backupAngleDescriptor: Object.getOwnPropertyDescriptor(mesh.quaternion, 'angle'),
|
||||||
|
// targetAngle: mesh.quaternion.angle,
|
||||||
|
// angleIncrement: true,
|
||||||
|
// intermediateAngle: mesh.quaternion.angle,
|
||||||
|
// subscription: null,
|
||||||
|
// inProcess: false,
|
||||||
|
// blocking: animation.blocking//,
|
||||||
|
// // callbacks : [],
|
||||||
|
// // storedValues : []
|
||||||
|
// };
|
||||||
|
//
|
||||||
|
// var getIntermediateAngle = function () {
|
||||||
|
// return mesh.animationObject.intermediateAngle;
|
||||||
|
// };
|
||||||
|
//
|
||||||
|
// var getTargetAngle = function () {
|
||||||
|
//
|
||||||
|
// // if (mesh.animationObject.storedValues.length > 0) {
|
||||||
|
// // return mesh.animationObject.storedValues[mesh.animationObject.storedValues.length - 1];
|
||||||
|
// // }
|
||||||
|
//
|
||||||
|
// return mesh.animationObject.targetAngle;
|
||||||
|
// };
|
||||||
|
//
|
||||||
|
// var animateRotation = function (value) {
|
||||||
|
//
|
||||||
|
// mesh.animationObject.intermediateAngle += value;
|
||||||
|
//
|
||||||
|
// var done = false;
|
||||||
|
//
|
||||||
|
// if (mesh.animationObject.angleIncrement) {
|
||||||
|
// /**
|
||||||
|
// * We are rotating upwards
|
||||||
|
// */
|
||||||
|
// if (mesh.animationObject.intermediateAngle >= mesh.animationObject.targetAngle) {
|
||||||
|
// /**
|
||||||
|
// * We need to stop
|
||||||
|
// */
|
||||||
|
// done = true;
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// /**
|
||||||
|
// * We are rotating downwards
|
||||||
|
// */
|
||||||
|
// if (mesh.animationObject.intermediateAngle <= mesh.animationObject.targetAngle) {
|
||||||
|
// /**
|
||||||
|
// * We need to stop
|
||||||
|
// */
|
||||||
|
// done = true;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if (done) {
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * We clamp to our target angle
|
||||||
|
// */
|
||||||
|
// mesh.animationObject.intermediateAngle = mesh.animationObject.targetAngle;
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * We limit our intermediate angle between values of -pi and pi
|
||||||
|
// */
|
||||||
|
// while (mesh.animationObject.intermediateAngle > Math.PI) {
|
||||||
|
// mesh.animationObject.intermediateAngle -= (Math.PI * 2);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// while (mesh.animationObject.intermediateAngle < -(Math.PI)) {
|
||||||
|
// mesh.animationObject.intermediateAngle += (Math.PI * 2);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * We apply our new intermediate angle to our target
|
||||||
|
// */
|
||||||
|
// mesh.animationObject.targetAngle = mesh.animationObject.intermediateAngle;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Apply the actual rotation to the mesh
|
||||||
|
// */
|
||||||
|
// mesh.updateInstanceRotationFromAxisAngle(mesh.quaternion.axis, mesh.animationObject.intermediateAngle);
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Check again if we are done, we need to do some additional work -
|
||||||
|
// */
|
||||||
|
// if (done) {
|
||||||
|
//
|
||||||
|
// if (!mesh.animationObject.subscription) {
|
||||||
|
// var message = 'mesh animation object subscription went missing for ';
|
||||||
|
// message += mesh.name + ': ';
|
||||||
|
// message += animation.name;
|
||||||
|
// console.warn(message);
|
||||||
|
// throw new Error(message);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Stop subscribing to before render events
|
||||||
|
// */
|
||||||
|
// mesh.animationObject.subscription.remove();
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * @type {null}
|
||||||
|
// */
|
||||||
|
// mesh.animationObject.subscription = null;
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * For some meshes, when we are done with the animation, we want to apply
|
||||||
|
// * the current state of the mesh to the object data itself (i.e. update
|
||||||
|
// * its vertices etc)
|
||||||
|
// */
|
||||||
|
// if (animation.applyToMeshWhenDone) {
|
||||||
|
// /**
|
||||||
|
// * Now we say that our intermediate angle is zero, because we will apply our rotation
|
||||||
|
// * and this will prevent us from re-registering a new 'animationRender' event
|
||||||
|
// */
|
||||||
|
// mesh.animationObject.targetAngle = 0;
|
||||||
|
// mesh.animationObject.intermediateAngle = 0;
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Apply our position, rotation and scale to the mesh
|
||||||
|
// */
|
||||||
|
// mesh.applyPositionRotationScale();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Tell our animation component that it is no longer in process...
|
||||||
|
// * @type {boolean}
|
||||||
|
// */
|
||||||
|
// mesh.animationObject.inProcess = false;
|
||||||
|
//
|
||||||
|
// // if (mesh.animationObject.callbacks.length > 0) {
|
||||||
|
// // var callback = mesh.animationObject.callbacks[0];
|
||||||
|
// // mesh.animationObject.callbacks.splice(0,1);
|
||||||
|
// // callback();
|
||||||
|
// // }
|
||||||
|
//
|
||||||
|
// // mesh.animationObject.storedValues = [];
|
||||||
|
// }
|
||||||
|
// };
|
||||||
|
// }
|
||||||
|
// };
|
||||||
|
//
|
||||||
|
// GameLib.System.Animation.prototype.setQuaternionAngle = function(mesh, animation) {
|
||||||
|
//
|
||||||
|
// return function(value) {
|
||||||
|
// return;
|
||||||
|
// /**
|
||||||
|
// * TODO: update this shit
|
||||||
|
// */
|
||||||
|
// /**
|
||||||
|
// * Check if we have work to do
|
||||||
|
// */
|
||||||
|
// if (mesh.animationObject.intermediateAngle === value) {
|
||||||
|
//
|
||||||
|
// mesh.animationObject.inProcess = false;
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Nothing to do
|
||||||
|
// */
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Check if we have another animation in process
|
||||||
|
// */
|
||||||
|
// if (mesh.animationObject.inProcess && mesh.animationObject.blocking) {
|
||||||
|
//
|
||||||
|
// console.log('another animation is already in process');
|
||||||
|
//
|
||||||
|
// // setTargetAngle(value);
|
||||||
|
//
|
||||||
|
// // GameLib.Utils.PushUnique(mesh.animationObject.storedValues, value);
|
||||||
|
// //
|
||||||
|
// // mesh.animationObject.callbacks.push(
|
||||||
|
// // function(__value) {
|
||||||
|
// // return function(){
|
||||||
|
// // mesh.quaternion.angle = __value;
|
||||||
|
// // }
|
||||||
|
// // }(value)
|
||||||
|
// // );
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Respond that our angle is actually our target angle (it will be that soon)
|
||||||
|
// */
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * We indicate that we now have an animation in process
|
||||||
|
// * @type {boolean}
|
||||||
|
// */
|
||||||
|
// mesh.animationObject.inProcess = true;
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Ok - all good - lets start the animation
|
||||||
|
// */
|
||||||
|
// if (mesh.animationObject.intermediateAngle > value) {
|
||||||
|
// /**
|
||||||
|
// * We will rotate towards by decrementing
|
||||||
|
// */
|
||||||
|
// mesh.animationObject.angleIncrement = false;
|
||||||
|
// } else {
|
||||||
|
// /**
|
||||||
|
// * We will rotate towards by incrementing
|
||||||
|
// */
|
||||||
|
// mesh.animationObject.angleIncrement = true;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * We say what our target angle is - when we reach our target angle, we want
|
||||||
|
// * to stop our animation
|
||||||
|
// */
|
||||||
|
// mesh.animationObject.targetAngle = value;
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Now we subscribe to 'before render' events, and slowly increment the value
|
||||||
|
// * @type {{fn, remove}}
|
||||||
|
// */
|
||||||
|
// mesh.animationObject.subscription = GameLib.Event.Subscribe(
|
||||||
|
// GameLib.Event.BEFORE_RENDER,
|
||||||
|
// function(data) {
|
||||||
|
//
|
||||||
|
// var increment = Math.abs(animation.rotationSpeed);
|
||||||
|
//
|
||||||
|
// if (!mesh.animationObject.angleIncrement) {
|
||||||
|
// increment *= -1;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// animateRotation(data.delta * increment);
|
||||||
|
// }
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
// };
|
||||||
|
//
|
||||||
|
// GameLib.System.Animation.prototype.getQuaternionAxisX = function(mesh, animation) {
|
||||||
|
// return function() {
|
||||||
|
// return this.latest[mesh.id].quaternion.axis.x;
|
||||||
|
// }.bind(this);
|
||||||
|
// };
|
||||||
|
//
|
||||||
|
// GameLib.System.Animation.prototype.setQuaternionAxisX = function(mesh, animation) {
|
||||||
|
// return function(value) {
|
||||||
|
// this.latest[mesh.id].quaternion.axis.x = value;
|
||||||
|
// }.bind(this);
|
||||||
|
// };
|
||||||
|
//
|
||||||
|
// GameLib.System.Animation.prototype.getQuaternionAxisY = function(mesh, animation) {
|
||||||
|
// return function() {
|
||||||
|
// return this.latest[mesh.id].quaternion.axis.y;
|
||||||
|
// }.bind(this);
|
||||||
|
// };
|
||||||
|
//
|
||||||
|
// GameLib.System.Animation.prototype.setQuaternionAxisY = function(mesh, animation) {
|
||||||
|
// return function(value) {
|
||||||
|
// this.latest[mesh.id].quaternion.axis.y = value;
|
||||||
|
// }.bind(this);
|
||||||
|
// };
|
||||||
|
//
|
||||||
|
// GameLib.System.Animation.prototype.getQuaternionAxisZ = function(mesh, animation) {
|
||||||
|
// return function() {
|
||||||
|
// return this.latest[mesh.id].quaternion.axis.z;
|
||||||
|
// }.bind(this);
|
||||||
|
// };
|
||||||
|
//
|
||||||
|
// GameLib.System.Animation.prototype.setQuaternionAxisZ = function(mesh, animation) {
|
||||||
|
// return function(value) {
|
||||||
|
// this.latest[mesh.id].quaternion.axis.z = value;
|
||||||
|
// }.bind(this);
|
||||||
|
// };
|
||||||
|
|
||||||
|
GameLib.System.Animation.prototype.getSubProperty = function(mesh, axis, property, subProperty) {
|
||||||
return function() {
|
return function() {
|
||||||
return;
|
return this.latest[mesh.id][property][subProperty][axis];
|
||||||
/**
|
}.bind(this);
|
||||||
* TODO: fix this shit..
|
|
||||||
* Back up the current property descriptor
|
|
||||||
*/
|
|
||||||
mesh.animationObject = {
|
|
||||||
backupAngleDescriptor: Object.getOwnPropertyDescriptor(mesh.quaternion, 'angle'),
|
|
||||||
targetAngle: mesh.quaternion.angle,
|
|
||||||
angleIncrement: true,
|
|
||||||
intermediateAngle: mesh.quaternion.angle,
|
|
||||||
subscription: null,
|
|
||||||
inProcess: false,
|
|
||||||
blocking: animation.blocking//,
|
|
||||||
// callbacks : [],
|
|
||||||
// storedValues : []
|
|
||||||
};
|
|
||||||
|
|
||||||
var getIntermediateAngle = function () {
|
|
||||||
return mesh.animationObject.intermediateAngle;
|
|
||||||
};
|
|
||||||
|
|
||||||
var getTargetAngle = function () {
|
|
||||||
|
|
||||||
// if (mesh.animationObject.storedValues.length > 0) {
|
|
||||||
// return mesh.animationObject.storedValues[mesh.animationObject.storedValues.length - 1];
|
|
||||||
// }
|
|
||||||
|
|
||||||
return mesh.animationObject.targetAngle;
|
|
||||||
};
|
|
||||||
|
|
||||||
var animateRotation = function (value) {
|
|
||||||
|
|
||||||
mesh.animationObject.intermediateAngle += value;
|
|
||||||
|
|
||||||
var done = false;
|
|
||||||
|
|
||||||
if (mesh.animationObject.angleIncrement) {
|
|
||||||
/**
|
|
||||||
* We are rotating upwards
|
|
||||||
*/
|
|
||||||
if (mesh.animationObject.intermediateAngle >= mesh.animationObject.targetAngle) {
|
|
||||||
/**
|
|
||||||
* We need to stop
|
|
||||||
*/
|
|
||||||
done = true;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
/**
|
|
||||||
* We are rotating downwards
|
|
||||||
*/
|
|
||||||
if (mesh.animationObject.intermediateAngle <= mesh.animationObject.targetAngle) {
|
|
||||||
/**
|
|
||||||
* We need to stop
|
|
||||||
*/
|
|
||||||
done = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (done) {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* We clamp to our target angle
|
|
||||||
*/
|
|
||||||
mesh.animationObject.intermediateAngle = mesh.animationObject.targetAngle;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* We limit our intermediate angle between values of -pi and pi
|
|
||||||
*/
|
|
||||||
while (mesh.animationObject.intermediateAngle > Math.PI) {
|
|
||||||
mesh.animationObject.intermediateAngle -= (Math.PI * 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
while (mesh.animationObject.intermediateAngle < -(Math.PI)) {
|
|
||||||
mesh.animationObject.intermediateAngle += (Math.PI * 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* We apply our new intermediate angle to our target
|
|
||||||
*/
|
|
||||||
mesh.animationObject.targetAngle = mesh.animationObject.intermediateAngle;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Apply the actual rotation to the mesh
|
|
||||||
*/
|
|
||||||
mesh.updateInstanceRotationFromAxisAngle(mesh.quaternion.axis, mesh.animationObject.intermediateAngle);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check again if we are done, we need to do some additional work -
|
|
||||||
*/
|
|
||||||
if (done) {
|
|
||||||
|
|
||||||
if (!mesh.animationObject.subscription) {
|
|
||||||
var message = 'mesh animation object subscription went missing for ';
|
|
||||||
message += mesh.name + ': ';
|
|
||||||
message += animation.name;
|
|
||||||
console.warn(message);
|
|
||||||
throw new Error(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Stop subscribing to before render events
|
|
||||||
*/
|
|
||||||
mesh.animationObject.subscription.remove();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @type {null}
|
|
||||||
*/
|
|
||||||
mesh.animationObject.subscription = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* For some meshes, when we are done with the animation, we want to apply
|
|
||||||
* the current state of the mesh to the object data itself (i.e. update
|
|
||||||
* its vertices etc)
|
|
||||||
*/
|
|
||||||
if (animation.applyToMeshWhenDone) {
|
|
||||||
/**
|
|
||||||
* Now we say that our intermediate angle is zero, because we will apply our rotation
|
|
||||||
* and this will prevent us from re-registering a new 'animationRender' event
|
|
||||||
*/
|
|
||||||
mesh.animationObject.targetAngle = 0;
|
|
||||||
mesh.animationObject.intermediateAngle = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Apply our position, rotation and scale to the mesh
|
|
||||||
*/
|
|
||||||
mesh.applyPositionRotationScale();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tell our animation component that it is no longer in process...
|
|
||||||
* @type {boolean}
|
|
||||||
*/
|
|
||||||
mesh.animationObject.inProcess = false;
|
|
||||||
|
|
||||||
// if (mesh.animationObject.callbacks.length > 0) {
|
|
||||||
// var callback = mesh.animationObject.callbacks[0];
|
|
||||||
// mesh.animationObject.callbacks.splice(0,1);
|
|
||||||
// callback();
|
|
||||||
// }
|
|
||||||
|
|
||||||
// mesh.animationObject.storedValues = [];
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
GameLib.System.Animation.prototype.setQuaternionAngle = function(mesh, animation) {
|
GameLib.System.Animation.prototype.setSubProperty = function(mesh, animation, axis, property, subProperty) {
|
||||||
|
|
||||||
return function(value) {
|
return function(value) {
|
||||||
return;
|
|
||||||
/**
|
|
||||||
* TODO: update this shit
|
|
||||||
*/
|
|
||||||
/**
|
|
||||||
* Check if we have work to do
|
|
||||||
*/
|
|
||||||
if (mesh.animationObject.intermediateAngle === value) {
|
|
||||||
|
|
||||||
mesh.animationObject.inProcess = false;
|
var from = Number(this.latest[mesh.id][property][subProperty][axis]);
|
||||||
|
|
||||||
|
this.latest[mesh.id][property][subProperty][axis] = value;
|
||||||
|
|
||||||
|
if (property === 'position') {
|
||||||
/**
|
/**
|
||||||
* Nothing to do
|
* Look for other position animations
|
||||||
|
* TODO:check when not super exausted
|
||||||
*/
|
*/
|
||||||
return;
|
// var positionAnimationObject = this.animations[mesh.id].reduce(
|
||||||
}
|
// function(result, animationObject) {
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if we have another animation in process
|
|
||||||
*/
|
|
||||||
if (mesh.animationObject.inProcess && mesh.animationObject.blocking) {
|
|
||||||
|
|
||||||
console.log('another animation is already in process');
|
|
||||||
|
|
||||||
// setTargetAngle(value);
|
|
||||||
|
|
||||||
// GameLib.Utils.PushUnique(mesh.animationObject.storedValues, value);
|
|
||||||
//
|
//
|
||||||
// mesh.animationObject.callbacks.push(
|
// if (animationObject.type === 'position') {
|
||||||
// function(__value) {
|
// result = animationObject;
|
||||||
// return function(){
|
|
||||||
// mesh.quaternion.angle = __value;
|
|
||||||
// }
|
// }
|
||||||
// }(value)
|
//
|
||||||
|
// return result;
|
||||||
|
// },
|
||||||
|
// null
|
||||||
// );
|
// );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Respond that our angle is actually our target angle (it will be that soon)
|
* We found another position animation - just update the 'to' property
|
||||||
*/
|
*/
|
||||||
return;
|
// if (positionAnimationObject) {
|
||||||
|
// positionAnimationObject.to = value;
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
this.animations[mesh.id].push(
|
||||||
* We indicate that we now have an animation in process
|
{
|
||||||
* @type {boolean}
|
type : property,
|
||||||
*/
|
axis : axis,
|
||||||
mesh.animationObject.inProcess = true;
|
from : from,
|
||||||
|
to : value,
|
||||||
/**
|
animation : animation,
|
||||||
* Ok - all good - lets start the animation
|
mesh : mesh
|
||||||
*/
|
|
||||||
if (mesh.animationObject.intermediateAngle > value) {
|
|
||||||
/**
|
|
||||||
* We will rotate towards by decrementing
|
|
||||||
*/
|
|
||||||
mesh.animationObject.angleIncrement = false;
|
|
||||||
} else {
|
|
||||||
/**
|
|
||||||
* We will rotate towards by incrementing
|
|
||||||
*/
|
|
||||||
mesh.animationObject.angleIncrement = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* We say what our target angle is - when we reach our target angle, we want
|
|
||||||
* to stop our animation
|
|
||||||
*/
|
|
||||||
mesh.animationObject.targetAngle = value;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Now we subscribe to 'before render' events, and slowly increment the value
|
|
||||||
* @type {{fn, remove}}
|
|
||||||
*/
|
|
||||||
mesh.animationObject.subscription = GameLib.Event.Subscribe(
|
|
||||||
GameLib.Event.BEFORE_RENDER,
|
|
||||||
function(data) {
|
|
||||||
|
|
||||||
var increment = Math.abs(animation.rotationSpeed);
|
|
||||||
|
|
||||||
if (!mesh.animationObject.angleIncrement) {
|
|
||||||
increment *= -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
animateRotation(data.delta * increment);
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
GameLib.System.Animation.prototype.getQuaternionAxisX = function(mesh, animation) {
|
}.bind(this)
|
||||||
return function() {
|
|
||||||
return this.latest[mesh.id].quaternion.axis.x;
|
|
||||||
}.bind(this);
|
|
||||||
};
|
|
||||||
|
|
||||||
GameLib.System.Animation.prototype.setQuaternionAxisX = function(mesh, animation) {
|
|
||||||
return function(value) {
|
|
||||||
this.latest[mesh.id].quaternion.axis.x = value;
|
|
||||||
}.bind(this);
|
|
||||||
};
|
|
||||||
|
|
||||||
GameLib.System.Animation.prototype.getQuaternionAxisY = function(mesh, animation) {
|
|
||||||
return function() {
|
|
||||||
return this.latest[mesh.id].quaternion.axis.y;
|
|
||||||
}.bind(this);
|
|
||||||
};
|
|
||||||
|
|
||||||
GameLib.System.Animation.prototype.setQuaternionAxisY = function(mesh, animation) {
|
|
||||||
return function(value) {
|
|
||||||
this.latest[mesh.id].quaternion.axis.y = value;
|
|
||||||
}.bind(this);
|
|
||||||
};
|
|
||||||
|
|
||||||
GameLib.System.Animation.prototype.getQuaternionAxisZ = function(mesh, animation) {
|
|
||||||
return function() {
|
|
||||||
return this.latest[mesh.id].quaternion.axis.z;
|
|
||||||
}.bind(this);
|
|
||||||
};
|
|
||||||
|
|
||||||
GameLib.System.Animation.prototype.setQuaternionAxisZ = function(mesh, animation) {
|
|
||||||
return function(value) {
|
|
||||||
this.latest[mesh.id].quaternion.axis.z = value;
|
|
||||||
}.bind(this);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
GameLib.System.Animation.prototype.getProperty = function(mesh, axis, property) {
|
GameLib.System.Animation.prototype.getProperty = function(mesh, axis, property) {
|
||||||
|
|
Loading…
Reference in New Issue