game engine: implement hitMaterial for collision and ray sensors

Reviewed By: moguri, kupoman

Differential Revision: https://developer.blender.org/D167
This commit is contained in:
Dalai Felinto
2014-01-24 02:10:04 -02:00
parent 52f2c8aec5
commit 67f1fd25ee
6 changed files with 22 additions and 4 deletions

View File

@@ -51,6 +51,12 @@ base class --- :class:`SCA_ISensor`
:type: list [x, y, z]
.. attribute:: hitMaterial
The material of the object in the face hit by the ray. (read-only).
:type: string
.. attribute:: rayDirection
The direction from the ray (in worldcoordinates). (read-only).

View File

@@ -39,3 +39,9 @@ base class --- :class:`SCA_ISensor`
:type: :class:`CListValue` of :class:`KX_GameObject`
.. attribute:: hitMaterial
The material of the object in the face hit by the ray. (read-only).
:type: string

View File

@@ -64,9 +64,8 @@ KX_RaySensor::KX_RaySensor(class SCA_EventManager* eventmgr,
m_bXRay(bXRay),
m_distance(distance),
m_scene(ketsjiScene),
m_axis(axis)
m_axis(axis),
m_hitMaterial("")
{
Init();
}
@@ -144,6 +143,7 @@ bool KX_RaySensor::RayHit(KX_ClientObjectInfo *client, KX_RayCast *result, void
m_hitNormal[1] = result->m_hitNormal[1];
m_hitNormal[2] = result->m_hitNormal[2];
m_hitMaterial = (client->m_auxilary_info ? (char*)client->m_auxilary_info : "");
}
// no multi-hit search yet
return true;
@@ -356,6 +356,7 @@ PyAttributeDef KX_RaySensor::Attributes[] = {
KX_PYATTRIBUTE_FLOAT_ARRAY_RO("hitPosition", KX_RaySensor, m_hitPosition, 3),
KX_PYATTRIBUTE_FLOAT_ARRAY_RO("rayDirection", KX_RaySensor, m_rayDirection, 3),
KX_PYATTRIBUTE_FLOAT_ARRAY_RO("hitNormal", KX_RaySensor, m_hitNormal, 3),
KX_PYATTRIBUTE_STRING_RO("hitMaterial", KX_RaySensor, m_hitMaterial),
KX_PYATTRIBUTE_RO_FUNCTION("hitObject", KX_RaySensor, pyattr_get_hitobject),
{ NULL } //Sentinel
};

View File

@@ -56,6 +56,7 @@ class KX_RaySensor : public SCA_ISensor
SCA_IObject* m_hitObject;
float m_hitNormal[3];
float m_rayDirection[3];
STR_String m_hitMaterial;
public:
KX_RaySensor(class SCA_EventManager* eventmgr,

View File

@@ -102,7 +102,8 @@ KX_TouchSensor::KX_TouchSensor(SCA_EventManager* eventmgr,KX_GameObject* gameobj
:SCA_ISensor(gameobj,eventmgr),
m_touchedpropname(touchedpropname),
m_bFindMaterial(bFindMaterial),
m_bTouchPulse(bTouchPulse)
m_bTouchPulse(bTouchPulse),
m_hitMaterial("")
/*m_sumoObj(sumoObj),*/
{
// KX_TouchEventManager* touchmgr = (KX_TouchEventManager*) eventmgr;
@@ -281,6 +282,7 @@ bool KX_TouchSensor::NewHandleCollision(void*object1,void*object2,const PHY_Coll
}
m_bTriggered = true;
m_hitObject = gameobj;
m_hitMaterial = (client->m_auxilary_info ? (char*)client->m_auxilary_info : "");
//printf("KX_TouchSensor::HandleCollision\n");
}
@@ -324,6 +326,7 @@ PyAttributeDef KX_TouchSensor::Attributes[] = {
KX_PYATTRIBUTE_STRING_RW("propName",0,MAX_PROP_NAME,false,KX_TouchSensor,m_touchedpropname),
KX_PYATTRIBUTE_BOOL_RW("useMaterial",KX_TouchSensor,m_bFindMaterial),
KX_PYATTRIBUTE_BOOL_RW("usePulseCollision",KX_TouchSensor,m_bTouchPulse),
KX_PYATTRIBUTE_STRING_RO("hitMaterial", KX_TouchSensor, m_hitMaterial),
KX_PYATTRIBUTE_RO_FUNCTION("hitObject", KX_TouchSensor, pyattr_get_object_hit),
KX_PYATTRIBUTE_RO_FUNCTION("hitObjectList", KX_TouchSensor, pyattr_get_object_hit_list),
{ NULL } //Sentinel

View File

@@ -73,6 +73,7 @@ protected:
SCA_IObject* m_hitObject;
class CListValue* m_colliders;
STR_String m_hitMaterial;
public:
KX_TouchSensor(class SCA_EventManager* eventmgr,