[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16290] trunk/blender/source: BGE patch: add X-Ray option to ray sensor.
Benoit Bolsee
benoit.bolsee at online.be
Thu Aug 28 21:37:49 CEST 2008
Revision: 16290
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16290
Author: ben2610
Date: 2008-08-28 21:37:49 +0200 (Thu, 28 Aug 2008)
Log Message:
-----------
BGE patch: add X-Ray option to ray sensor. The option is effective only if a property is set: the sensor will ignore the objects that don't have the property.
Modified Paths:
--------------
trunk/blender/source/blender/makesdna/DNA_sensor_types.h
trunk/blender/source/blender/src/buttons_logic.c
trunk/blender/source/gameengine/Converter/KX_ConvertSensors.cpp
trunk/blender/source/gameengine/Ketsji/KX_RaySensor.cpp
trunk/blender/source/gameengine/Ketsji/KX_RaySensor.h
Modified: trunk/blender/source/blender/makesdna/DNA_sensor_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_sensor_types.h 2008-08-28 12:22:55 UTC (rev 16289)
+++ trunk/blender/source/blender/makesdna/DNA_sensor_types.h 2008-08-28 19:37:49 UTC (rev 16290)
@@ -237,6 +237,9 @@
* */
/* #define SENS_COLLISION_PROPERTY 0 */
#define SENS_COLLISION_MATERIAL 1
+/* ray specific mode */
+/* X-Ray means that the ray will traverse objects that don't have the property/material */
+#define SENS_RAY_XRAY 2
/* Some stuff for the mouse sensor Type: */
#define BL_SENS_MOUSE_LEFT_BUTTON 1
Modified: trunk/blender/source/blender/src/buttons_logic.c
===================================================================
--- trunk/blender/source/blender/src/buttons_logic.c 2008-08-28 12:22:55 UTC (rev 16289)
+++ trunk/blender/source/blender/src/buttons_logic.c 2008-08-28 19:37:49 UTC (rev 16290)
@@ -1390,9 +1390,14 @@
&raySens->propname, 0, 31, 0, 0,
"Only look for Objects with this property");
}
-
+
+ /* X-Ray option */
+ uiDefButBitS(block, TOG, SENS_RAY_XRAY, 1, "X",
+ xco + 10,yco - 68, 0.10 * (width-20), 19,
+ &raySens->mode, 0.0, 0.0, 0, 0,
+ "Toggle X-Ray option (see through objects that don't have the property)");
/* 2. sensing range */
- uiDefButF(block, NUM, 1, "Range", xco+10, yco-68, 0.6 * (width-20), 19,
+ uiDefButF(block, NUM, 1, "Range", xco+10 + 0.10 * (width-20), yco-68, 0.5 * (width-20), 19,
&raySens->range, 0.01, 10000.0, 100, 0,
"Sense objects no farther than this distance");
Modified: trunk/blender/source/gameengine/Converter/KX_ConvertSensors.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/KX_ConvertSensors.cpp 2008-08-28 12:22:55 UTC (rev 16289)
+++ trunk/blender/source/gameengine/Converter/KX_ConvertSensors.cpp 2008-08-28 19:37:49 UTC (rev 16290)
@@ -633,6 +633,7 @@
if (eventmgr)
{
bool bFindMaterial = (blenderraysensor->mode & SENS_COLLISION_MATERIAL);
+ bool bXRay = (blenderraysensor->mode & SENS_RAY_XRAY);
STR_String checkname = (bFindMaterial? blenderraysensor->matname : blenderraysensor->propname);
@@ -645,6 +646,7 @@
gameobj,
checkname,
bFindMaterial,
+ bXRay,
distance,
axis,
kxscene);
Modified: trunk/blender/source/gameengine/Ketsji/KX_RaySensor.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_RaySensor.cpp 2008-08-28 12:22:55 UTC (rev 16289)
+++ trunk/blender/source/gameengine/Ketsji/KX_RaySensor.cpp 2008-08-28 19:37:49 UTC (rev 16290)
@@ -51,6 +51,7 @@
SCA_IObject* gameobj,
const STR_String& propname,
bool bFindMaterial,
+ bool bXRay,
double distance,
int axis,
KX_Scene* ketsjiScene,
@@ -58,6 +59,7 @@
: SCA_ISensor(gameobj,eventmgr, T),
m_propertyname(propname),
m_bFindMaterial(bFindMaterial),
+ m_bXRay(bXRay),
m_distance(distance),
m_scene(ketsjiScene),
m_axis(axis)
@@ -153,7 +155,21 @@
printf("Invalid client type %d found ray casting\n", client->m_type);
return false;
}
- // no X-Ray function yet
+ if (m_bXRay && m_propertyname.Length() != 0)
+ {
+ if (m_bFindMaterial)
+ {
+ // not quite correct: an object may have multiple material
+ // should check all the material and not only the first one
+ if (!client->m_auxilary_info || (m_propertyname != ((char*)client->m_auxilary_info)))
+ return false;
+ }
+ else
+ {
+ if (client->m_gameobject->GetProperty(m_propertyname) == NULL)
+ return false;
+ }
+ }
return true;
}
Modified: trunk/blender/source/gameengine/Ketsji/KX_RaySensor.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_RaySensor.h 2008-08-28 12:22:55 UTC (rev 16289)
+++ trunk/blender/source/gameengine/Ketsji/KX_RaySensor.h 2008-08-28 19:37:49 UTC (rev 16290)
@@ -43,6 +43,7 @@
Py_Header;
STR_String m_propertyname;
bool m_bFindMaterial;
+ bool m_bXRay;
double m_distance;
class KX_Scene* m_scene;
bool m_bTriggered;
@@ -57,7 +58,8 @@
KX_RaySensor(class SCA_EventManager* eventmgr,
SCA_IObject* gameobj,
const STR_String& propname,
- bool fFindMaterial,
+ bool bFindMaterial,
+ bool bXRay,
double distance,
int axis,
class KX_Scene* ketsjiScene,
More information about the Bf-blender-cvs
mailing list