diff options
Diffstat (limited to 'source/gameengine/Physics/Sumo/Fuzzics/include/SM_Scene.h')
-rw-r--r-- | source/gameengine/Physics/Sumo/Fuzzics/include/SM_Scene.h | 90 |
1 files changed, 72 insertions, 18 deletions
diff --git a/source/gameengine/Physics/Sumo/Fuzzics/include/SM_Scene.h b/source/gameengine/Physics/Sumo/Fuzzics/include/SM_Scene.h index 1d4a4afc721..7afa2a59084 100644 --- a/source/gameengine/Physics/Sumo/Fuzzics/include/SM_Scene.h +++ b/source/gameengine/Physics/Sumo/Fuzzics/include/SM_Scene.h @@ -2,38 +2,70 @@ * $Id$ * Copyright (C) 2001 NaN Technologies B.V. * The physics scene. + * + * ***** BEGIN GPL/BL DUAL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. The Blender + * Foundation also sells licenses for use in proprietary software under + * the Blender License. See http://www.blender.org/BL/ for information + * about this. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): none yet. + * + * ***** END GPL/BL DUAL LICENSE BLOCK ***** */ - #ifndef SM_SCENE_H #define SM_SCENE_H +#ifdef WIN32 #pragma warning (disable : 4786) +#endif #include <vector> #include <set> #include <utility> //needed for pair -#include "solid.h" +#include <SOLID/SOLID.h> #include "MT_Vector3.h" #include "MT_Point3.h" -class SM_Object; +#include "SM_Object.h" + +typedef enum +{ + FH_RESPONSE, + SENSOR_RESPONSE, /* Touch Sensors */ + CAMERA_RESPONSE, /* Visibility Culling */ + OBJECT_RESPONSE, /* Object Dynamic Geometry Response */ + STATIC_RESPONSE, /* Static Geometry Response */ + + NUM_RESPONSE +}; class SM_Scene { public: - SM_Scene() : - m_scene(DT_CreateScene()), - m_respTable(DT_CreateRespTable()), - m_secondaryRespTable(0), - m_forceField(0.0, 0.0, 0.0) - {} + SM_Scene(); - ~SM_Scene() { - DT_DeleteRespTable(m_respTable); - DT_DeleteScene(m_scene); - } - + ~SM_Scene(); + DT_RespTableHandle getRespTableHandle() const { return m_respTable; } @@ -50,6 +82,9 @@ public: m_forceField = forceField; } + void addTouchCallback(int response_class, DT_ResponseCallback callback, void *user); + + void addSensor(SM_Object& object); void add(SM_Object& object); void remove(SM_Object& object); @@ -61,9 +96,10 @@ public: m_pairList.clear(); } - void setSecondaryRespTable(DT_RespTableHandle secondaryRespTable) { - m_secondaryRespTable = secondaryRespTable; - } + void setSecondaryRespTable(DT_RespTableHandle secondaryRespTable); + DT_RespTableHandle getSecondaryRespTable() { return m_secondaryRespTable; } + + void requestCollisionCallback(SM_Object &object); // Perform an integration step of duration 'timeStep'. @@ -96,7 +132,16 @@ private: // Clear the user set velocities. void clearObjectCombinedVelocities(); - + // This is the callback for handling collisions of dynamic objects + static + DT_Bool + boing( + void *client_data, + void *object1, + void *object2, + const DT_CollData *coll_data + ); + /** internal type */ typedef std::vector<SM_Object *> T_ObjectList; /** internal type */ @@ -106,10 +151,19 @@ private: DT_SceneHandle m_scene; /** Following response table contains the callbacks for the dynmics */ DT_RespTableHandle m_respTable; + DT_ResponseClass m_ResponseClass[NUM_RESPONSE]; /** * Following response table contains callbacks for the client (= * game engine) */ DT_RespTableHandle m_secondaryRespTable; // Handle + DT_ResponseClass m_secondaryResponseClass[NUM_RESPONSE]; + + /** + * Following resposne table contains callbacks for fixing the simulation + * ie making sure colliding objects do not intersect. + */ + DT_RespTableHandle m_fixRespTable; + DT_ResponseClass m_fixResponseClass[NUM_RESPONSE]; /** The acceleration from the force field */ MT_Vector3 m_forceField; |