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:
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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")
|
||||
{
|
||||
|
||||
@@ -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 :
|
||||
|
||||
/**
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user