patch [#31875] Patch to get scene access through a game object
authorCampbell Barton <ideasman42@gmail.com>
Tue, 9 Oct 2012 05:58:09 +0000 (05:58 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Tue, 9 Oct 2012 05:58:09 +0000 (05:58 +0000)
from Jay Parker (battery)

doc/python_api/rst/bge.types.rst
source/gameengine/Ketsji/KX_GameObject.cpp
source/gameengine/Ketsji/KX_GameObject.h

index 6599cfeb2b2d7db5ef476fe2bfe87d51d11eeafa..e628db07e8335c4d18b41c495ebe0f75d32d2454 100644 (file)
@@ -333,7 +333,8 @@ Types
 
    .. attribute:: useContinue
 
 
    .. attribute:: useContinue
 
-      The actions continue option, True or False. When True, the action will always play from where last left off, otherwise negative events to this actuator will reset it to its start frame.
+      The actions continue option, True or False. When True, the action will always play from where last left off,
+      otherwise negative events to this actuator will reset it to its start frame.
 
       :type: boolean
 
 
       :type: boolean
 
@@ -879,7 +880,8 @@ Types
 
    .. note::
       
 
    .. note::
       
-      Calling ANY method or attribute on an object that has been removed from a scene will raise a SystemError, if an object may have been removed since last accessing it use the :data:`invalid` attribute to check.
+      Calling ANY method or attribute on an object that has been removed from a scene will raise a SystemError,
+      if an object may have been removed since last accessing it use the :data:`invalid` attribute to check.
 
    KX_GameObject can be subclassed to extend functionality. For example:
 
 
    KX_GameObject can be subclassed to extend functionality. For example:
 
@@ -999,6 +1001,12 @@ Types
 
       :type: :class:`KX_GameObject` or None
 
 
       :type: :class:`KX_GameObject` or None
 
+   .. attribute:: scene
+
+      The object's scene. (read-only).
+
+      :type: :class:`KX_Scene` or None
+
    .. attribute:: visible
 
       visibility flag.
    .. attribute:: visible
 
       visibility flag.
@@ -4558,7 +4566,9 @@ Types
    
    .. data:: KX_ACT_ARMATURE_RUN
 
    
    .. data:: KX_ACT_ARMATURE_RUN
 
-      Just make sure the armature will be updated on the next graphic frame. This is the only persistent mode of the actuator: it executes automatically once per frame until stopped by a controller
+      Just make sure the armature will be updated on the next graphic frame.
+      This is the only persistent mode of the actuator:
+      it executes automatically once per frame until stopped by a controller
       
       :value: 0
 
       
       :value: 0
 
index cfc7b81bde58d025b2e7db0d9be9146c61d0136e..a8f3c54508ce0b121580a37ebf6e4bac4fdf6064 100644 (file)
@@ -1682,7 +1682,8 @@ PyAttributeDef KX_GameObject::Attributes[] = {
        KX_PYATTRIBUTE_RO_FUNCTION("name",              KX_GameObject, pyattr_get_name),
        KX_PYATTRIBUTE_RO_FUNCTION("parent",    KX_GameObject, pyattr_get_parent),
        KX_PYATTRIBUTE_RO_FUNCTION("members",   KX_GameObject, pyattr_get_instance_objects),
        KX_PYATTRIBUTE_RO_FUNCTION("name",              KX_GameObject, pyattr_get_name),
        KX_PYATTRIBUTE_RO_FUNCTION("parent",    KX_GameObject, pyattr_get_parent),
        KX_PYATTRIBUTE_RO_FUNCTION("members",   KX_GameObject, pyattr_get_instance_objects),
-       KX_PYATTRIBUTE_RO_FUNCTION("group",     KX_GameObject, pyattr_get_dupli_group_object),
+       KX_PYATTRIBUTE_RO_FUNCTION("group",             KX_GameObject, pyattr_get_dupli_group_object),
+       KX_PYATTRIBUTE_RO_FUNCTION("scene",             KX_GameObject, pyattr_get_scene),
        KX_PYATTRIBUTE_RO_FUNCTION("life",              KX_GameObject, pyattr_get_life),
        KX_PYATTRIBUTE_RW_FUNCTION("mass",              KX_GameObject, pyattr_get_mass,         pyattr_set_mass),
        KX_PYATTRIBUTE_RW_FUNCTION("linVelocityMin",            KX_GameObject, pyattr_get_lin_vel_min, pyattr_set_lin_vel_min),
        KX_PYATTRIBUTE_RO_FUNCTION("life",              KX_GameObject, pyattr_get_life),
        KX_PYATTRIBUTE_RW_FUNCTION("mass",              KX_GameObject, pyattr_get_mass,         pyattr_set_mass),
        KX_PYATTRIBUTE_RW_FUNCTION("linVelocityMin",            KX_GameObject, pyattr_get_lin_vel_min, pyattr_set_lin_vel_min),
@@ -1988,6 +1989,17 @@ PyObject *KX_GameObject::pyattr_get_instance_objects(void *self_v, const KX_PYAT
        Py_RETURN_NONE;
 }
 
        Py_RETURN_NONE;
 }
 
+PyObject* KX_GameObject::pyattr_get_scene(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+       KX_GameObject *self = static_cast<KX_GameObject*>(self_v);
+       SG_Node *node = self->GetSGNode();
+       KX_Scene *scene = static_cast<KX_Scene *>(node->GetSGClientInfo());
+       if (scene) {
+               return scene->GetProxy();
+       }
+       Py_RETURN_NONE;
+}
+
 PyObject *KX_GameObject::pyattr_get_dupli_group_object(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
 {
        KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
 PyObject *KX_GameObject::pyattr_get_dupli_group_object(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
 {
        KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
index 4fde0752a130a6abeb7b3203e82241ae22a409de..4fa3472ba103d100810ec46979896b9211a11f8a 100644 (file)
@@ -980,6 +980,7 @@ public:
 
        static PyObject*        pyattr_get_dupli_group_object(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
        static PyObject*        pyattr_get_instance_objects(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
 
        static PyObject*        pyattr_get_dupli_group_object(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
        static PyObject*        pyattr_get_instance_objects(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+       static PyObject*        pyattr_get_scene(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
 
        static PyObject*        pyattr_get_life(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
        static PyObject*        pyattr_get_mass(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
 
        static PyObject*        pyattr_get_life(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
        static PyObject*        pyattr_get_mass(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);