diff trunk/chipmunkd/cpSpaceStep.d @ 29:80058cee1a77

updated to chipmunk 5.3.4
author Extrawurst
date Thu, 16 Dec 2010 00:33:06 +0100
parents 4ceef5833c8c
children
line wrap: on
line diff
--- a/trunk/chipmunkd/cpSpaceStep.d	Mon Dec 13 21:40:56 2010 +0100
+++ b/trunk/chipmunkd/cpSpaceStep.d	Thu Dec 16 00:33:06 2010 +0100
@@ -19,21 +19,21 @@
 //
 //#pragma mark Post Step Callback Functions
 
-struct postStepCallback {
+struct PostStepCallback {
 	cpPostStepFunc func;
 	void *obj;
 	void *data;
 }
 
 static cpBool
-postStepFuncSetEql(postStepCallback *a, postStepCallback *b){
+postStepFuncSetEql(PostStepCallback *a, PostStepCallback *b){
 	return a.obj == b.obj;
 }
 
 static void *
-postStepFuncSetTrans(postStepCallback *callback, void *ignored)
+postStepFuncSetTrans(PostStepCallback *callback, void *ignored)
 {
-	postStepCallback *value = cast(postStepCallback *)cpmalloc(postStepCallback.sizeof);
+	PostStepCallback *value = cast(PostStepCallback *)cpmalloc(PostStepCallback.sizeof);
 	(*value) = (*callback);
 	
 	return value;
@@ -46,10 +46,22 @@
 		space.postStepCallbacks = cpHashSetNew(0, cast(cpHashSetEqlFunc)&postStepFuncSetEql, cast(cpHashSetTransFunc)&postStepFuncSetTrans);
 	}
 	
-	postStepCallback callback = {func, obj, data};
+	PostStepCallback callback = {func, obj, data};
 	cpHashSetInsert(space.postStepCallbacks, cast(cpHashValue)cast(size_t)obj, &callback, null);
 }
 
+void *
+cpSpaceGetPostStepData(cpSpace *space, void *obj)
+{
+	if(space.postStepCallbacks){
+		PostStepCallback query = {null, obj, null};
+		PostStepCallback *callback = cast(PostStepCallback *)cpHashSetFind(space.postStepCallbacks, cast(cpHashValue)cast(size_t)obj, &query);
+		return (callback ? callback.data : null);
+	} else {
+		return null;
+	}
+}
+
 //#pragma mark Contact Buffer Functions
 
 enum CP_CONTACTS_BUFFER_SIZE = ((CP_BUFFER_BYTES - cpContactBufferHeader.sizeof)/cpContact.sizeof);
@@ -253,7 +265,7 @@
 
 // Hashset filter func to call and throw away post step callbacks.
 static void
-postStepCallbackSetIter(postStepCallback *callback, cpSpace *space)
+postStepCallbackSetIter(PostStepCallback *callback, cpSpace *space)
 {
 	callback.func(space, callback.obj, callback.data);
 	cpfree(callback);
@@ -269,7 +281,6 @@
 cpSpaceStep(cpSpace *space, cpFloat dt)
 {
 	if(!dt) return; // don't step if the timestep is 0!
-	
 	cpFloat dt_inv = 1.0f/dt;
 
 	cpArray *bodies = space.bodies;
@@ -287,7 +298,7 @@
 	// Pre-cache BBoxes and shape data.
 	cpSpaceHashEach(space.activeShapes, cast(cpSpaceHashIterator)&updateBBCache, null);
 	
-	space.locked = cpTrue;
+	cpSpaceLock(space);
 	
 	// Collide!
 	cpSpacePushFreshContactBuffer(space);
@@ -295,7 +306,7 @@
 		cpSpaceHashEach(space.activeShapes, cast(cpSpaceHashIterator)&active2staticIter, space);
 	cpSpaceHashQueryRehash(space.activeShapes, cast(cpSpaceHashQueryFunc)&queryFunc, space);
 	
-	space.locked = cpFalse;
+	cpSpaceUnlock(space);
 	
 	// If body sleeping is enabled, do that now.
 	if(space.sleepTimeThreshold != INFINITY){
@@ -351,7 +362,7 @@
 		}
 	}
 	
-	space.locked = cpTrue;
+	cpSpaceLock(space);
 	
 	// run the post solve callbacks
 	for(int i=0; i<arbiters.num; i++){
@@ -363,7 +374,7 @@
 		arb.state = cpArbiterState.cpArbiterStateNormal;
 	}
 	
-	space.locked = cpFalse;
+	cpSpaceUnlock(space);
 	
 	// Run the post step callbacks
 	// Loop because post step callbacks may create more post step callbacks