mirror of https://github.com/axmolengine/axmol.git
377 lines
14 KiB
JavaScript
377 lines
14 KiB
JavaScript
|
/*
|
||
|
* Copyright (c) 2013-2014 Chukong Technologies Inc.
|
||
|
*
|
||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||
|
* of this software and associated documentation files (the "Software"), to deal
|
||
|
* in the Software without restriction, including without limitation the rights
|
||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||
|
* copies of the Software, and to permit persons to whom the Software is
|
||
|
* furnished to do so, subject to the following conditions:
|
||
|
*
|
||
|
* The above copyright notice and this permission notice shall be included in
|
||
|
* all copies or substantial portions of the Software.
|
||
|
*
|
||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||
|
* THE SOFTWARE.
|
||
|
*/
|
||
|
|
||
|
//
|
||
|
// Chipmunk defines
|
||
|
//
|
||
|
|
||
|
var cp = cp || {};
|
||
|
|
||
|
cp.Vect = function(x, y){
|
||
|
this.x = x;
|
||
|
this.y = y;
|
||
|
}
|
||
|
cp.Vect.prototype.add = function(v){
|
||
|
this.x += v.x;
|
||
|
this.y += v.y;
|
||
|
return this;
|
||
|
}
|
||
|
cp.Vect.prototype.sub = function(v){
|
||
|
this.x -= v.x;
|
||
|
this.y -= v.y;
|
||
|
return this;
|
||
|
}
|
||
|
cp.Vect.prototype.neg = function(){
|
||
|
this.x = -this.x;
|
||
|
this.y = -this.y;
|
||
|
return this;
|
||
|
}
|
||
|
cp.Vect.prototype.mult = function(s){
|
||
|
this.x *= s;
|
||
|
this.y *= s;
|
||
|
return this;
|
||
|
}
|
||
|
cp.Vect.prototype.rotate = function(v){
|
||
|
this.x = this.x * v.x - this.y * v.y;
|
||
|
this.y = this.x * v.y + this.y * v.x;
|
||
|
return this;
|
||
|
}
|
||
|
cp.Vect.prototype.project = function(v){
|
||
|
this.mult(cp.vdot(this, v) / cp.vlengthsq(v));
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
cp.v = function(x, y){
|
||
|
return new cp.Vect(x, y);
|
||
|
}
|
||
|
cp.vzero = cp.v(0,0);
|
||
|
|
||
|
// Vector: Compatibility with Chipmunk-JS
|
||
|
cp.v.add = cp.vadd;
|
||
|
cp.v.clamp = cp.vclamp;
|
||
|
cp.v.cross = cp.vcross;
|
||
|
cp.v.dist = cp.vdist;
|
||
|
cp.v.distsq = cp.vdistsq;
|
||
|
cp.v.dot = cp.vdot;
|
||
|
cp.v.eql = cp.veql;
|
||
|
cp.v.forangle = cp.vforangle;
|
||
|
cp.v.len = cp.vlength;
|
||
|
cp.v.lengthsq = cp.vlengthsq;
|
||
|
cp.v.lerp = cp.vlerp;
|
||
|
cp.v.lerpconst = cp.vlerpconst;
|
||
|
cp.v.mult = cp.vmult;
|
||
|
cp.v.near = cp.vnear;
|
||
|
cp.v.neg = cp.vneg;
|
||
|
cp.v.normalize = cp.vnormalize;
|
||
|
cp.v.normalize_safe = cp.vnormalize_safe;
|
||
|
cp.v.perp = cp.vperp;
|
||
|
cp.v.project = cp.vproject;
|
||
|
cp.v.rotate = cp.vrotate;
|
||
|
cp.v.pvrperp = cp.vrperp;
|
||
|
cp.v.slerp = cp.vslerp;
|
||
|
cp.v.slerpconst = cp.vslerpconst;
|
||
|
cp.v.sub = cp.vsub;
|
||
|
cp.v.toangle = cp.vtoangle;
|
||
|
cp.v.unrotate = cp.vunrotate;
|
||
|
cp.v.str = function(v){
|
||
|
return "(" + v.x.toFixed(3) + ", " + v.y.toFixed(3) + ")";
|
||
|
}
|
||
|
|
||
|
// XXX: renaming functions should be supported in JSB
|
||
|
cp.clamp01 = cp.fclamp01;
|
||
|
|
||
|
|
||
|
/// Initialize an offset box shaped polygon shape.
|
||
|
cp.BoxShape2 = function(body, box)
|
||
|
{
|
||
|
var verts = [
|
||
|
box.l, box.b,
|
||
|
box.l, box.t,
|
||
|
box.r, box.t,
|
||
|
box.r, box.b
|
||
|
];
|
||
|
|
||
|
return new cp.PolyShape(body, verts, cp.vzero);
|
||
|
};
|
||
|
|
||
|
/// Initialize a box shaped polygon shape.
|
||
|
cp.BoxShape = function(body, width, height)
|
||
|
{
|
||
|
var hw = width/2;
|
||
|
var hh = height/2;
|
||
|
|
||
|
return cp.BoxShape2(body, new cp.BB(-hw, -hh, hw, hh));
|
||
|
};
|
||
|
|
||
|
|
||
|
/// Initialize an static body
|
||
|
cp.StaticBody = function()
|
||
|
{
|
||
|
return new cp.Body(Infinity, Infinity);
|
||
|
};
|
||
|
|
||
|
|
||
|
// "Bounding Box" compatibility with Chipmunk-JS
|
||
|
cp.BB = function(l, b, r, t)
|
||
|
{
|
||
|
this.l = l;
|
||
|
this.b = b;
|
||
|
this.r = r;
|
||
|
this.t = t;
|
||
|
};
|
||
|
|
||
|
// helper function to create a BB
|
||
|
cp.bb = function(l, b, r, t) {
|
||
|
return new cp.BB(l, b, r, t);
|
||
|
};
|
||
|
|
||
|
//
|
||
|
// Some properties
|
||
|
//
|
||
|
var _proto = cp.Base.prototype;
|
||
|
// "handle" needed in some cases
|
||
|
cc.defineGetterSetter(_proto, "handle", _proto.getHandle);
|
||
|
|
||
|
// Properties, for Chipmunk-JS compatibility
|
||
|
// Space properties
|
||
|
Object.defineProperties(cp.Space.prototype,
|
||
|
{
|
||
|
"gravity" : {
|
||
|
get : function(){
|
||
|
return this.getGravity();
|
||
|
},
|
||
|
set : function(newValue){
|
||
|
this.setGravity(newValue);
|
||
|
},
|
||
|
enumerable : true,
|
||
|
configurable : true
|
||
|
},
|
||
|
"iterations" : {
|
||
|
get : function(){
|
||
|
return this.getIterations();
|
||
|
},
|
||
|
set : function(newValue){
|
||
|
this.setIterations(newValue);
|
||
|
},
|
||
|
enumerable : true,
|
||
|
configurable : true
|
||
|
},
|
||
|
"damping" : {
|
||
|
get : function(){
|
||
|
return this.getDamping();
|
||
|
},
|
||
|
set : function(newValue){
|
||
|
this.setDamping(newValue);
|
||
|
},
|
||
|
enumerable : true,
|
||
|
configurable : true
|
||
|
},
|
||
|
"staticBody" : {
|
||
|
get : function(){
|
||
|
return this.getStaticBody();
|
||
|
},
|
||
|
enumerable : true,
|
||
|
configurable : true
|
||
|
},
|
||
|
"idleSpeedThreshold" : {
|
||
|
get : function(){
|
||
|
return this.getIdleSpeedThreshold();
|
||
|
},
|
||
|
set : function(newValue){
|
||
|
this.setIdleSpeedThreshold(newValue);
|
||
|
},
|
||
|
enumerable : true,
|
||
|
configurable : true
|
||
|
},
|
||
|
"sleepTimeThreshold": {
|
||
|
get : function(){
|
||
|
return this.getSleepTimeThreshold();
|
||
|
},
|
||
|
set : function(newValue){
|
||
|
this.setSleepTimeThreshold(newValue);
|
||
|
},
|
||
|
enumerable : true,
|
||
|
configurable : true
|
||
|
},
|
||
|
"collisionSlop": {
|
||
|
get : function(){
|
||
|
return this.getCollisionSlop();
|
||
|
},
|
||
|
set : function(newValue){
|
||
|
this.setCollisionSlop(newValue);
|
||
|
},
|
||
|
enumerable : true,
|
||
|
configurable : true
|
||
|
},
|
||
|
"collisionBias": {
|
||
|
get : function(){
|
||
|
return this.getCollisionBias();
|
||
|
},
|
||
|
set : function(newValue){
|
||
|
this.setCollisionBias(newValue);
|
||
|
},
|
||
|
enumerable : true,
|
||
|
configurable : true
|
||
|
},
|
||
|
"collisionPersistence": {
|
||
|
get : function(){
|
||
|
return this.getCollisionPersistence();
|
||
|
},
|
||
|
set : function(newValue){
|
||
|
this.setCollisionPersistence(newValue);
|
||
|
},
|
||
|
enumerable : true,
|
||
|
configurable : true
|
||
|
},
|
||
|
"enableContactGraph": {
|
||
|
get : function(){
|
||
|
return this.getEnableContactGraph();
|
||
|
},
|
||
|
set : function(newValue){
|
||
|
this.setEnableContactGraph(newValue);
|
||
|
},
|
||
|
enumerable : true,
|
||
|
configurable : true
|
||
|
}
|
||
|
});
|
||
|
|
||
|
// Body properties
|
||
|
_proto = cp.Body.prototype;
|
||
|
cc.defineGetterSetter(_proto, "a", _proto.getAngle, _proto.setAngle);
|
||
|
cc.defineGetterSetter(_proto, "w", _proto.getAngVel, _proto.setAngVel);
|
||
|
cc.defineGetterSetter(_proto, "p", _proto.getPos, _proto.setPos);
|
||
|
cc.defineGetterSetter(_proto, "v", _proto.getVel, _proto.setVel);
|
||
|
cc.defineGetterSetter(_proto, "f", _proto.getForce, _proto.setForce);
|
||
|
cc.defineGetterSetter(_proto, "t", _proto.getTorque, _proto.setTorque);
|
||
|
cc.defineGetterSetter(_proto, "v_limit", _proto.getVelLimit, _proto.setVelLimit);
|
||
|
cc.defineGetterSetter(_proto, "w_limit", _proto.getAngVelLimit, _proto.setAngVelLimit);
|
||
|
cc.defineGetterSetter(_proto, "space", _proto.getSpace);
|
||
|
cc.defineGetterSetter(_proto, "rot", _proto.getRot);
|
||
|
cc.defineGetterSetter(_proto, "m", _proto.getMass, _proto.setMass);
|
||
|
cc.defineGetterSetter(_proto, "i", _proto.getMoment, _proto.setMoment);
|
||
|
|
||
|
// Shape properties
|
||
|
_proto = cp.Shape.prototype;
|
||
|
cc.defineGetterSetter(_proto, "body", _proto.getBody, _proto.setBody);
|
||
|
cc.defineGetterSetter(_proto, "group", _proto.getGroup, _proto.setGroup);
|
||
|
cc.defineGetterSetter(_proto, "collision_type", _proto.getCollisionType, _proto.setCollisionType);
|
||
|
cc.defineGetterSetter(_proto, "layers", _proto.getLayers, _proto.setLayers);
|
||
|
cc.defineGetterSetter(_proto, "sensor", _proto.getSensor, _proto.setSensor);
|
||
|
cc.defineGetterSetter(_proto, "space", _proto.getSpace);
|
||
|
cc.defineGetterSetter(_proto, "surface_v", _proto.getSurfaceVelocity, _proto.setSurfaceVelocity);
|
||
|
cc.defineGetterSetter(_proto, "e", _proto.getElasticity, _proto.setElasticity);
|
||
|
cc.defineGetterSetter(_proto, "u", _proto.getFriction, _proto.setFriction);
|
||
|
_proto.cacheData = _proto.update;
|
||
|
|
||
|
//CircleShape properties
|
||
|
_proto = cp.CircleShape.prototype;
|
||
|
_proto.type = "circle";
|
||
|
cc.defineGetterSetter(_proto, "r", _proto.getRadius);
|
||
|
cc.defineGetterSetter(_proto, "c", _proto.getOffset);
|
||
|
|
||
|
//SegmentShape properties
|
||
|
_proto = cp.SegmentShape.prototype;
|
||
|
_proto.type = "segment";
|
||
|
cc.defineGetterSetter(_proto, "a", _proto.getA);
|
||
|
cc.defineGetterSetter(_proto, "b", _proto.getB);
|
||
|
cc.defineGetterSetter(_proto, "n", _proto.getNormal);
|
||
|
cc.defineGetterSetter(_proto, "r", _proto.getRadius);
|
||
|
|
||
|
//PolyShape properties
|
||
|
_proto = cp.PolyShape.prototype;
|
||
|
_proto.type = "poly";
|
||
|
|
||
|
// Constraint properties
|
||
|
_proto = cp.Constraint.prototype;
|
||
|
cc.defineGetterSetter(_proto, "a", _proto.getA);
|
||
|
cc.defineGetterSetter(_proto, "b", _proto.getB);
|
||
|
cc.defineGetterSetter(_proto, "space", _proto.getSpace);
|
||
|
cc.defineGetterSetter(_proto, "maxForce", _proto.getMaxForce, _proto.setMaxForce);
|
||
|
cc.defineGetterSetter(_proto, "errorBias", _proto.getErrorBias, _proto.setErrorBias);
|
||
|
cc.defineGetterSetter(_proto, "maxBias", _proto.getMaxBias, _proto.setMaxBias);
|
||
|
|
||
|
// PinJoint properties
|
||
|
_proto = cp.PinJoint.prototype;
|
||
|
cc.defineGetterSetter(_proto, "anchr1", _proto.getAnchr1, _proto.setAnchr1);
|
||
|
cc.defineGetterSetter(_proto, "anchr2", _proto.getAnchr2, _proto.setAnchr2);
|
||
|
cc.defineGetterSetter(_proto, "dist", _proto.getDist, _proto.setDist);
|
||
|
|
||
|
//SlideJoint properties
|
||
|
_proto = cp.SlideJoint.prototype;
|
||
|
cc.defineGetterSetter(_proto, "anchr1", _proto.getAnchr1, _proto.setAnchr1);
|
||
|
cc.defineGetterSetter(_proto, "anchr2", _proto.getAnchr2, _proto.setAnchr2);
|
||
|
cc.defineGetterSetter(_proto, "min", _proto.getMin, _proto.setMin);
|
||
|
cc.defineGetterSetter(_proto, "max", _proto.getMax, _proto.setMax);
|
||
|
|
||
|
//PivotJoint properties
|
||
|
_proto = cp.PivotJoint.prototype;
|
||
|
cc.defineGetterSetter(_proto, "anchr1", _proto.getAnchr1, _proto.setAnchr1);
|
||
|
cc.defineGetterSetter(_proto, "anchr2", _proto.getAnchr2, _proto.setAnchr2);
|
||
|
|
||
|
//GrooveJoint properties
|
||
|
_proto = cp.GrooveJoint.prototype;
|
||
|
cc.defineGetterSetter(_proto, "anchr2", _proto.getAnchr2, _proto.setAnchr2);
|
||
|
cc.defineGetterSetter(_proto, "grv_a", _proto.getGrooveA, _proto.setGrooveA);
|
||
|
cc.defineGetterSetter(_proto, "grv_b", _proto.getGrooveB, _proto.setGrooveB);
|
||
|
|
||
|
//DampedSpring properties
|
||
|
_proto = cp.DampedSpring.prototype;
|
||
|
cc.defineGetterSetter(_proto, "anchr1", _proto.getAnchr1, _proto.setAnchr1);
|
||
|
cc.defineGetterSetter(_proto, "anchr2", _proto.getAnchr2, _proto.setAnchr2);
|
||
|
cc.defineGetterSetter(_proto, "damping", _proto.getDamping, _proto.setDamping);
|
||
|
cc.defineGetterSetter(_proto, "restLength", _proto.getRestLength, _proto.setRestLength);
|
||
|
cc.defineGetterSetter(_proto, "stiffness", _proto.getStiffness, _proto.setStiffness);
|
||
|
|
||
|
//DampedRotarySpring properties
|
||
|
_proto = cp.DampedRotarySpring.prototype;
|
||
|
cc.defineGetterSetter(_proto, "restAngle", _proto.getRestAngle, _proto.setRestAngle);
|
||
|
cc.defineGetterSetter(_proto, "stiffness", _proto.getStiffness, _proto.setStiffness);
|
||
|
cc.defineGetterSetter(_proto, "damping", _proto.getDamping, _proto.setDamping);
|
||
|
|
||
|
//RotaryLimitJoint properties
|
||
|
_proto = cp.RotaryLimitJoint.prototype;
|
||
|
cc.defineGetterSetter(_proto, "min", _proto.getMin, _proto.setMin);
|
||
|
cc.defineGetterSetter(_proto, "max", _proto.getMax, _proto.setMax);
|
||
|
|
||
|
//RatchetJoint properties
|
||
|
_proto = cp.RatchetJoint.prototype;
|
||
|
cc.defineGetterSetter(_proto, "angle", _proto.getAngle, _proto.setAngle);
|
||
|
cc.defineGetterSetter(_proto, "phase", _proto.getPhase, _proto.setPhase);
|
||
|
cc.defineGetterSetter(_proto, "ratchet", _proto.getRatchet, _proto.setRatchet);
|
||
|
|
||
|
//GearJoint properties
|
||
|
_proto = cp.GearJoint.prototype;
|
||
|
cc.defineGetterSetter(_proto, "phase", _proto.getPhase, _proto.setPhase);
|
||
|
cc.defineGetterSetter(_proto, "ratio", _proto.getRatio, _proto.setRatio);
|
||
|
|
||
|
//SimpleMotor properties
|
||
|
_proto = cp.SimpleMotor.prototype;
|
||
|
cc.defineGetterSetter(_proto, "rate", _proto.getRate, _proto.setRate);
|
||
|
|
||
|
//Arbiter properties
|
||
|
_proto = cp.Arbiter.prototype;
|
||
|
cc.defineGetterSetter(_proto, "e", _proto.getElasticity, _proto.setElasticity);
|
||
|
cc.defineGetterSetter(_proto, "u", _proto.getFriction, _proto.setFriction);
|
||
|
cc.defineGetterSetter(_proto, "surface_vr", _proto.getSurfaceVelocity, _proto.setSurfaceVelocity);
|
||
|
|
||
|
_proto = null;
|