00001
00007 struct cpSpace;
00008
00009 @interface ChipmunkSpace : NSObject {
00010 @protected
00011 struct cpSpace *_space;
00012 ChipmunkBody *_staticBody;
00013
00014 NSMutableSet *_children;
00015 NSMutableArray *_handlers;
00016
00017 id _data;
00018 }
00019
00024 @property(nonatomic, assign) int iterations;
00025
00027 @property(nonatomic, assign) cpVect gravity;
00028
00034 @property(nonatomic, assign) cpFloat damping;
00035
00037 @property(nonatomic, assign) cpFloat idleSpeedThreshold;
00038
00043 @property(nonatomic, assign) cpFloat sleepTimeThreshold;
00044
00051 @property(nonatomic, assign) cpFloat collisionSlop;
00052
00058 @property(nonatomic, assign) cpFloat collisionBias;
00059
00064 @property(nonatomic, assign) cpTimestamp collisionPersistence;
00065
00070 @property(nonatomic, assign) bool enableContactGraph
00071 __attribute__((__deprecated__));
00072
00074 @property(nonatomic, readonly) cpSpace *space;
00075
00080 @property(nonatomic, readonly) ChipmunkBody *staticBody;
00081
00085 @property(nonatomic, readonly) cpFloat currentTimeStep;
00086
00091 @property(nonatomic, assign) id data;
00092
00095 +(ChipmunkSpace *)spaceFromCPSpace:(cpSpace *)space;
00096
00109 - (void)setDefaultCollisionHandler:(id)delegate
00110 begin:(SEL)begin
00111 preSolve:(SEL)preSolve
00112 postSolve:(SEL)postSolve
00113 separate:(SEL)separate;
00114
00130 - (void)addCollisionHandler:(id)delegate
00131 typeA:(cpCollisionType)a typeB:(cpCollisionType)b
00132 begin:(SEL)begin
00133 preSolve:(SEL)preSolve
00134 postSolve:(SEL)postSolve
00135 separate:(SEL)separate;
00136
00137
00139 - (void)removeCollisionHandlerForTypeA:(cpCollisionType)a andB:(cpCollisionType)b;
00140
00147 -(id)add:(NSObject<ChipmunkObject> *)obj;
00148
00155 -(id)remove:(NSObject<ChipmunkObject> *)obj;
00156
00158 -(BOOL)contains:(NSObject<ChipmunkObject> *)obj;
00159
00161 - (id)smartAdd:(NSObject<ChipmunkObject> *)obj;
00162
00164 - (id)smartRemove:(NSObject<ChipmunkObject> *)obj;
00165
00166
00187 - (BOOL)addPostStepCallback:(id)target selector:(SEL)selector key:(id)key;
00188
00190 typedef void (^ChipmunkPostStepBlock)(void);
00191
00193 - (BOOL)addPostStepBlock:(ChipmunkPostStepBlock)block key:(id)key;
00194
00196 - (void)addPostStepAddition:(NSObject<ChipmunkObject> *)obj;
00197
00199 - (void)addPostStepRemoval:(NSObject<ChipmunkObject> *)obj;
00200
00203 - (NSArray *)nearestPointQueryAll:(cpVect)point maxDistance:(cpFloat)maxDistance layers:(cpLayers)layers group:(cpGroup)group;
00204
00207 - (ChipmunkNearestPointQueryInfo *)nearestPointQueryNearest:(cpVect)point maxDistance:(cpFloat)maxDistance layers:(cpLayers)layers group:(cpGroup)group;
00208
00211 - (NSArray *)pointQueryAll:(cpVect)point layers:(cpLayers)layers group:(cpGroup)group __attribute__((__deprecated__));
00212
00215 - (ChipmunkShape *)pointQueryFirst:(cpVect)point layers:(cpLayers)layers group:(cpGroup)group __attribute__((__deprecated__));
00216
00218 - (NSArray *)segmentQueryAllFrom:(cpVect)start to:(cpVect)end layers:(cpLayers)layers group:(cpGroup)group;
00219
00221 - (ChipmunkSegmentQueryInfo *)segmentQueryFirstFrom:(cpVect)start to:(cpVect)end layers:(cpLayers)layers group:(cpGroup)group;
00222
00224 - (NSArray *)bbQueryAll:(cpBB)bb layers:(cpLayers)layers group:(cpGroup)group;
00225
00227 - (NSArray *)shapeQueryAll:(ChipmunkShape *)shape;
00228
00230 - (BOOL)shapeTest:(ChipmunkShape *)shape;
00231
00233 - (void)activateShapesTouchingShape:(ChipmunkShape *)shape;
00234
00236 - (NSArray *)bodies;
00237
00239 - (NSArray *)shapes;
00240
00242 - (NSArray *)constraints;
00243
00245 - (void)reindexStatic;
00246
00249 - (void)reindexShape:(ChipmunkShape *)shape;
00250
00252 - (void)reindexShapesForBody:(ChipmunkBody *)body;
00253
00255 - (void)step:(cpFloat)dt;
00256
00257 @end
00258
00259
00260
00272 #define CHIPMUNK_ARBITER_GET_SHAPES(arb, a, b) ChipmunkShape *a, *b; { \
00273 cpShape *shapeA, *shapeB; \
00274 cpArbiterGetShapes(arb, &shapeA, &shapeB); \
00275 a = shapeA->data; b = shapeB->data; \
00276 }
00277
00278 #define CHIPMUNK_ARBITER_GET_BODIES(arb, a, b) ChipmunkBody *a, *b; { \
00279 cpBody *bodyA, *bodyB; \
00280 cpArbiterGetBodies(arb, &bodyA, &bodyB); \
00281 a = bodyA->data; b = bodyB->data; \
00282 }
00283
00284