Python API/Game engine fixes, dosn't affect 2.47

* 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.
This commit is contained in:
Campbell Barton
2008-06-26 12:39:06 +00:00
parent ac25593479
commit 11cdc2a002
6 changed files with 53 additions and 8 deletions

View 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);

View 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)
{

View 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

View 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")
{

View 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 :
/**

View 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