svn merge https://svn.blender.org/svnroot/bf-blender/trunk/blender -r22717:22875
[blender.git] / source / gameengine / Ketsji / KX_ClientObjectInfo.h
index 0ef1a1b86fe849c372ecf715edca2c268912aac6..74647dd47fdae460a1828f941d53cfbb38413960 100644 (file)
@@ -1,15 +1,12 @@
 /**
  * $Id$
  *
- * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
+ * ***** BEGIN GPL 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.
+ * of the License, or (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  *
  * Contributor(s): none yet.
  *
- * ***** END GPL/BL DUAL LICENSE BLOCK *****
+ * ***** END GPL LICENSE BLOCK *****
  */
 #ifndef __KX_CLIENTOBJECT_INFO_H
 #define __KX_CLIENTOBJECT_INFO_H
 
+/* Note, the way this works with/without sumo is a bit odd */
+
+#include <list>
+
+class SCA_ISensor;
+class KX_GameObject;
 /**
  * Client Type and Additional Info. This structure can be use instead of a bare void* pointer, for safeness, and additional info for callbacks
  */
@@ -41,19 +44,43 @@ struct KX_ClientObjectInfo
                STATIC,
                ACTOR,
                RESERVED1,
-               RADAR,
-               NEAR
+               SENSOR,
+               OBSENSOR,
+               OBACTORSENSOR
        }               m_type;
-       void*           m_clientobject;
+       KX_GameObject*  m_gameobject;
        void*           m_auxilary_info;
+       std::list<SCA_ISensor*> m_sensors;
 public:
-       KX_ClientObjectInfo(void *clientobject, clienttype type = STATIC, void *auxilary_info = NULL) :
+       KX_ClientObjectInfo(KX_GameObject *gameobject, clienttype type = STATIC, void *auxilary_info = NULL) :
                m_type(type),
-               m_clientobject(clientobject),
+               m_gameobject(gameobject),
                m_auxilary_info(auxilary_info)
        {}
        
+       KX_ClientObjectInfo(const KX_ClientObjectInfo &copy) :
+                 m_type(copy.m_type),
+                 m_gameobject(copy.m_gameobject),
+                 m_auxilary_info(copy.m_auxilary_info)
+       {
+       }
+       
+       virtual ~KX_ClientObjectInfo() {}
+       
+       virtual bool hasCollisionCallback() 
+       {
+               return m_sensors.size() != 0;
+       }
+       
        bool isActor() { return m_type <= ACTOR; }
+       bool isSensor() { return m_type >= SENSOR && m_type <= OBACTORSENSOR; }
+       
+       
+#ifdef WITH_CXX_GUARDEDALLOC
+public:
+       void *operator new( unsigned int num_bytes) { return MEM_mallocN(num_bytes, "GE:KX_ClientObjectInfo"); }
+       void operator delete( void *mem ) { MEM_freeN(mem); }
+#endif
 };
 
 #endif //__KX_CLIENTOBJECT_INFO_H