Revision: 16265
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16265
Author:   campbellbarton
Date:     2008-08-27 05:34:53 +0200 (Wed, 27 Aug 2008)

Log Message:
-----------
get/set Angular velocity for KX_GameObjects python api and for the AddObject 
actuator.
Needed so objects created in an explosion could start spinning without having 
motion actuators and collision sensors on each item.

Modified Paths:
--------------
    trunk/blender/source/blender/makesdna/DNA_actuator_types.h
    trunk/blender/source/blender/src/buttons_logic.c
    trunk/blender/source/gameengine/Converter/KX_ConvertActuators.cpp
    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/Ketsji/KX_SCA_AddObjectActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h
    trunk/blender/source/gameengine/PyDoc/KX_GameObject.py
    trunk/blender/source/gameengine/PyDoc/KX_SCA_AddObjectActuator.py

Modified: trunk/blender/source/blender/makesdna/DNA_actuator_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_actuator_types.h  2008-08-27 
01:03:55 UTC (rev 16264)
+++ trunk/blender/source/blender/makesdna/DNA_actuator_types.h  2008-08-27 
03:34:53 UTC (rev 16265)
@@ -81,7 +81,9 @@
        struct Mesh *me;
        char name[32];
        float linVelocity[3]; /* initial lin. velocity on creation */
-       short localflag; /* flag for the lin. vel: apply locally   */
+       float angVelocity[3]; /* initial ang. velocity on creation */
+       float pad;
+       short localflag; /* flag for the lin & ang. vel: apply locally   */
        short dyn_operation;
 } bEditObjectActuator;
 
@@ -384,6 +386,9 @@
 #define ACT_EDOB_TRACK_TO              3
 #define ACT_EDOB_DYNAMICS              4
 
+/* editObjectActuator->localflag */
+#define ACT_EDOB_LOCAL_LINV            2
+#define ACT_EDOB_LOCAL_ANGV            4
 
 
 /* editObjectActuator->flag */

Modified: trunk/blender/source/blender/src/buttons_logic.c
===================================================================
--- trunk/blender/source/blender/src/buttons_logic.c    2008-08-27 01:03:55 UTC 
(rev 16264)
+++ trunk/blender/source/blender/src/buttons_logic.c    2008-08-27 03:34:53 UTC 
(rev 16265)
@@ -2022,7 +2022,7 @@
 
                if(eoa->type==ACT_EDOB_ADD_OBJECT) {
                        int wval; /* just a temp width */
-                       ysize = 72;
+                       ysize = 92;
                        glRects(xco, yco-ysize, xco+width, yco);
                        uiEmboss((float)xco, (float)yco-ysize, 
(float)xco+width, (float)yco, 1);
         
@@ -2042,9 +2042,27 @@
                        uiDefButF(block, NUM, 0, "",            xco+45+2*wval, 
yco-68, wval, 19,
                                         eoa->linVelocity+2, -100.0, 100.0, 10, 
0,
                                         "Velocity upon creation, z 
component.");
-                       uiDefButBitS(block, TOG, 2, 0, "L", xco+45+3*wval, 
yco-68, 15, 19,
+                       uiDefButBitS(block, TOG, ACT_EDOB_LOCAL_LINV, 0, "L", 
xco+45+3*wval, yco-68, 15, 19,
                                         &eoa->localflag, 0.0, 0.0, 0, 0,
                                         "Apply the transformation locally");
+                       
+                       
+                       uiDefBut(block, LABEL, 0, "AngV",       xco,           
yco-90,   45, 19,
+                                        NULL, 0, 0, 0, 0,
+                                        "Angular velocity upon creation.");
+                       uiDefButF(block, NUM, 0, "",            xco+45,        
yco-90, wval, 19,
+                                        eoa->angVelocity, -10000.0, 10000.0, 
10, 0,
+                                        "Angular velocity upon creation, x 
component.");
+                       uiDefButF(block, NUM, 0, "",            xco+45+wval,   
yco-90, wval, 19,
+                                        eoa->angVelocity+1, -10000.0, 10000.0, 
10, 0,
+                                        "Angular velocity upon creation, y 
component.");
+                       uiDefButF(block, NUM, 0, "",            xco+45+2*wval, 
yco-90, wval, 19,
+                                        eoa->angVelocity+2, -10000.0, 10000.0, 
10, 0,
+                                        "Angular velocity upon creation, z 
component.");
+                       uiDefButBitS(block, TOG, ACT_EDOB_LOCAL_ANGV, 0, "L", 
xco+45+3*wval, yco-90, 15, 19,
+                                        &eoa->localflag, 0.0, 0.0, 0, 0,
+                                        "Apply the rotation locally");
+                                        
 
                }
                else if(eoa->type==ACT_EDOB_END_OBJECT) {

Modified: trunk/blender/source/gameengine/Converter/KX_ConvertActuators.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/KX_ConvertActuators.cpp   
2008-08-27 01:03:55 UTC (rev 16264)
+++ trunk/blender/source/gameengine/Converter/KX_ConvertActuators.cpp   
2008-08-27 03:34:53 UTC (rev 16265)
@@ -573,10 +573,16 @@
                                                                originalval = 
converter->FindGameObject(editobact->ob);
                                                        }
                                                }
-                                               MT_Vector3 linvelvec ( 
KX_BLENDERTRUNC(editobact->linVelocity[0]),
+                                               MT_Vector3 linvelvec (
+                                                       
KX_BLENDERTRUNC(editobact->linVelocity[0]),
                                                        
KX_BLENDERTRUNC(editobact->linVelocity[1]),
                                                        
KX_BLENDERTRUNC(editobact->linVelocity[2]));
-                                                       
+                                               
+                                               MT_Vector3 angvelvec (
+                                                       
KX_BLENDERTRUNC(editobact->angVelocity[0]),
+                                                       
KX_BLENDERTRUNC(editobact->angVelocity[1]),
+                                                       
KX_BLENDERTRUNC(editobact->angVelocity[2]));
+                                               
                                                KX_SCA_AddObjectActuator* 
tmpaddact = 
                                                        new 
KX_SCA_AddObjectActuator(
                                                                gameobj, 
@@ -584,7 +590,9 @@
                                                                editobact->time,
                                                                scene,
                                                                
linvelvec.getValue(),
-                                                               
editobact->localflag!=0
+                                                               
(editobact->localflag & ACT_EDOB_LOCAL_LINV)!=0,
+                                                               
angvelvec.getValue(),
+                                                               
(editobact->localflag & ACT_EDOB_LOCAL_ANGV)!=0
                                                                );
                                                                
                                                                //editobact->ob 
to gameobj

Modified: trunk/blender/source/gameengine/Expressions/PyObjectPlus.h
===================================================================
--- trunk/blender/source/gameengine/Expressions/PyObjectPlus.h  2008-08-27 
01:03:55 UTC (rev 16264)
+++ trunk/blender/source/gameengine/Expressions/PyObjectPlus.h  2008-08-27 
03:34:53 UTC (rev 16265)
@@ -102,6 +102,12 @@
                return ((class_name*) self)->Py##method_name(self, args, kwds); 
        \
        }; \
 
+#define KX_PYMETHOD_VARARGS(class_name, method_name)                   \
+       PyObject* Py##method_name(PyObject* self, PyObject* args); \
+       static PyObject* sPy##method_name( PyObject* self, PyObject* args) { \
+               return ((class_name*) self)->Py##method_name(self, args);       
        \
+       }; \
+
 #define KX_PYMETHOD_NOARGS(class_name, method_name)                    \
        PyObject* Py##method_name(PyObject* self); \
        static PyObject* sPy##method_name( PyObject* self) { \

Modified: trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp    2008-08-27 
01:03:55 UTC (rev 16264)
+++ trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp    2008-08-27 
03:34:53 UTC (rev 16265)
@@ -885,6 +885,8 @@
        {"setPosition", (PyCFunction) KX_GameObject::sPySetPosition, METH_O},
        {"getLinearVelocity", (PyCFunction) 
KX_GameObject::sPyGetLinearVelocity, METH_VARARGS},
        {"setLinearVelocity", (PyCFunction) 
KX_GameObject::sPySetLinearVelocity, METH_VARARGS},
+       {"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},
@@ -1146,9 +1148,7 @@
 }
 
 
-PyObject* KX_GameObject::PyGetLinearVelocity(PyObject* self, 
-                                                                               
         PyObject* args, 
-                                                                               
         PyObject* kwds)
+PyObject* KX_GameObject::PyGetLinearVelocity(PyObject* self, PyObject* args)
 {
        // only can get the velocity if we have a physics object connected to 
us...
        int local = 0;
@@ -1162,9 +1162,7 @@
        }
 }
 
-PyObject* KX_GameObject::PySetLinearVelocity(PyObject* self, 
-                                                                               
         PyObject* args, 
-                                                                               
         PyObject* kwds)
+PyObject* KX_GameObject::PySetLinearVelocity(PyObject* self, PyObject* args)
 {
        int local = 0;
        PyObject* pyvect;
@@ -1179,6 +1177,35 @@
        return NULL;
 }
 
+PyObject* KX_GameObject::PyGetAngularVelocity(PyObject* self, PyObject* args)
+{
+       // only can get the velocity if we have a physics object connected to 
us...
+       int local = 0;
+       if (PyArg_ParseTuple(args,"|i",&local))
+       {
+               return PyObjectFrom(GetAngularVelocity((local!=0)));
+       }
+       else
+       {
+               return NULL;
+       }
+}
+
+PyObject* KX_GameObject::PySetAngularVelocity(PyObject* self, PyObject* args)
+{
+       int local = 0;
+       PyObject* pyvect;
+       
+       if (PyArg_ParseTuple(args,"O|i",&pyvect,&local)) {
+               MT_Vector3 velocity;
+               if (PyVecTo(pyvect, velocity)) {
+                       setAngularVelocity(velocity, (local!=0));
+                       Py_RETURN_NONE;
+               }
+       }
+       return NULL;
+}
+
 PyObject* KX_GameObject::PySetVisible(PyObject* self, PyObject* value)
 {
        int visible = PyInt_AsLong(value);
@@ -1228,9 +1255,7 @@
 
 
 
-PyObject* KX_GameObject::PyGetVelocity(PyObject* self, 
-                                                                          
PyObject* args, 
-                                                                          
PyObject* kwds)
+PyObject* KX_GameObject::PyGetVelocity(PyObject* self, PyObject* args)
 {
        // only can get the velocity if we have a physics object connected to 
us...
        MT_Vector3 velocity(0.0,0.0,0.0);
@@ -1362,9 +1387,7 @@
        return list;
 }
 
-PyObject* KX_GameObject::PyGetMesh(PyObject* self, 
-                                                                  PyObject* 
args, 
-                                                                  PyObject* 
kwds)
+PyObject* KX_GameObject::PyGetMesh(PyObject* self, PyObject* args)
 {
        int mesh = 0;
 
@@ -1404,9 +1427,7 @@
 
 
 
-PyObject* KX_GameObject::PyApplyImpulse(PyObject* self, 
-                                                                               
PyObject* args, 
-                                                                               
PyObject* kwds)
+PyObject* KX_GameObject::PyApplyImpulse(PyObject* self, PyObject* args)
 {
        PyObject* pyattach;
        PyObject* pyimpulse;
@@ -1477,9 +1498,7 @@
        return NULL;
 }
 
-PyObject* KX_GameObject::PyAlignAxisToVect(PyObject* self, 
-                                                                               
  PyObject* args, 
-                                                                               
  PyObject* kwds)
+PyObject* KX_GameObject::PyAlignAxisToVect(PyObject* self, PyObject* args)
 {
        PyObject* pyvect;
        int axis = 2; //z axis is the default

Modified: trunk/blender/source/gameengine/Ketsji/KX_GameObject.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_GameObject.h      2008-08-27 
01:03:55 UTC (rev 16264)
+++ trunk/blender/source/gameengine/Ketsji/KX_GameObject.h      2008-08-27 
03:34:53 UTC (rev 16265)
@@ -726,9 +726,11 @@
 
        KX_PYMETHOD_NOARGS(KX_GameObject,GetPosition);
        KX_PYMETHOD_O(KX_GameObject,SetPosition);
-       KX_PYMETHOD(KX_GameObject,GetLinearVelocity);
-       KX_PYMETHOD(KX_GameObject,SetLinearVelocity);
-       KX_PYMETHOD(KX_GameObject,GetVelocity);
+       KX_PYMETHOD_VARARGS(KX_GameObject,GetLinearVelocity);
+       KX_PYMETHOD_VARARGS(KX_GameObject,SetLinearVelocity);
+       KX_PYMETHOD_VARARGS(KX_GameObject,GetAngularVelocity);
+       KX_PYMETHOD_VARARGS(KX_GameObject,SetAngularVelocity);
+       KX_PYMETHOD_VARARGS(KX_GameObject,GetVelocity);
        KX_PYMETHOD_NOARGS(KX_GameObject,GetMass);
        KX_PYMETHOD_NOARGS(KX_GameObject,GetReactionForce);
        KX_PYMETHOD_NOARGS(KX_GameObject,GetOrientation);
@@ -737,20 +739,20 @@
        KX_PYMETHOD_O(KX_GameObject,SetVisible);
        KX_PYMETHOD_NOARGS(KX_GameObject,GetState);
        KX_PYMETHOD_O(KX_GameObject,SetState);
-       KX_PYMETHOD(KX_GameObject,AlignAxisToVect);
+       KX_PYMETHOD_VARARGS(KX_GameObject,AlignAxisToVect);
        KX_PYMETHOD_O(KX_GameObject,GetAxisVect);
        KX_PYMETHOD_NOARGS(KX_GameObject,SuspendDynamics);
        KX_PYMETHOD_NOARGS(KX_GameObject,RestoreDynamics);
        KX_PYMETHOD_NOARGS(KX_GameObject,EnableRigidBody);
        KX_PYMETHOD_NOARGS(KX_GameObject,DisableRigidBody);
-       KX_PYMETHOD(KX_GameObject,ApplyImpulse);
+       KX_PYMETHOD_VARARGS(KX_GameObject,ApplyImpulse);
        KX_PYMETHOD_O(KX_GameObject,SetCollisionMargin);
        KX_PYMETHOD_NOARGS(KX_GameObject,GetParent);
        KX_PYMETHOD_O(KX_GameObject,SetParent);
        KX_PYMETHOD_NOARGS(KX_GameObject,RemoveParent);
        KX_PYMETHOD_NOARGS(KX_GameObject,GetChildren);  

@@ 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