37
37
#include "KX_GameObject.h"
38
38
#include "KX_TouchEventManager.h"
39
39
#include "KX_Scene.h" // needed to create a replica
40
#include "PHY_IPhysicsEnvironment.h"
41
#include "PHY_IPhysicsController.h"
41
#include "SM_Object.h"
43
44
#ifdef HAVE_CONFIG_H
44
45
#include <config.h>
46
47
KX_NearSensor::KX_NearSensor(SCA_EventManager* eventmgr,
47
48
KX_GameObject* gameobj,
52
const STR_String& touchedpropname,
53
class KX_Scene* scene,
55
:KX_TouchSensor(eventmgr,
62
m_ResetMargin(resetmargin)
65
m_client_info = new KX_ClientObjectInfo(gameobj, KX_ClientObjectInfo::NEAR);
67
DT_ShapeHandle shape = (DT_ShapeHandle) vshape;
68
m_sumoObj = new SM_Object(shape,NULL,NULL,NULL);
69
m_sumoObj->setMargin(m_Margin);
70
m_sumoObj->setClientObject(m_client_info);
72
SynchronizeTransform();
75
KX_NearSensor::KX_NearSensor(SCA_EventManager* eventmgr,
76
KX_GameObject* gameobj,
80
const STR_String& touchedpropname,
81
class KX_Scene* scene,
83
:KX_TouchSensor(eventmgr,
90
m_ResetMargin(resetmargin)
93
m_client_info = new KX_ClientObjectInfo(gameobj, KX_ClientObjectInfo::NEAR);
95
m_sumoObj = new SM_Object(DT_NewSphere(0.0),NULL,NULL,NULL);
96
m_sumoObj->setMargin(m_Margin);
97
m_sumoObj->setClientObject(m_client_info);
52
const STR_String& touchedpropname,
53
class KX_Scene* scene,
54
PHY_IPhysicsController* ctrl,
56
:KX_TouchSensor(eventmgr,
63
m_ResetMargin(resetmargin)
66
gameobj->getClientInfo()->m_sensors.remove(this);
67
m_client_info = new KX_ClientObjectInfo(gameobj, KX_ClientObjectInfo::NEAR);
68
m_client_info->m_sensors.push_back(this);
70
//DT_ShapeHandle shape = (DT_ShapeHandle) vshape;
72
m_physCtrl->SetMargin(m_Margin);
73
m_physCtrl->setNewClientInfo(m_client_info);
99
75
SynchronizeTransform();
102
78
void KX_NearSensor::RegisterSumo(KX_TouchEventManager *touchman)
104
touchman->GetSumoScene()->addSensor(*m_sumoObj);
80
touchman->GetPhysicsEnvironment()->addSensor(m_physCtrl);
107
83
CValue* KX_NearSensor::GetReplica()
115
91
// this will copy properties and so on...
116
92
CValue::AddDataToReplica(replica);
118
replica->m_client_info = new KX_ClientObjectInfo(m_client_info->m_clientobject, KX_ClientObjectInfo::NEAR);
94
replica->m_client_info = new KX_ClientObjectInfo(m_client_info->m_gameobject, KX_ClientObjectInfo::NEAR);
120
replica->m_sumoObj = new SM_Object(DT_NewSphere(0.0),NULL,NULL,NULL);
121
replica->m_sumoObj->setMargin(m_Margin);
122
replica->m_sumoObj->setClientObject(replica->m_client_info);
96
replica->m_physCtrl = replica->m_physCtrl->GetReplica();
97
//todo: make sure replication works fine
98
//>m_sumoObj = new SM_Object(DT_NewSphere(0.0),NULL,NULL,NULL);
99
//replica->m_sumoObj->setMargin(m_Margin);
100
//replica->m_sumoObj->setClientObject(replica->m_client_info);
124
102
replica->SynchronizeTransform();
156
137
bool KX_NearSensor::Evaluate(CValue* event)
158
139
bool result = false;
159
KX_GameObject* parent = static_cast<KX_GameObject*>(GetParent());
140
// KX_GameObject* parent = static_cast<KX_GameObject*>(GetParent());
161
142
if (m_bTriggered != m_bLastTriggered)
163
144
m_bLastTriggered = m_bTriggered;
164
145
if (m_bTriggered)
168
m_sumoObj->setMargin(m_ResetMargin);
149
m_physCtrl->SetMargin(m_ResetMargin);
174
m_sumoObj->setMargin(m_Margin);
155
m_physCtrl->SetMargin(m_Margin);
186
DT_Bool KX_NearSensor::HandleCollision(void* obj1,void* obj2,const DT_CollData * coll_data)
167
bool KX_NearSensor::NewHandleCollision(void* obj1,void* obj2,const PHY_CollData * coll_data)
188
KX_TouchEventManager* toucheventmgr = static_cast<KX_TouchEventManager*>(m_eventmgr);
169
// KX_TouchEventManager* toucheventmgr = static_cast<KX_TouchEventManager*>(m_eventmgr);
189
170
KX_GameObject* parent = static_cast<KX_GameObject*>(GetParent());
191
// need the mapping from SM_Objects to gameobjects now
172
// need the mapping from PHY_IPhysicsController to gameobjects now
193
KX_ClientObjectInfo* client_info =static_cast<KX_ClientObjectInfo*> (obj1 == m_sumoObj?
194
((SM_Object*)obj2)->getClientObject() :
195
((SM_Object*)obj1)->getClientObject());
174
KX_ClientObjectInfo* client_info =static_cast<KX_ClientObjectInfo*> (obj1 == m_physCtrl?
175
((PHY_IPhysicsController*)obj2)->getNewClientInfo() :
176
((PHY_IPhysicsController*)obj1)->getNewClientInfo());
197
178
KX_GameObject* gameobj = ( client_info ?
198
static_cast<KX_GameObject*>(client_info->m_clientobject) :
179
client_info->m_gameobject :
201
182
if (gameobj && (gameobj != parent))