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, _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs