55 typedef struct cpSpatialIndex cpSpatialIndex;
58 struct cpSpatialIndex {
63 cpSpatialIndex *staticIndex, *dynamicIndex;
69 typedef struct cpSpaceHash cpSpaceHash;
86 typedef struct cpBBTree cpBBTree;
106 typedef struct cpSweep1D cpSweep1D;
117 typedef void (*cpSpatialIndexDestroyImpl)(cpSpatialIndex *index);
119 typedef int (*cpSpatialIndexCountImpl)(cpSpatialIndex *index);
122 typedef cpBool (*cpSpatialIndexContainsImpl)(cpSpatialIndex *index,
void *obj,
cpHashValue hashid);
123 typedef void (*cpSpatialIndexInsertImpl)(cpSpatialIndex *index,
void *obj,
cpHashValue hashid);
124 typedef void (*cpSpatialIndexRemoveImpl)(cpSpatialIndex *index,
void *obj,
cpHashValue hashid);
126 typedef void (*cpSpatialIndexReindexImpl)(cpSpatialIndex *index);
127 typedef void (*cpSpatialIndexReindexObjectImpl)(cpSpatialIndex *index,
void *obj,
cpHashValue hashid);
128 typedef void (*cpSpatialIndexReindexQueryImpl)(cpSpatialIndex *index,
cpSpatialIndexQueryFunc func,
void *data);
134 cpSpatialIndexDestroyImpl destroy;
136 cpSpatialIndexCountImpl count;
137 cpSpatialIndexEachImpl each;
139 cpSpatialIndexContainsImpl contains;
140 cpSpatialIndexInsertImpl insert;
141 cpSpatialIndexRemoveImpl
remove;
143 cpSpatialIndexReindexImpl reindex;
144 cpSpatialIndexReindexObjectImpl reindexObject;
145 cpSpatialIndexReindexQueryImpl reindexQuery;
147 cpSpatialIndexQueryImpl query;
148 cpSpatialIndexSegmentQueryImpl segmentQuery;
159 if(index->klass) index->klass->destroy(index);
165 return index->klass->count(index);
171 index->klass->each(index, func, data);
178 return index->klass->contains(index, obj, hashid);
185 index->klass->insert(index, obj, hashid);
192 index->klass->remove(index, obj, hashid);
198 index->klass->reindex(index);
204 index->klass->reindexObject(index, obj, hashid);
210 index->klass->query(index, obj, bb, func, data);
216 index->klass->segmentQuery(index, obj, a, b, t_exit, func, data);
224 index->klass->reindexQuery(index, func, data);
cpSpatialIndex * cpBBTreeInit(cpBBTree *tree, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex)
Initialize a bounding box tree.
cpSpaceHash * cpSpaceHashAlloc(void)
Allocate a spatial hash.
static void cpSpatialIndexReindexQuery(cpSpatialIndex *index, cpSpatialIndexQueryFunc func, void *data)
Simultaneously reindex and find all colliding objects.
Definition: cpSpatialIndex.h:222
cpSpatialIndex * cpSweep1DInit(cpSweep1D *sweep, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex)
Initialize a 1D sort and sweep broadphase.
cpVect(* cpBBTreeVelocityFunc)(void *obj)
Bounding box tree velocity callback function.
Definition: cpSpatialIndex.h:100
static int cpSpatialIndexCount(cpSpatialIndex *index)
Get the number of objects in the spatial index.
Definition: cpSpatialIndex.h:163
void cpSpatialIndexCollideStatic(cpSpatialIndex *dynamicIndex, cpSpatialIndex *staticIndex, cpSpatialIndexQueryFunc func, void *data)
Collide the objects in dynamicIndex against the objects in staticIndex using the query callback funct...
unsigned char cpBool
Chipmunk's boolean type.
Definition: chipmunk_types.h:199
static void cpSpatialIndexDestroy(cpSpatialIndex *index)
Destroy a spatial index.
Definition: cpSpatialIndex.h:157
static void cpSpatialIndexSegmentQuery(cpSpatialIndex *index, void *obj, cpVect a, cpVect b, cpFloat t_exit, cpSpatialIndexSegmentQueryFunc func, void *data)
Perform a segment query against the spatial index, calling func for each potential match...
Definition: cpSpatialIndex.h:214
cpSpatialIndex * cpSweep1DNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex)
Allocate and initialize a 1D sort and sweep broadphase.
static void cpSpatialIndexReindexObject(cpSpatialIndex *index, void *obj, cpHashValue hashid)
Reindex a single object in the spatial index.
Definition: cpSpatialIndex.h:202
cpSpatialIndex * cpBBTreeNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex)
Allocate and initialize a bounding box tree.
void cpBBTreeSetVelocityFunc(cpSpatialIndex *index, cpBBTreeVelocityFunc func)
Set the velocity function for the bounding box tree to enable temporal coherence. ...
struct cpBB cpBB
Chipmunk's axis-aligned 2D bounding box type. (left, bottom, right, top)
cpBB(* cpSpatialIndexBBFunc)(void *obj)
Spatial index bounding box callback function type.
Definition: cpSpatialIndex.h:45
double cpFloat
Chipmunk's floating point type.
Definition: chipmunk_types.h:83
void cpSpaceHashResize(cpSpaceHash *hash, cpFloat celldim, int numcells)
Change the cell dimensions and table size of the spatial hash to tune it.
cpSweep1D * cpSweep1DAlloc(void)
Allocate a 1D sort and sweep broadphase.
static void cpSpatialIndexInsert(cpSpatialIndex *index, void *obj, cpHashValue hashid)
Add an object to a spatial index.
Definition: cpSpatialIndex.h:183
void(* cpSpatialIndexIteratorFunc)(void *obj, void *data)
Spatial index/object iterator callback function type.
Definition: cpSpatialIndex.h:47
Definition: chipmunk_types.h:271
uint32_t cpCollisionID
Type used internally to cache colliding object info for cpCollideShapes().
Definition: chipmunk_types.h:192
static cpBool cpSpatialIndexContains(cpSpatialIndex *index, void *obj, cpHashValue hashid)
Returns true if the spatial index contains the given object.
Definition: cpSpatialIndex.h:176
cpBBTree * cpBBTreeAlloc(void)
Allocate a bounding box tree.
void cpSpatialIndexFree(cpSpatialIndex *index)
Destroy and free a spatial index.
void cpBBTreeOptimize(cpSpatialIndex *index)
Perform a static top down optimization of the tree.
cpSpatialIndex * cpSpaceHashNew(cpFloat celldim, int cells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex)
Allocate and initialize a spatial hash.
static void cpSpatialIndexRemove(cpSpatialIndex *index, void *obj, cpHashValue hashid)
Remove an object from a spatial index.
Definition: cpSpatialIndex.h:190
Chipmunk's axis-aligned 2D bounding box type. (left, bottom, right, top)
Definition: cpBB.h:33
static void cpSpatialIndexReindex(cpSpatialIndex *index)
Perform a full reindex of a spatial index.
Definition: cpSpatialIndex.h:196
uintptr_t cpHashValue
Hash value type.
Definition: chipmunk_types.h:187
cpFloat(* cpSpatialIndexSegmentQueryFunc)(void *obj1, void *obj2, void *data)
Spatial segment query callback function type.
Definition: cpSpatialIndex.h:51
static void cpSpatialIndexEach(cpSpatialIndex *index, cpSpatialIndexIteratorFunc func, void *data)
Iterate the objects in the spatial index. func will be called once for each object.
Definition: cpSpatialIndex.h:169
static void cpSpatialIndexQuery(cpSpatialIndex *index, void *obj, cpBB bb, cpSpatialIndexQueryFunc func, void *data)
Perform a rectangle query against the spatial index, calling func for each potential match...
Definition: cpSpatialIndex.h:208
cpSpatialIndex * cpSpaceHashInit(cpSpaceHash *hash, cpFloat celldim, int numcells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex)
Initialize a spatial hash.
Definition: cpSpatialIndex.h:133
cpCollisionID(* cpSpatialIndexQueryFunc)(void *obj1, void *obj2, cpCollisionID id, void *data)
Spatial query callback function type.
Definition: cpSpatialIndex.h:49