Revision: 20502
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20502
Author:   ben2610
Date:     2009-05-29 18:55:22 +0200 (Fri, 29 May 2009)

Log Message:
-----------
BGE: sensor object will now have Actor filter optional: new button 'Detect 
Actor' in physics settings indicate if you want the sensor to detect only Actor 
object or all objects. This way you don't need to set the scenery to Actor to 
detect ground for example.

Modified Paths:
--------------
    trunk/blender/source/blender/src/buttons_logic.c
    trunk/blender/source/gameengine/Ketsji/KX_ClientObjectInfo.h
    trunk/blender/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp
    trunk/blender/source/gameengine/Ketsji/KX_TouchEventManager.cpp
    trunk/blender/source/gameengine/Ketsji/KX_TouchSensor.cpp

Modified: trunk/blender/source/blender/src/buttons_logic.c
===================================================================
--- trunk/blender/source/blender/src/buttons_logic.c    2009-05-29 15:12:31 UTC 
(rev 20501)
+++ trunk/blender/source/blender/src/buttons_logic.c    2009-05-29 16:55:22 UTC 
(rev 20502)
@@ -3355,11 +3355,12 @@
        if (ob->gameflag & OB_COLLISION) {
 
                if (ob->gameflag & OB_SENSOR) {
-                       uiBlockEndAlign(block);
+                       uiDefButBitI(block, TOG, OB_ACTOR, 0, "Detect Actor",
+                                               110, 205, 100, 19, 
&ob->gameflag, 0, 0, 0, 0,
+                                               "Sensor should detect only the 
objects with Actor option enabled. Unset to detect all objects");
                        uiDefBlockBut(block, advanced_bullet_menu, ob, 
                                                  "Advanced", 
                                                  270, 205, 80, 19, "Display 
collision advanced settings");
-                       uiBlockBeginAlign(block);
                } else {
                        uiDefButBitI(block, TOG, OB_ACTOR, 0, "Actor",
                                                110, 205, 50, 19, 
&ob->gameflag, 0, 0, 0, 0,
@@ -3379,7 +3380,7 @@
                        //uiBlockSetCol(block, TH_BUT_SETTING2);
                }
 
-
+               uiBlockBeginAlign(block);
                if(ob->gameflag & OB_DYNAMIC) {
 
                        if (!(ob->gameflag & OB_SOFT_BODY))

Modified: trunk/blender/source/gameengine/Ketsji/KX_ClientObjectInfo.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_ClientObjectInfo.h        
2009-05-29 15:12:31 UTC (rev 20501)
+++ trunk/blender/source/gameengine/Ketsji/KX_ClientObjectInfo.h        
2009-05-29 16:55:22 UTC (rev 20502)
@@ -51,7 +51,8 @@
                ACTOR,
                RESERVED1,
                SENSOR,
-               OBSENSOR
+               OBSENSOR,
+               OBACTORSENSOR
        }               m_type;
        KX_GameObject*  m_gameobject;
        void*           m_auxilary_info;
@@ -84,7 +85,7 @@
        }
        
        bool isActor() { return m_type <= ACTOR; }
-       bool isSensor() { return m_type >= SENSOR && m_type <= OBSENSOR; }
+       bool isSensor() { return m_type >= SENSOR && m_type <= OBACTORSENSOR; }
 };
 
 #endif //__KX_CLIENTOBJECT_INFO_H

Modified: trunk/blender/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp 
2009-05-29 15:12:31 UTC (rev 20501)
+++ trunk/blender/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp 
2009-05-29 16:55:22 UTC (rev 20502)
@@ -1186,7 +1186,7 @@
 
        bool isActor = objprop->m_isactor;
        gameobj->getClientInfo()->m_type = 
-               (isbulletsensor) ? KX_ClientObjectInfo::OBSENSOR : 
+               (isbulletsensor) ? ((isActor) ? 
KX_ClientObjectInfo::OBACTORSENSOR : KX_ClientObjectInfo::OBSENSOR) :
                (isActor) ? KX_ClientObjectInfo::ACTOR : 
KX_ClientObjectInfo::STATIC;
        // store materialname in auxinfo, needed for touchsensors
        if (meshobj)

Modified: trunk/blender/source/gameengine/Ketsji/KX_TouchEventManager.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_TouchEventManager.cpp     
2009-05-29 15:12:31 UTC (rev 20501)
+++ trunk/blender/source/gameengine/Ketsji/KX_TouchEventManager.cpp     
2009-05-29 16:55:22 UTC (rev 20502)
@@ -99,6 +99,7 @@
                }
                break;
        case KX_ClientObjectInfo::OBSENSOR:
+       case KX_ClientObjectInfo::OBACTORSENSOR:
                // this object may have multiple collision sensors, 
                // check is any of them is interested in this object
                for(std::list<SCA_ISensor*>::iterator it = 
info->m_sensors.begin();

Modified: trunk/blender/source/gameengine/Ketsji/KX_TouchSensor.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_TouchSensor.cpp   2009-05-29 
15:12:31 UTC (rev 20501)
+++ trunk/blender/source/gameengine/Ketsji/KX_TouchSensor.cpp   2009-05-29 
16:55:22 UTC (rev 20502)
@@ -204,6 +204,7 @@
        KX_GameObject* myobj = (KX_GameObject*)GetParent();
        KX_GameObject* myparent = myobj->GetParent();
        KX_ClientObjectInfo* client_info = 
static_cast<KX_ClientObjectInfo*>(((PHY_IPhysicsController*)obj2)->getNewClientInfo());
+       KX_ClientObjectInfo* my_client_info = 
static_cast<KX_ClientObjectInfo*>(m_physCtrl->getNewClientInfo());
        KX_GameObject* otherobj = ( client_info ? client_info->m_gameobject : 
NULL);
 
        // first, decrement refcount as GetParent() increases it
@@ -214,7 +215,8 @@
        // good candidate because they are transient. That must be handled at 
another level
        if (!otherobj ||
                otherobj == myparent ||         // don't interact with our 
parent
-               client_info->m_type != KX_ClientObjectInfo::ACTOR)      // only 
with actor objects
+               (my_client_info->m_type == KX_ClientObjectInfo::OBACTORSENSOR &&
+                client_info->m_type != KX_ClientObjectInfo::ACTOR))    // only 
with actor objects
                return false;
                
        bool found = m_touchedpropname.IsEmpty();


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to