BGE: Added 'ghost' arg to KX_GameObject.suspendDynamics() method

The implementation of this 'ghost' argument already existed in the C++
source, but wasn't exposed to Python yet.
This commit is contained in:
Sybren A. Stüvel 2015-05-04 12:04:09 +08:00
parent 62b13c6d07
commit 4e7ef3f5cd
Notes: blender-bot 2023-02-14 09:09:46 +01:00
Referenced by issue #44624, World menu appears in Material node header
Referenced by issue #44605, RGB Curve Node: cursor jumps back (OSX only)
3 changed files with 20 additions and 6 deletions

View File

@ -84,6 +84,8 @@ base class --- :class:`SCA_IObject`
:type: boolean
.. seealso:: :py:meth:`suspendDynamics` and :py:meth:`restoreDynamics` allow you to change the state.
.. attribute:: linearDamping
The object's linear damping, also known as translational damping. Can be set simultaneously with angular damping using the :py:meth:`setDamping` method.
@ -671,13 +673,19 @@ base class --- :class:`SCA_IObject`
:arg angular_damping: Angular ("rotational") damping factor.
:type angular_damping: float ∈ [0, 1]
.. method:: suspendDynamics()
.. method:: suspendDynamics([ghost])
Suspends physics for this object.
:arg ghost: When set to `True`, collisions with the object will be ignored, similar to the "ghost" checkbox in
Blender. When `False` (the default), the object becomes static but still collide with other objects.
:type ghost: bool
.. seealso:: :py:attr:`isSuspendDynamics` allows you to inspect whether the object is in a suspended state.
.. method:: restoreDynamics()
Resumes physics for this object.
Resumes physics for this object. Also reinstates collisions; the object will no longer be a ghost.
.. note::

View File

@ -1907,7 +1907,7 @@ PyMethodDef KX_GameObject::Methods[] = {
{"getReactionForce", (PyCFunction) KX_GameObject::sPyGetReactionForce, METH_NOARGS},
{"alignAxisToVect",(PyCFunction) KX_GameObject::sPyAlignAxisToVect, METH_VARARGS},
{"getAxisVect",(PyCFunction) KX_GameObject::sPyGetAxisVect, METH_O},
{"suspendDynamics", (PyCFunction)KX_GameObject::sPySuspendDynamics,METH_NOARGS},
{"suspendDynamics", (PyCFunction)KX_GameObject::sPySuspendDynamics, METH_VARARGS},
{"restoreDynamics", (PyCFunction)KX_GameObject::sPyRestoreDynamics,METH_NOARGS},
{"enableRigidBody", (PyCFunction)KX_GameObject::sPyEnableRigidBody,METH_NOARGS},
{"disableRigidBody", (PyCFunction)KX_GameObject::sPyDisableRigidBody,METH_NOARGS},
@ -3318,10 +3318,16 @@ PyObject *KX_GameObject::PyApplyImpulse(PyObject *args)
PyObject *KX_GameObject::PySuspendDynamics()
PyObject *KX_GameObject::PySuspendDynamics(PyObject *args)
{
bool ghost = false;
if (!PyArg_ParseTuple(args, "|b", &ghost))
return NULL;
if (GetPhysicsController())
GetPhysicsController()->SuspendDynamics();
GetPhysicsController()->SuspendDynamics(ghost);
Py_RETURN_NONE;
}

View File

@ -1005,7 +1005,7 @@ public:
KX_PYMETHOD_O(KX_GameObject,SetState);
KX_PYMETHOD_VARARGS(KX_GameObject,AlignAxisToVect);
KX_PYMETHOD_O(KX_GameObject,GetAxisVect);
KX_PYMETHOD_NOARGS(KX_GameObject,SuspendDynamics);
KX_PYMETHOD_VARARGS(KX_GameObject,SuspendDynamics);
KX_PYMETHOD_NOARGS(KX_GameObject,RestoreDynamics);
KX_PYMETHOD_NOARGS(KX_GameObject,EnableRigidBody);
KX_PYMETHOD_NOARGS(KX_GameObject,DisableRigidBody);