c540cd69d6e255be14598cf01ef906d3fb6e0eba
[blender-staging.git] / extern / ode / dist / include / ode / space.h
1 /*************************************************************************
2  *                                                                       *
3  * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith.       *
4  * All rights reserved.  Email: russ@q12.org   Web: www.q12.org          *
5  *                                                                       *
6  * This library is free software; you can redistribute it and/or         *
7  * modify it under the terms of EITHER:                                  *
8  *   (1) The GNU Lesser General Public License as published by the Free  *
9  *       Software Foundation; either version 2.1 of the License, or (at  *
10  *       your option) any later version. The text of the GNU Lesser      *
11  *       General Public License is included with this library in the     *
12  *       file LICENSE.TXT.                                               *
13  *   (2) The BSD-style license that is included with this library in     *
14  *       the file LICENSE-BSD.TXT.                                       *
15  *                                                                       *
16  * This library is distributed in the hope that it will be useful,       *
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of        *
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files    *
19  * LICENSE.TXT and LICENSE-BSD.TXT for more details.                     *
20  *                                                                       *
21  *************************************************************************/
22
23 #ifndef _ODE_SPACE_H_
24 #define _ODE_SPACE_H_
25
26 #include <ode/common.h>
27
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31
32 struct dContactGeom;
33
34 typedef void dNearCallback (void *data, dGeomID o1, dGeomID o2);
35
36
37 /* extra information the space needs in every geometry object */
38
39 typedef struct dGeomSpaceData {
40   dGeomID next;
41 } dGeomSpaceData;
42
43
44 dSpaceID dSimpleSpaceCreate();
45 dSpaceID dHashSpaceCreate();
46
47 void dSpaceDestroy (dSpaceID);
48 void dSpaceAdd (dSpaceID, dGeomID);
49 void dSpaceRemove (dSpaceID, dGeomID);
50 void dSpaceCollide (dSpaceID space, void *data, dNearCallback *callback);
51 int dSpaceQuery (dSpaceID, dGeomID);
52
53 void dHashSpaceSetLevels (dSpaceID space, int minlevel, int maxlevel);
54
55
56 /* @@@ NOT FLEXIBLE ENOUGH
57  *
58  * generate contacts for those objects in the space that touch each other.
59  * an array of contacts is created on the alternative stack using
60  * StackAlloc(), and a pointer to the array is returned. the size of the
61  * array is returned by the function.
62  */
63 /* int dSpaceCollide (dSpaceID space, dContactGeom **contact_array); */
64
65
66 /* HMMMMM... i dont think so.
67  * tell the space that an object has moved, so its representation in the
68  * space should be changed.
69  */
70 /* void dSpaceObjectMoved (dSpaceID, dGeomID); */
71
72
73 #ifdef __cplusplus
74 }
75 #endif
76
77 #endif
78