Changeset View
Changeset View
Standalone View
Standalone View
source/gameengine/Ketsji/KX_CollisionSensor.h
- This file was moved from source/gameengine/Ketsji/KX_TouchSensor.h.
| Context not available. | |||||
| * ***** END GPL LICENSE BLOCK ***** | * ***** END GPL LICENSE BLOCK ***** | ||||
| */ | */ | ||||
| /** \file KX_TouchSensor.h | /** \file KX_CollisionSensor.h | ||||
| * \ingroup ketsji | * \ingroup ketsji | ||||
| * \brief Senses touch and collision events | * \brief Senses touch and collision events | ||||
| */ | */ | ||||
| Context not available. | |||||
| #include "SCA_ISensor.h" | #include "SCA_ISensor.h" | ||||
| #include "EXP_ListValue.h" | #include "EXP_ListValue.h" | ||||
| struct PHY_CollData; | class PHY_CollData; | ||||
| #include "KX_ClientObjectInfo.h" | #include "KX_ClientObjectInfo.h" | ||||
| Context not available. | |||||
| typedef unsigned long uint_ptr; | typedef unsigned long uint_ptr; | ||||
| #endif | #endif | ||||
| class KX_TouchEventManager; | class KX_CollisionEventManager; | ||||
| class KX_TouchSensor : public SCA_ISensor | class KX_CollisionSensor : public SCA_ISensor | ||||
| { | { | ||||
| protected: | protected: | ||||
| Py_Header | Py_Header | ||||
| Context not available. | |||||
| /** | /** | ||||
| * The sensor should only look for objects with this property. | * The sensor should only look for objects with this property. | ||||
| */ | */ | ||||
| STR_String m_touchedpropname; | std::string m_touchedpropname; | ||||
| bool m_bFindMaterial; | bool m_bFindMaterial; | ||||
| bool m_bTouchPulse; /* changes in the colliding objects trigger pulses */ | bool m_bCollisionPulse; /* changes in the colliding objects trigger pulses */ | ||||
| class PHY_IPhysicsController* m_physCtrl; | class PHY_IPhysicsController * m_physCtrl; | ||||
| bool m_bCollision; | bool m_bCollision; | ||||
| bool m_bTriggered; | bool m_bTriggered; | ||||
| bool m_bLastTriggered; | bool m_bLastTriggered; | ||||
| // Use with m_bTouchPulse to detect changes | // Use with m_bCollisionPulse to detect changes | ||||
| int m_bLastCount; /* size of m_colliders last tick */ | int m_bLastCount; /* size of m_colliders last tick */ | ||||
| uint_ptr m_bColliderHash; /* hash collision objects pointers to trigger in case one object collides and another takes its place */ | uint_ptr m_bColliderHash; /* hash collision objects pointers to trigger in case one object collides and another takes its place */ | ||||
| uint_ptr m_bLastColliderHash; | uint_ptr m_bLastColliderHash; | ||||
| SCA_IObject* m_hitObject; | SCA_IObject *m_hitObject; | ||||
| class CListValue* m_colliders; | class CListValue * m_colliders; | ||||
| STR_String m_hitMaterial; | std::string m_hitMaterial; | ||||
| public: | public: | ||||
| KX_TouchSensor(class SCA_EventManager* eventmgr, | KX_CollisionSensor(class SCA_EventManager *eventmgr, | ||||
| class KX_GameObject* gameobj, | class KX_GameObject *gameobj, | ||||
| bool bFindMaterial, | bool bFindMaterial, | ||||
| bool bTouchPulse, | bool bCollisionPulse, | ||||
| const STR_String& touchedpropname); | const std::string& touchedpropname); | ||||
| virtual ~KX_TouchSensor(); | virtual ~KX_CollisionSensor(); | ||||
| virtual CValue* GetReplica(); | virtual CValue *GetReplica(); | ||||
| virtual void ProcessReplica(); | virtual void ProcessReplica(); | ||||
| virtual void SynchronizeTransform(); | virtual void SynchronizeTransform(); | ||||
| virtual bool Evaluate(); | virtual bool Evaluate(); | ||||
| virtual void Init(); | virtual void Init(); | ||||
| virtual void ReParent(SCA_IObject* parent); | virtual void ReParent(SCA_IObject *parent); | ||||
| virtual void RegisterSumo(KX_TouchEventManager* touchman); | |||||
| virtual void UnregisterSumo(KX_TouchEventManager* touchman); | |||||
| virtual void UnregisterToManager(); | |||||
| #if 0 | virtual void RegisterSumo(KX_CollisionEventManager *collisionman); | ||||
| virtual DT_Bool HandleCollision(void* obj1,void* obj2, | virtual void UnregisterSumo(KX_CollisionEventManager *collisionman); | ||||
| const DT_CollData * coll_data); | virtual void UnregisterToManager(); | ||||
| #endif | |||||
| virtual bool NewHandleCollision(void*obj1,void*obj2,const PHY_CollData* colldata); | virtual bool NewHandleCollision(void *obj1, void *obj2, const PHY_CollData *colldata); | ||||
| // Allows to do pre-filtering and save computation time | // Allows to do pre-filtering and save computation time | ||||
| // obj1 = sensor physical controller, obj2 = physical controller of second object | // obj1 = sensor physical controller, obj2 = physical controller of second object | ||||
| // return value = true if collision should be checked on pair of object | // return value = true if collision should be checked on pair of object | ||||
| virtual bool BroadPhaseFilterCollision(void*obj1,void*obj2) { return true; } | virtual bool BroadPhaseFilterCollision(void *obj1, void *obj2) | ||||
| virtual bool BroadPhaseSensorFilterCollision(void*obj1,void*obj2); | { | ||||
| virtual sensortype GetSensorType() { return ST_TOUCH; } | return true; | ||||
| } | |||||
| virtual bool BroadPhaseSensorFilterCollision(void *obj1, void *obj2); | |||||
| virtual sensortype GetSensorType() | |||||
| { | |||||
| return ST_TOUCH; | |||||
| } | |||||
| virtual bool IsPositiveTrigger() { | |||||
| virtual bool IsPositiveTrigger() | |||||
| { | |||||
| bool result = m_bTriggered; | bool result = m_bTriggered; | ||||
| if (m_invert) result = !result; | if (m_invert) { | ||||
| result = !result; | |||||
| } | |||||
| return result; | return result; | ||||
| } | } | ||||
| virtual void EndFrame(); | |||||
| class PHY_IPhysicsController* GetPhysicsController() { return m_physCtrl; } | virtual void EndFrame(); | ||||
| class PHY_IPhysicsController *GetPhysicsController() | |||||
| { | |||||
| return m_physCtrl; | |||||
| } | |||||
| // todo: put some info for collision maybe | |||||
| #ifdef WITH_PYTHON | #ifdef WITH_PYTHON | ||||
| /* --------------------------------------------------------------------- */ | /* --------------------------------------------------------------------- */ | ||||
| /* Python interface ---------------------------------------------------- */ | /* Python interface ---------------------------------------------------- */ | ||||
| /* --------------------------------------------------------------------- */ | /* --------------------------------------------------------------------- */ | ||||
| static PyObject* pyattr_get_object_hit(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); | static PyObject *pyattr_get_object_hit(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); | ||||
| static PyObject* pyattr_get_object_hit_list(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); | static PyObject *pyattr_get_object_hit_list(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); | ||||
| #endif | #endif | ||||
| }; | }; | ||||
| #endif /* __KX_TOUCHSENSOR_H__ */ | #endif /* __KX_TOUCHSENSOR_H__ */ | ||||
| Context not available. | |||||