Revision: 19401
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19401
Author:   campbellbarton
Date:     2009-03-24 20:37:17 +0100 (Tue, 24 Mar 2009)

Log Message:
-----------
Use Benoits attributes in KX_GameObject.

Deprecated..
getPosition, setPosition, getOrientation, setOrientation, getState, setState, 
getParent, getVisible, getMass

* swapped set/get to get/set in KX_PYATTRIBUTE_RW_FUNCTION macro to match 
pythons getsetattrs.
* deprecation warnings in the api and notes in epydocs.
* added 'state' attribute
* gameob.mass = 10 # now works because its not checking only for float values.
* dir(gameob) # includes attributes now

Modified Paths:
--------------
    trunk/blender/source/gameengine/Expressions/PyObjectPlus.h
    trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
    trunk/blender/source/gameengine/Ketsji/KX_GameObject.h
    trunk/blender/source/gameengine/PyDoc/KX_GameObject.py

Modified: trunk/blender/source/gameengine/Expressions/PyObjectPlus.h
===================================================================
--- trunk/blender/source/gameengine/Expressions/PyObjectPlus.h  2009-03-24 
18:51:21 UTC (rev 19400)
+++ trunk/blender/source/gameengine/Expressions/PyObjectPlus.h  2009-03-24 
19:37:17 UTC (rev 19401)
@@ -327,11 +327,11 @@
 #define KX_PYATTRIBUTE_STRING_RO(name,object,field) \
        { name, KX_PYATTRIBUTE_TYPE_STRING, KX_PYATTRIBUTE_RO, 0, 0, 0.f, 0.f, 
false, offsetof(object,field), 0, 1 , NULL, NULL, NULL, {NULL, NULL, NULL, 
NULL, &((object *)0)->field} }
 
-#define KX_PYATTRIBUTE_RW_FUNCTION(name,object,setfunction,getfunction) \
+#define KX_PYATTRIBUTE_RW_FUNCTION(name,object,getfunction,setfunction) \
        { name, KX_PYATTRIBUTE_TYPE_FUNCTION, KX_PYATTRIBUTE_RW, 0, 0, 0.f, 
0.f, false, 0, 0, 1, NULL, &object::setfunction, &object::getfunction, {NULL, 
NULL, NULL, NULL, NULL} }
 #define KX_PYATTRIBUTE_RO_FUNCTION(name,object,getfunction) \
        { name, KX_PYATTRIBUTE_TYPE_FUNCTION, KX_PYATTRIBUTE_RO, 0, 0, 0.f, 
0.f, false, 0, 0, 1, NULL, NULL, &object::getfunction, {NULL, NULL, NULL, NULL, 
NULL} }
-#define 
KX_PYATTRIBUTE_ARRAY_RW_FUNCTION(name,object,length,setfunction,getfunction) \
+#define 
KX_PYATTRIBUTE_ARRAY_RW_FUNCTION(name,object,length,getfunction,setfunction) \
        { name, KX_PYATTRIBUTE_TYPE_FUNCTION, KX_PYATTRIBUTE_RW, 0, 0, 0.f, 
0,f, false, 0, 0, length, NULL, &object::setfunction, &object::getfunction, 
{NULL, NULL, NULL, NULL, NULL} }
 #define KX_PYATTRIBUTE_ARRAY_RO_FUNCTION(name,object,length,getfunction) \
        { name, KX_PYATTRIBUTE_TYPE_FUNCTION, KX_PYATTRIBUTE_RO, 0, 0, 0.f, 
0,f, false, 0, 0, length, NULL, NULL, &object::getfunction, {NULL, NULL, NULL, 
NULL, NULL} }

Modified: trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp    2009-03-24 
18:51:21 UTC (rev 19400)
+++ trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp    2009-03-24 
19:37:17 UTC (rev 19401)
@@ -984,12 +984,7 @@
 
 /* ------- python stuff ---------------------------------------------------*/
 
-
-
-
 PyMethodDef KX_GameObject::Methods[] = {
-       {"getPosition", (PyCFunction) KX_GameObject::sPyGetPosition, 
METH_NOARGS},
-       {"setPosition", (PyCFunction) KX_GameObject::sPySetPosition, METH_O},
        {"setWorldPosition", (PyCFunction) KX_GameObject::sPySetWorldPosition, 
METH_O},
        {"applyForce", (PyCFunction)    KX_GameObject::sPyApplyForce, 
METH_VARARGS},
        {"applyTorque", (PyCFunction)   KX_GameObject::sPyApplyTorque, 
METH_VARARGS},
@@ -1000,14 +995,7 @@
        {"getAngularVelocity", (PyCFunction) 
KX_GameObject::sPyGetAngularVelocity, METH_VARARGS},
        {"setAngularVelocity", (PyCFunction) 
KX_GameObject::sPySetAngularVelocity, METH_VARARGS},
        {"getVelocity", (PyCFunction) KX_GameObject::sPyGetVelocity, 
METH_VARARGS},
-       {"getMass", (PyCFunction) KX_GameObject::sPyGetMass, METH_NOARGS},
        {"getReactionForce", (PyCFunction) KX_GameObject::sPyGetReactionForce, 
METH_NOARGS},
-       {"getOrientation", (PyCFunction) KX_GameObject::sPyGetOrientation, 
METH_NOARGS},
-       {"setOrientation", (PyCFunction) KX_GameObject::sPySetOrientation, 
METH_O},
-       {"getVisible",(PyCFunction) KX_GameObject::sPyGetVisible, METH_NOARGS},
-       {"setVisible",(PyCFunction) KX_GameObject::sPySetVisible, METH_VARARGS},
-       {"getState",(PyCFunction) KX_GameObject::sPyGetState, METH_NOARGS},
-       {"setState",(PyCFunction) KX_GameObject::sPySetState, METH_O},
        {"alignAxisToVect",(PyCFunction) KX_GameObject::sPyAlignAxisToVect, 
METH_VARARGS},
        {"getAxisVect",(PyCFunction) KX_GameObject::sPyGetAxisVect, METH_O},
        {"suspendDynamics", 
(PyCFunction)KX_GameObject::sPySuspendDynamics,METH_NOARGS},
@@ -1016,8 +1004,8 @@
        {"disableRigidBody", 
(PyCFunction)KX_GameObject::sPyDisableRigidBody,METH_NOARGS},
        {"applyImpulse", (PyCFunction) KX_GameObject::sPyApplyImpulse, 
METH_VARARGS},
        {"setCollisionMargin", (PyCFunction) 
KX_GameObject::sPySetCollisionMargin, METH_O},
-       {"getParent", (PyCFunction)KX_GameObject::sPyGetParent,METH_NOARGS},
        {"setParent", (PyCFunction)KX_GameObject::sPySetParent,METH_O},
+       {"setVisible",(PyCFunction) KX_GameObject::sPySetVisible, METH_VARARGS},
        {"removeParent", 
(PyCFunction)KX_GameObject::sPyRemoveParent,METH_NOARGS},
        {"getChildren", (PyCFunction)KX_GameObject::sPyGetChildren,METH_NOARGS},
        {"getChildrenRecursive", 
(PyCFunction)KX_GameObject::sPyGetChildrenRecursive,METH_NOARGS},
@@ -1026,15 +1014,36 @@
        {"getPropertyNames", 
(PyCFunction)KX_GameObject::sPyGetPropertyNames,METH_NOARGS},
        {"replaceMesh",(PyCFunction) KX_GameObject::sPyReplaceMesh, METH_O},
        {"endObject",(PyCFunction) KX_GameObject::sPyEndObject, METH_NOARGS},
+       
        KX_PYMETHODTABLE(KX_GameObject, rayCastTo),
        KX_PYMETHODTABLE(KX_GameObject, rayCast),
        KX_PYMETHODTABLE_O(KX_GameObject, getDistanceTo),
        KX_PYMETHODTABLE_O(KX_GameObject, getVectTo),
+       
+       // deprecated
+       {"getPosition", (PyCFunction) KX_GameObject::sPyGetPosition, 
METH_NOARGS},
+       {"setPosition", (PyCFunction) KX_GameObject::sPySetPosition, METH_O},
+       {"getOrientation", (PyCFunction) KX_GameObject::sPyGetOrientation, 
METH_NOARGS},
+       {"setOrientation", (PyCFunction) KX_GameObject::sPySetOrientation, 
METH_O},
+       {"getState",(PyCFunction) KX_GameObject::sPyGetState, METH_NOARGS},
+       {"setState",(PyCFunction) KX_GameObject::sPySetState, METH_O},
+       {"getParent", (PyCFunction)KX_GameObject::sPyGetParent,METH_NOARGS},
+       {"getVisible",(PyCFunction) KX_GameObject::sPyGetVisible, METH_NOARGS},
+       {"getMass", (PyCFunction) KX_GameObject::sPyGetMass, METH_NOARGS},
        {NULL,NULL} //Sentinel
 };
 
 PyAttributeDef KX_GameObject::Attributes[] = {
-       { NULL }        //Sentinel
+       KX_PYATTRIBUTE_RO_FUNCTION("name",              KX_GameObject, 
pyattr_get_name),
+       KX_PYATTRIBUTE_RO_FUNCTION("parent",    KX_GameObject, 
pyattr_get_parent),
+       KX_PYATTRIBUTE_RW_FUNCTION("mass",              KX_GameObject, 
pyattr_get_mass,         pyattr_set_mass),
+       KX_PYATTRIBUTE_RW_FUNCTION("visible",   KX_GameObject, 
pyattr_get_visible,      pyattr_set_visible),
+       KX_PYATTRIBUTE_RW_FUNCTION("position",  KX_GameObject, 
pyattr_get_position,     pyattr_set_position),
+       
KX_PYATTRIBUTE_RW_FUNCTION("orientation",KX_GameObject,pyattr_get_orientation,pyattr_set_orientation),
+       KX_PYATTRIBUTE_RW_FUNCTION("scaling",   KX_GameObject, 
pyattr_get_scaling,      pyattr_set_scaling),
+       KX_PYATTRIBUTE_RW_FUNCTION("timeOffset",KX_GameObject, 
pyattr_get_timeOffset,pyattr_set_timeOffset),
+       KX_PYATTRIBUTE_RW_FUNCTION("state",             KX_GameObject, 
pyattr_get_state,        pyattr_set_state),
+       {NULL} //Sentinel
 };
 
 
@@ -1089,6 +1098,7 @@
 
 PyObject* KX_GameObject::PyGetPosition(PyObject* self)
 {
+       ShowDeprecationWarning("getPosition()", "the position property");
        return PyObjectFrom(NodeGetWorldPosition());
 }
 
@@ -1122,177 +1132,231 @@
                NULL
 };
 
+PyObject* KX_GameObject::pyattr_get_name(void *self_v, const 
KX_PYATTRIBUTE_DEF *attrdef)
+{
+       KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+       return PyString_FromString(self->GetName().ReadPtr());
+}
 
+PyObject* KX_GameObject::pyattr_get_parent(void *self_v, const 
KX_PYATTRIBUTE_DEF *attrdef)
+{
+       KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+       KX_GameObject* parent = self->GetParent();
+       if (parent)
+               return parent->AddRef();
+       Py_RETURN_NONE;
+}
 
+PyObject* KX_GameObject::pyattr_get_mass(void *self_v, const 
KX_PYATTRIBUTE_DEF *attrdef)
+{
+       KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+       KX_IPhysicsController *spc = self->GetPhysicsController();
+       return PyFloat_FromDouble(spc ? spc->GetMass() : 0.0f);
+}
 
-PyObject* KX_GameObject::_getattr(const char *attr)
+int KX_GameObject::pyattr_set_mass(void *self_v, const KX_PYATTRIBUTE_DEF 
*attrdef, PyObject *value)
 {
-       if (m_pPhysicsController1)
-       {
-               if (!strcmp(attr, "mass"))
-                       return 
PyFloat_FromDouble(m_pPhysicsController1->GetMass());
+       KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+       KX_IPhysicsController *spc = self->GetPhysicsController();
+       MT_Scalar val = PyFloat_AsDouble(value);
+       if (val < 0.0f) { /* also accounts for non float */
+               PyErr_SetString(PyExc_AttributeError, "expected a float zero or 
above");
+               return 1;
        }
 
-       if (!strcmp(attr, "parent"))
-       {       
-               KX_GameObject* parent = GetParent();
-               if (parent)
-                       return parent->AddRef();
-               Py_RETURN_NONE;
+       if (spc)
+               spc->SetMass(val);
+
+       return 0;
+}
+
+PyObject* KX_GameObject::pyattr_get_visible(void *self_v, const 
KX_PYATTRIBUTE_DEF *attrdef)
+{
+       KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+       return PyBool_FromLong(self->GetVisible());
+}
+
+int KX_GameObject::pyattr_set_visible(void *self_v, const KX_PYATTRIBUTE_DEF 
*attrdef, PyObject *value)
+{
+       KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+       int param = PyObject_IsTrue( value );
+       if (param == -1) {
+               PyErr_SetString(PyExc_AttributeError, "expected True or False");
+               return 1;
        }
 
-       if (!strcmp(attr, "visible"))
-               return PyInt_FromLong(m_bVisible);
+       self->SetVisible(param, false);
+       self->UpdateBuckets(false);
+       return 0;
+}
+
+PyObject* KX_GameObject::pyattr_get_position(void *self_v, const 
KX_PYATTRIBUTE_DEF *attrdef)
+{
+       KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+       return PyObjectFrom(self->NodeGetWorldPosition());
+}
+
+int KX_GameObject::pyattr_set_position(void *self_v, const KX_PYATTRIBUTE_DEF 
*attrdef, PyObject *value)
+{
+       KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+       MT_Point3 pos;
+       if (!PyVecTo(value, pos))
+               return 1;
        
-       if (!strcmp(attr, "position"))
-               return PyObjectFrom(NodeGetWorldPosition());
-       
-       if (!strcmp(attr, "orientation"))
-               return PyObjectFrom(NodeGetWorldOrientation());
-       
-       if (!strcmp(attr, "scaling"))
-               return PyObjectFrom(NodeGetWorldScaling());
-               
-       if (!strcmp(attr, "name"))
-               return PyString_FromString(m_name.ReadPtr());
-       
-       if (!strcmp(attr, "timeOffset"))
-       {
-               if (m_pSGNode->GetSGParent()->IsSlowParent()) {
-                       return 
PyFloat_FromDouble(static_cast<KX_SlowParentRelation 
*>(m_pSGNode->GetSGParent()->GetParentRelation())->GetTimeOffset());
-               } else {
-                       return PyFloat_FromDouble(0.0);
-               }
-       }
-       
-       
-       _getattr_up(SCA_IObject);
+       self->NodeSetLocalPosition(pos);
+       self->NodeUpdateGS(0.f,true);
+       return 0;
 }
 
-int KX_GameObject::_setattr(const char *attr, PyObject *value) // _setattr 
method
+
+PyObject* KX_GameObject::pyattr_get_orientation(void *self_v, const 
KX_PYATTRIBUTE_DEF *attrdef)
 {
-       
-       if (!strcmp(attr, "parent")) {

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to