public CCPhysicsWorld(CCScene scene) { _gravity = new CCPoint(0.0f, -98.0f); _speed = 1.0f; _updateRate = 1; _updateRateCount = 0; _updateTime = 0.0f; _info = null; _scene = null; _delayDirty = false; _info = new CCPhysicsWorldInfo(); _scene = scene; _info.SetGravity(PhysicsHelper.CCPointToCpVect(_gravity)); var spc = _info.getSpace(); spc.defaultHandler = new cpCollisionHandler() { beginFunc = (a, s, o) => CCPhysicsWorldCallback.CollisionBeginCallbackFunc(a as cpArbiter, s, this), preSolveFunc = (a, s, o) => CCPhysicsWorldCallback.CollisionPreSolveCallbackFunc(a as cpArbiter, s, this), postSolveFunc = (a, s, o) => CCPhysicsWorldCallback.CollisionPostSolveCallbackFunc(a as cpArbiter, s, this), separateFunc = (a, s, o) => CCPhysicsWorldCallback.CollisionSeparateCallbackFunc(a as cpArbiter, s, this) }; }
public CCPhysicsWorld(CCScene scene) { DelayAddBodies = new List <CCPhysicsBody>(); DelayRemoveBodies = new List <CCPhysicsBody>(); DelayAddJoints = new List <CCPhysicsJoint>(); DelayRemoveJoints = new List <CCPhysicsJoint>(); Bodies = new List <CCPhysicsBody>(); Joints = new List <CCPhysicsJoint>(); _gravity = new CCPoint(0.0f, -98.0f); _speed = 1.0f; _updateRate = 1; _updateRateCount = 0; _updateTime = 0.0f; Info = null; Scene = null; DelayDirty = false; Info = new CCPhysicsWorldInfo(); Scene = scene; Info.Gravity = PhysicsHelper.CCPointToCpVect(_gravity); var spc = Info.Space; spc.defaultHandler = new cpCollisionHandler() { beginFunc = (a, s, o) => CCPhysicsWorldCallback.CollisionBeginCallbackFunc(a as cpArbiter, s, this), preSolveFunc = (a, s, o) => CCPhysicsWorldCallback.CollisionPreSolveCallbackFunc(a as cpArbiter, s, this), postSolveFunc = (a, s, o) => CCPhysicsWorldCallback.CollisionPostSolveCallbackFunc(a as cpArbiter, s, this), separateFunc = (a, s, o) => CCPhysicsWorldCallback.CollisionSeparateCallbackFunc(a as cpArbiter, s, this) }; }
/** Get phsyics shapes that contains the point. */ public List <CCPhysicsShape> GetShapes(CCPoint point) { List <CCPhysicsShape> arr = new List <CCPhysicsShape>(); this._info.getSpace().PointQuery( PhysicsHelper.CCPointToCpVect(point), 0, new cpShapeFilter(cp.NO_GROUP, cp.ALL_LAYERS, cp.ALL_LAYERS), (s, v1, f, v2, o) => CCPhysicsWorldCallback.GetShapesAtPointFunc(s, f, PhysicsHelper.cpVectToCCPoint(v1), ref arr), null ); return(arr); }
/** Searches for physics shapes that intersects the ray. */ public void RayCast(Func <CCPhysicsWorld, CCPhysicsRayCastInfo, object, bool> func, CCPoint point1, CCPoint point2, object data) { cp.AssertWarn(func != null, "func shouldn't be nullptr"); if (func != null) { CCRayCastCallbackInfo info = new CCRayCastCallbackInfo(this, func, point1, point2, data); //Action<cpShape, cpVect, cpVect, float, object> func CCPhysicsWorldCallback.continues = true; this._info.getSpace().SegmentQuery( PhysicsHelper.CCPointToCpVect(point1), PhysicsHelper.CCPointToCpVect(point2), 1f, new cpShapeFilter(cp.NO_GROUP, cp.ALL_LAYERS, cp.ALL_LAYERS), (shape, v1, v2, f, o) => CCPhysicsWorldCallback.RayCastCallbackFunc(shape, f, PhysicsHelper.cpVectToCCPoint(v1), ref info), data ); } }
/** Searches for physics shapes that contains the point. */ public void QueryPoint(Func <CCPhysicsWorld, CCPhysicsShape, object, bool> func, CCPoint point, object data) { cp.AssertWarn(func != null, "func shouldn't be nullptr"); if (func != null) { //CCPointQueryCallbackInfo info = new CCPointQueryCallbackInfo(this, func, data); CCPointQueryCallbackInfo info = new CCPointQueryCallbackInfo(this, func, data); CCPhysicsWorldCallback.continues = true; this._info.getSpace().PointQuery( PhysicsHelper.CCPointToCpVect(point), 0f, new cpShapeFilter(cp.NO_GROUP, cp.ALL_LAYERS, cp.ALL_LAYERS), (s, v, f1, f2, o) => CCPhysicsWorldCallback.QueryPointFunc(s, 0f, point, ref info), data ); } }
/** Searches for physics shapes that contains in the rect. */ public void QueryRect(Func <CCPhysicsWorld, CCPhysicsShape, object, bool> func, CCRect rect, object data) { cp.AssertWarn(func != null, "func shouldn't be nullptr"); if (func != null) { CCRectQueryCallbackInfo info = new CCRectQueryCallbackInfo() { world = this, func = func, data = data }; CCPhysicsWorldCallback.continues = true; this._info.getSpace().BBQuery( PhysicsHelper.rect2cpbb(rect), new cpShapeFilter(cp.NO_GROUP, cp.ALL_LAYERS, cp.ALL_LAYERS), (s, o) => CCPhysicsWorldCallback.QueryRectCallbackFunc(s, info), data ); } }