cyclone-physics
Version:
Pure Javascript physics engine based on http://procyclone.com/
74 lines (65 loc) • 2.17 kB
JavaScript
elation.require(['engine.external.three.three'], function() {
class CycloneVector3 extends THREE.Vector3 {
get x() { return this._x; }
set x(v) { this.changed = (this.changed || v !== this._x); this._x = v; }
get y() { return this._y; }
set y(v) { this.changed = (this.changed || v !== this._y); this._y = v; }
get z() { return this._z; }
set z(v) { this.changed = (this.changed || v !== this._z); this._z = v; }
reset() {
this.changed = false;
}
toJSON() {
return {x: this._x, y: this._y, z: this._z};
}
clone() {
return super.clone();
}
}
// FIXME - orientation doesn't currently work properly because THREE.Quaternion already uses getters and setters internally
class CycloneQuaternion extends THREE.Quaternion {
get x() { return this._x; }
set x(v) { this.changed = (this.changed || v !== this._x); this._x = v; }
get y() { return this._y; }
set y(v) { this.changed = (this.changed || v !== this._y); this._y = v; }
get z() { return this._z; }
set z(v) { this.changed = (this.changed || v !== this._z); this._z = v; }
get w() { return this._w; }
set w(v) { this.changed = (this.changed || v !== this._w); this._w = v; }
copy(quat) {
this.changed = true;
return super.copy(quat);
}
clone() {
return super.clone();
}
set(x, y, z, w) {
this.changed = true;
return super.set(x, y, z, w);
}
setFromEuler(euler, update) {
this.changed = true;
return super.setFromEuler(euler, update);
}
setFromAxisAngle(axis, angle) {
this.changed = true;
return super.setFromAxisAngle(axis, angle);
}
setFromRotationMatrix(m) {
this.changed = true;
return super.setFromRotationMatrix(m);
}
setFromUnitVectors(v1, v2) {
this.changed = true;
return super.setFromUnitVectors(v1, v2);
}
reset() {
this.changed = false;
}
toJSON() {
return {x: this._x, y: this._y, z: this._z, w: this.w};
}
}
elation.extend('physics.vector3', CycloneVector3);
elation.extend('physics.quaternion', CycloneQuaternion);
});