Revision: 16450
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16450
Author:   ben2610
Date:     2008-09-10 00:40:10 +0200 (Wed, 10 Sep 2008)

Log Message:
-----------
BGE bug #17549: fix crash on removeParent() with static mesh. Fix scaling bug 
on setParent(). Add python setWorldPosition() to allow setting object position 
in world coordinate regardless if it is a root or a child object.

Modified Paths:
--------------
    trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
    trunk/blender/source/gameengine/Ketsji/KX_GameObject.h
    trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
    trunk/blender/source/gameengine/PyDoc/KX_GameObject.py

Modified: trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp    2008-09-09 
21:46:19 UTC (rev 16449)
+++ trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp    2008-09-09 
22:40:10 UTC (rev 16450)
@@ -235,11 +235,12 @@
                        m_pPhysicsController1->SuspendDynamics(true);
                }
                // Set us to our new scale, position, and orientation
-               scale1[0] = scale1[0]/scale2[0];
-               scale1[1] = scale1[1]/scale2[1];
-               scale1[2] = scale1[2]/scale2[2];
+               scale2[0] = 1.0/scale2[0];
+               scale2[1] = 1.0/scale2[1];
+               scale2[2] = 1.0/scale2[2];
+               scale1 = scale1 * scale2;
                MT_Matrix3x3 invori = obj->NodeGetWorldOrientation().inverse();
-               MT_Vector3 newpos = 
invori*(NodeGetWorldPosition()-obj->NodeGetWorldPosition())*scale1;
+               MT_Vector3 newpos = 
invori*(NodeGetWorldPosition()-obj->NodeGetWorldPosition())*scale2;
 
                NodeSetLocalScale(scale1);
                NodeSetLocalPosition(MT_Point3(newpos[0],newpos[1],newpos[2]));
@@ -914,6 +915,7 @@
 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},
        {"getLinearVelocity", (PyCFunction) 
KX_GameObject::sPyGetLinearVelocity, METH_VARARGS},
        {"setLinearVelocity", (PyCFunction) 
KX_GameObject::sPySetLinearVelocity, METH_VARARGS},
        {"getAngularVelocity", (PyCFunction) 
KX_GameObject::sPyGetAngularVelocity, METH_VARARGS},
@@ -1576,6 +1578,19 @@
        return NULL;
 }
 
+PyObject* KX_GameObject::PySetWorldPosition(PyObject* self, PyObject* value)
+{
+       MT_Point3 pos;
+       if (PyVecTo(value, pos))
+       {
+               NodeSetWorldPosition(pos);
+               NodeUpdateGS(0.f,true);
+               Py_RETURN_NONE;
+       }
+
+       return NULL;
+}
+
 PyObject* KX_GameObject::PyGetPhysicsId(PyObject* self)
 {
        KX_IPhysicsController* ctrl = GetPhysicsController();

Modified: trunk/blender/source/gameengine/Ketsji/KX_GameObject.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_GameObject.h      2008-09-09 
21:46:19 UTC (rev 16449)
+++ trunk/blender/source/gameengine/Ketsji/KX_GameObject.h      2008-09-09 
22:40:10 UTC (rev 16450)
@@ -754,6 +754,7 @@
 
        KX_PYMETHOD_NOARGS(KX_GameObject,GetPosition);
        KX_PYMETHOD_O(KX_GameObject,SetPosition);
+       KX_PYMETHOD_O(KX_GameObject,SetWorldPosition);
        KX_PYMETHOD_VARARGS(KX_GameObject,GetLinearVelocity);
        KX_PYMETHOD_VARARGS(KX_GameObject,SetLinearVelocity);
        KX_PYMETHOD_VARARGS(KX_GameObject,GetAngularVelocity);

Modified: 
trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
===================================================================
--- trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp    
2008-09-09 21:46:19 UTC (rev 16449)
+++ trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp    
2008-09-09 22:40:10 UTC (rev 16450)
@@ -452,11 +452,12 @@
        // this function is used when the collisionning group of a controller 
is changed
        // remove and add the collistioning object
        btRigidBody* body = ctrl->GetRigidBody();
-       btVector3 inertia;
+       btVector3 inertia(0.0,0.0,0.0);
 
        m_dynamicsWorld->removeCollisionObject(body);
        body->setCollisionFlags(newCollisionFlags);
-       body->getCollisionShape()->calculateLocalInertia(newMass, inertia);
+       if (newMass)
+               body->getCollisionShape()->calculateLocalInertia(newMass, 
inertia);
        body->setMassProps(newMass, inertia);
        m_dynamicsWorld->addCollisionObject(body, newCollisionGroup, 
newCollisionMask);
        // to avoid nasty interaction, we must update the property of the 
controller as well

Modified: trunk/blender/source/gameengine/PyDoc/KX_GameObject.py
===================================================================
--- trunk/blender/source/gameengine/PyDoc/KX_GameObject.py      2008-09-09 
21:46:19 UTC (rev 16449)
+++ trunk/blender/source/gameengine/PyDoc/KX_GameObject.py      2008-09-09 
22:40:10 UTC (rev 16450)
@@ -58,9 +58,18 @@
                """
        def setPosition(pos):
                """
-               Sets the game object's position.
+               Sets the game object's position. 
+               Global coordinates for root object, local for child objects.
                
+               
                @type pos: [x, y, z]
+               @param pos: the new position, in local coordinates.
+               """
+       def setWorldPosition(pos):
+               """
+               Sets the game object's position in world coordinates regardless 
if the object is root or child.
+               
+               @type pos: [x, y, z]
                @param pos: the new position, in world coordinates.
                """
        def getPosition():


_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to