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

Reply via email to