[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20502] trunk/blender/source: 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 .
Benoit Bolsee
benoit.bolsee at online.be
Fri May 29 18:55:23 CEST 2009
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();
More information about the Bf-blender-cvs
mailing list