diff options
author | Hans Lambermont <hans@lambermont.dyndns.org> | 2002-10-12 15:37:38 +0400 |
---|---|---|
committer | Hans Lambermont <hans@lambermont.dyndns.org> | 2002-10-12 15:37:38 +0400 |
commit | 12315f4d0e0ae993805f141f64cb8c73c5297311 (patch) | |
tree | 59b45827cd8293cfb727758989c7a74b40183974 /source/gameengine/Physics/Sumo/include/solid.h |
Initial revisionv2.25
Diffstat (limited to 'source/gameengine/Physics/Sumo/include/solid.h')
-rw-r--r-- | source/gameengine/Physics/Sumo/include/solid.h | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/source/gameengine/Physics/Sumo/include/solid.h b/source/gameengine/Physics/Sumo/include/solid.h new file mode 100644 index 00000000000..985014a2a46 --- /dev/null +++ b/source/gameengine/Physics/Sumo/include/solid.h @@ -0,0 +1,195 @@ +#ifndef SOLID_H +#define SOLID_H + +#include "solid_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +DT_DECLARE_HANDLE(DT_ObjectHandle); +DT_DECLARE_HANDLE(DT_SceneHandle); +DT_DECLARE_HANDLE(DT_ShapeHandle); +DT_DECLARE_HANDLE(DT_RespTableHandle); + +typedef enum DT_ScalarType { + DT_FLOAT, + DT_DOUBLE +} DT_ScalarType; + +typedef enum DT_ResponseType { + DT_NO_RESPONSE, + DT_SIMPLE_RESPONSE, + DT_WITNESSED_RESPONSE, + DT_DEPTH_RESPONSE, +} DT_ResponseType; + +typedef struct DT_CollData { + DT_Vector3 point1; + DT_Vector3 point2; + DT_Vector3 normal; +} DT_CollData; + +typedef void (*DT_ResponseCallback)( + void *client_data, + void *client_object1, + void *client_object2, + const DT_CollData *coll_data); + +/* Shape definition, similar to OpenGL */ + +extern DT_ShapeHandle DT_Box(DT_Scalar x, DT_Scalar y, DT_Scalar z); +extern DT_ShapeHandle DT_Cone(DT_Scalar radius, DT_Scalar height); +extern DT_ShapeHandle DT_Cylinder(DT_Scalar radius, DT_Scalar height); +extern DT_ShapeHandle DT_Sphere(DT_Scalar radius); +extern DT_ShapeHandle DT_Ray(DT_Scalar x, DT_Scalar y, DT_Scalar z); + +extern DT_ShapeHandle DT_NewComplexShape(); +extern void DT_EndComplexShape(); + +extern DT_ShapeHandle DT_NewPolyhedron(); +extern void DT_EndPolyhedron(); + +extern void DT_Begin(); +extern void DT_End(); + +extern void DT_Vertex(DT_Scalar x, DT_Scalar y, DT_Scalar z); + +/* Vertex arrays maintained by the client application can be accessed directly + by SUMO. For instance, you have a vertex struct in the client of the form: + + struct Vertex { + float xyz[3]; + float uv[2]; + float normal[3]; + }; + + And maintain vertex arrays e.g. as + + struct Vertex vertices[328]; + + Within a Polyhedron or a ComplexShape you can use this data by specifying + + DT_VertexBase(vertices, DT_FLOAT, sizeof(struct Vertex)); + + and refer to vertices in the array using + + DT_VertexIndex(10); + + or + + DT_Index indices[5] = { 6, 4, 8, 1, 3 }; + DT_VertexIndices(5, indices); + + or even + + DT_VertexRange(8, 4); + + for the range 8, 9, 10, 11. +*/ + + +extern void DT_SetVertexBase(const void *base, DT_ScalarType type, + DT_Size stride); +extern void DT_VertexIndex(DT_Index index); +extern void DT_VertexIndices(DT_Count count, const DT_Index *indices); +extern void DT_VertexRange(DT_Index first, DT_Count count); + + +/* currently not implemented */ +extern void DT_ChangeVertexBase(DT_ShapeHandle shape, const void *base); + +extern void DT_DeleteShape(DT_ShapeHandle shape); + +/* Scene */ + +extern DT_SceneHandle DT_CreateScene(); +extern void DT_DeleteScene(DT_SceneHandle scene); + +extern void DT_AddObject(DT_SceneHandle scene, DT_ObjectHandle object); +extern void DT_RemoveObject(DT_SceneHandle scene, DT_ObjectHandle object); + + + +/* Object */ + +extern DT_ObjectHandle DT_CreateObject( + void *client_object, /* pointer to object in client memory */ + DT_ShapeHandle shape /* the shape or geometry of the object */ + ); + +extern void DT_DeleteObject(DT_ObjectHandle object); + +extern void DT_SetScaling(DT_ObjectHandle object, const DT_Vector3 scaling); +extern void DT_SetPosition(DT_ObjectHandle object, const DT_Vector3 position); +extern void DT_SetOrientation(DT_ObjectHandle object, const DT_Quaternion orientation); + +extern void DT_SetMargin(DT_ObjectHandle object, DT_Scalar margin); + +extern void DT_SetMatrixf(DT_ObjectHandle object, const float *m); +extern void DT_GetMatrixf(DT_ObjectHandle object, float *m); + +extern void DT_SetMatrixd(DT_ObjectHandle object, const double *m); +extern void DT_GetMatrixd(DT_ObjectHandle object, double *m); + +extern void DT_GetWorldCoord(DT_ObjectHandle object, + const DT_Vector3 local, + DT_Vector3 world); + +extern DT_Scalar DT_GetClosestPair(DT_ObjectHandle object1, DT_ObjectHandle object2, + DT_Vector3 point1, DT_Vector3 point2); + + +/* Response, see SOLID user manual */ + +extern DT_RespTableHandle DT_CreateRespTable(); +extern void DT_DeleteRespTable(DT_RespTableHandle respTable); + +extern void DT_CallResponse(DT_RespTableHandle respTable, + DT_ObjectHandle object1, + DT_ObjectHandle object2, + const DT_CollData *coll_data); + +extern void DT_SetDefaultResponse(DT_RespTableHandle respTable, + DT_ResponseCallback response, + DT_ResponseType type, + void *client_data); + +extern void DT_ClearDefaultResponse(DT_RespTableHandle respTable); + +extern void DT_SetObjectResponse(DT_RespTableHandle respTable, + DT_ObjectHandle object, + DT_ResponseCallback response, + DT_ResponseType type, void *client_data); +extern void DT_ClearObjectResponse(DT_RespTableHandle respTable, + DT_ObjectHandle object); + +extern void DT_SetPairResponse(DT_RespTableHandle respTable, + DT_ObjectHandle object1, + DT_ObjectHandle object2, + DT_ResponseCallback response, + DT_ResponseType type, + void *client_data); +extern void DT_ClearPairResponse(DT_RespTableHandle respTable, + DT_ObjectHandle object1, + DT_ObjectHandle object2); + + + +/* Perform a collision test for a given scene, using a response table */ + +extern DT_Count DT_Test(DT_SceneHandle scene, DT_RespTableHandle respTable); + +extern void *DT_RayTest(DT_SceneHandle scene, void *ignore_client, + const DT_Vector3 from, const DT_Vector3 to, + DT_Vector3 spot, DT_Vector3 normal); + +extern int DT_ObjectRayTest(DT_ObjectHandle object, + const DT_Vector3 from, const DT_Vector3 to, + DT_Vector3 spot, DT_Vector3 normal); + +#ifdef __cplusplus +} +#endif + +#endif |