Python API/Game engine fixes, dosn't affect 2.47
authorCampbell Barton <ideasman42@gmail.com>
Thu, 26 Jun 2008 12:39:06 +0000 (12:39 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Thu, 26 Jun 2008 12:39:06 +0000 (12:39 +0000)
* Action FrameProp was checking if the string was true, not that it contained any text.
* Added GameObject.getVisible() since there is already a getVisible
* Added GameObject.getPropertyNames() Needed in apricot so Franky can collect and throw items in the level without having the names defined elsewhere or modifying his game logic which is stored in a separate blend file.

source/gameengine/Converter/BL_ActionActuator.cpp
source/gameengine/Expressions/Value.cpp
source/gameengine/Expressions/Value.h
source/gameengine/Ketsji/KX_GameObject.cpp
source/gameengine/Ketsji/KX_GameObject.h
source/gameengine/PyDoc/KX_GameObject.py

index 83be5d3a14fd3cf851ea4d24ee1a8338972d72ba..5050da3fe7f43db92490aac9d40ab1b59810de01 100644 (file)
@@ -350,7 +350,7 @@ bool BL_ActionActuator::Update(double curtime, bool frame)
        }
        
        /* Set the property if its defined */
-       if (m_framepropname) {
+       if (m_framepropname[0] != '\0') {
                CValue* propowner = GetParent();
                CValue* oldprop = propowner->GetProperty(m_framepropname);
                CValue* newval = new CFloatValue(m_localtime);
index 56208ab4ad505959f10ae9df9541a16707e0431f..f0195d5df824ee6c97c6813fa4938a79a30e489d 100644 (file)
@@ -520,11 +520,6 @@ void CValue::CloneProperties(CValue *replica)
        
 }
 
-
-
-
-
-
 double*                CValue::GetVector3(bool bGetTransformedVec)
 {
        assertd(false); // don;t get vector from me
@@ -775,6 +770,25 @@ int        CValue::_setattr(const STR_String& attr,PyObject* pyobj)
        //PyObjectPlus::_setattr(attr,value);
        return 0;
 };
+
+PyObject*      CValue::ConvertKeysToPython( void )
+{
+       PyObject *pylist = PyList_New( 0 );
+       PyObject *pystr;
+       
+       if (m_pNamedPropertyArray)
+       {
+               for ( std::map<STR_String,CValue*>::iterator it = m_pNamedPropertyArray->begin();
+               !(it == m_pNamedPropertyArray->end());it++)
+               {
+                       pystr = PyString_FromString( (*it).first );
+                       PyList_Append(pylist, pystr);
+                       Py_DECREF( pystr );
+               }
+       }
+       return pylist;
+}
+
 /*
 PyObject*      CValue::PyMake(PyObject* ignored,PyObject* args)
 {
index ccb9c34749d7c7ad41c0f4f365df14eb23637cfe..561e5521d6000a00fe89fa4e400f4bf74152c4ba 100644 (file)
@@ -253,6 +253,8 @@ public:
        virtual int                             _delattr(const STR_String& attr);
        virtual int                             _setattr(const STR_String& attr,PyObject* value);
        
+       virtual PyObject* ConvertKeysToPython( void );
+       
        KX_PYMETHOD(CValue,GetName);
 
 #else
index 4b467a229f0d3b1fdf38aab6ce097ab9ba47ce95..3ca5f5809e6e52feefbf398a4f3bf8d44c200cfb 100644 (file)
@@ -803,6 +803,7 @@ void KX_GameObject::Suspend(void)
 
 PyMethodDef KX_GameObject::Methods[] = {
        {"setVisible",(PyCFunction) KX_GameObject::sPySetVisible, METH_VARARGS},  
+       {"getVisible",(PyCFunction) KX_GameObject::sPyGetVisible, METH_VARARGS},  
        {"alignAxisToVect",(PyCFunction) KX_GameObject::sPyAlignAxisToVect, METH_VARARGS},
        {"setPosition", (PyCFunction) KX_GameObject::sPySetPosition, METH_VARARGS},
        {"getPosition", (PyCFunction) KX_GameObject::sPyGetPosition, METH_VARARGS},
@@ -823,6 +824,7 @@ PyMethodDef KX_GameObject::Methods[] = {
        {"removeParent", (PyCFunction)KX_GameObject::sPyRemoveParent,METH_VARARGS},
        {"getMesh", (PyCFunction)KX_GameObject::sPyGetMesh,METH_VARARGS},
        {"getPhysicsId", (PyCFunction)KX_GameObject::sPyGetPhysicsId,METH_VARARGS},
+       {"getPropertyNames", (PyCFunction)KX_GameObject::sPyGetPropertyNames,METH_VARARGS},
        KX_PYMETHODTABLE(KX_GameObject, getDistanceTo),
        KX_PYMETHODTABLE(KX_GameObject, rayCastTo),
        KX_PYMETHODTABLE(KX_GameObject, rayCast),
@@ -1095,6 +1097,12 @@ PyObject* KX_GameObject::PySetVisible(PyObject* self,
        
 }
 
+PyObject* KX_GameObject::PyGetVisible(PyObject* self,
+                                                                         PyObject* args,
+                                                                         PyObject* kwds)
+{
+       return PyInt_FromLong(m_bVisible);      
+}
 
 
 PyObject* KX_GameObject::PyGetVelocity(PyObject* self, 
@@ -1383,6 +1391,13 @@ PyObject* KX_GameObject::PyGetPhysicsId(PyObject* self,
        return PyInt_FromLong((long)physid);
 }
 
+PyObject* KX_GameObject::PyGetPropertyNames(PyObject* self,
+                                                                                          PyObject* args,
+                                                                                          PyObject* kwds)
+{
+       return ConvertKeysToPython();
+}
+
 KX_PYMETHODDEF_DOC(KX_GameObject, getDistanceTo,
 "getDistanceTo(other): get distance to another point/KX_GameObject")
 {
index a0507cb9dbceeb1adff302e9ef97f98a5a0bb9d6..796cb4a161ff6eef487c870b9bd882d39e14b668 100644 (file)
@@ -718,6 +718,7 @@ public:
        KX_PYMETHOD(KX_GameObject,GetReactionForce);
        KX_PYMETHOD(KX_GameObject,GetOrientation);
        KX_PYMETHOD(KX_GameObject,SetOrientation);
+       KX_PYMETHOD(KX_GameObject,GetVisible);
        KX_PYMETHOD(KX_GameObject,SetVisible);
        KX_PYMETHOD(KX_GameObject,AlignAxisToVect);
        KX_PYMETHOD(KX_GameObject,SuspendDynamics);
@@ -731,9 +732,11 @@ public:
        KX_PYMETHOD(KX_GameObject,SetParent);
        KX_PYMETHOD(KX_GameObject,RemoveParent);
        KX_PYMETHOD(KX_GameObject,GetPhysicsId);
+       KX_PYMETHOD(KX_GameObject,GetPropertyNames);
        KX_PYMETHOD_DOC(KX_GameObject,rayCastTo);
        KX_PYMETHOD_DOC(KX_GameObject,rayCast);
        KX_PYMETHOD_DOC(KX_GameObject,getDistanceTo);
+       
 private :
 
        /**     
index abcf5a942dd2947c351807de383e765342e259a2..572ac2d42ae78f466a86f661d56207ee6745df23 100644 (file)
@@ -25,7 +25,12 @@ class KX_GameObject:
        @ivar timeOffset: adjust the slowparent delay at runtime.
        @type timeOffset: float
        """
-       
+       def getVisible(visible):
+               """
+               Gets the game object's visible flag.
+               
+               @type visible: boolean
+               """     
        def setVisible(visible):
                """
                Sets the game object's visible flag.
@@ -176,6 +181,12 @@ class KX_GameObject:
                """
                Returns the user data object associated with this game object's physics controller.
                """
+       def getPropertyNames():
+               """
+               Gets a list of all property names.
+               @rtype: list
+               @return: All property names for this object.
+               """
        def getDistanceTo(other):
                """
                Returns the distance to another object or point.
@@ -216,7 +227,7 @@ class KX_GameObject:
                If is casted from/to object center or explicit [x,y,z] points.
                The ray does not have X-Ray capability: the first object hit (other than self object) stops the ray
                If a property was specified and the first object hit does not have that property, there is no hit
-               The     ray ignores collision-free objects
+               The     ray ignores collision-free objects and faces that dont have the collision flag enabled, you can however use ghost objects.
 
                @param to: [x,y,z] or object to which the ray is casted
                @type to: L{KX_GameObject} or 3-tuple