[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27764] trunk/blender/source/gameengine: BGE: fix for [#21180] - missing min and max values in the API + mode fix ( interval wasn't working)
Dalai Felinto
dfelinto at gmail.com
Fri Mar 26 08:21:48 CET 2010
Revision: 27764
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27764
Author: dfelinto
Date: 2010-03-26 08:21:48 +0100 (Fri, 26 Mar 2010)
Log Message:
-----------
BGE: fix for [#21180] - missing min and max values in the API + mode fix (interval wasn't working)
of course it wasn't only a matter of adding the properties in the api :)
The code of validValueForIntervalProperty and modeChange are the same BUT in the future they shouldn't be, for I think it's fine to keep them as separated functions.
Bonus fix: Also we are now checking if the new mode is interval and update the range expression.
Modified Paths:
--------------
trunk/blender/source/gameengine/GameLogic/SCA_PropertySensor.cpp
trunk/blender/source/gameengine/GameLogic/SCA_PropertySensor.h
trunk/blender/source/gameengine/PyDoc/GameTypes.py
Modified: trunk/blender/source/gameengine/GameLogic/SCA_PropertySensor.cpp
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_PropertySensor.cpp 2010-03-26 07:17:54 UTC (rev 27763)
+++ trunk/blender/source/gameengine/GameLogic/SCA_PropertySensor.cpp 2010-03-26 07:21:48 UTC (rev 27764)
@@ -316,10 +316,36 @@
int SCA_PropertySensor::validValueForProperty(void *self, const PyAttributeDef*)
{
+ /* If someone actually do type checking please make sure the 'max' and 'min'
+ are checked as well (currently they are calling the PrecalculateRangeExpression
+ function directly */
+
/* There is no type checking at this moment, unfortunately... */
return 0;
}
+int SCA_PropertySensor::validValueForIntervalProperty(void *self, const PyAttributeDef*)
+{
+ SCA_PropertySensor* sensor = reinterpret_cast<SCA_PropertySensor*>(self);
+
+ if (sensor->m_checktype==KX_PROPSENSOR_INTERVAL)
+ {
+ sensor->PrecalculateRangeExpression();
+ }
+ return 0;
+}
+
+int SCA_PropertySensor::modeChange(void *self, const PyAttributeDef* attrdef)
+{
+ SCA_PropertySensor* sensor = reinterpret_cast<SCA_PropertySensor*>(self);
+
+ if (sensor->m_checktype==KX_PROPSENSOR_INTERVAL)
+ {
+ sensor->PrecalculateRangeExpression();
+ }
+ return 0;
+}
+
/* Integration hooks ------------------------------------------------------- */
PyTypeObject SCA_PropertySensor::Type = {
PyVarObject_HEAD_INIT(NULL, 0)
@@ -348,9 +374,11 @@
};
PyAttributeDef SCA_PropertySensor::Attributes[] = {
- KX_PYATTRIBUTE_INT_RW("mode",KX_PROPSENSOR_NODEF,KX_PROPSENSOR_MAX-1,false,SCA_PropertySensor,m_checktype),
+ KX_PYATTRIBUTE_INT_RW_CHECK("mode",KX_PROPSENSOR_NODEF,KX_PROPSENSOR_MAX-1,false,SCA_PropertySensor,m_checktype,modeChange),
KX_PYATTRIBUTE_STRING_RW_CHECK("propName",0,100,false,SCA_PropertySensor,m_checkpropname,CheckProperty),
KX_PYATTRIBUTE_STRING_RW_CHECK("value",0,100,false,SCA_PropertySensor,m_checkpropval,validValueForProperty),
+ KX_PYATTRIBUTE_STRING_RW_CHECK("min",0,100,false,SCA_PropertySensor,m_checkpropval,validValueForIntervalProperty),
+ KX_PYATTRIBUTE_STRING_RW_CHECK("max",0,100,false,SCA_PropertySensor,m_checkpropmaxval,validValueForIntervalProperty),
{ NULL } //Sentinel
};
Modified: trunk/blender/source/gameengine/GameLogic/SCA_PropertySensor.h
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_PropertySensor.h 2010-03-26 07:17:54 UTC (rev 27763)
+++ trunk/blender/source/gameengine/GameLogic/SCA_PropertySensor.h 2010-03-26 07:21:48 UTC (rev 27764)
@@ -95,6 +95,16 @@
*/
static int validValueForProperty(void* self, const PyAttributeDef*);
+ /**
+ * Test whether this is a sensible value for interval (type check) and updates Range Expression
+ */
+ static int validValueForIntervalProperty(void* self, const PyAttributeDef*);
+
+ /**
+ * Test if the new mode is interval. If positive updates Range Expression
+ */
+ static int modeChange(void* self, const PyAttributeDef* attrdef);
+
#endif
};
Modified: trunk/blender/source/gameengine/PyDoc/GameTypes.py
===================================================================
--- trunk/blender/source/gameengine/PyDoc/GameTypes.py 2010-03-26 07:17:54 UTC (rev 27763)
+++ trunk/blender/source/gameengine/PyDoc/GameTypes.py 2010-03-26 07:21:48 UTC (rev 27764)
@@ -5152,6 +5152,10 @@
@type propName: string
@ivar value: the value with which the sensor compares to the value of the property.
@type value: string
+ @ivar min: the minimum value of the range used to evaluate the property when in interval mode.
+ @type min: string
+ @ivar max: the maximum value of the range used to evaluate the property when in interval mode.
+ @type max: string
"""
#{ Deprecated
def getType():
More information about the Bf-blender-cvs
mailing list