Revision: 15227
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15227
Author:   ben2610
Date:     2008-06-14 22:42:15 +0200 (Sat, 14 Jun 2008)

Log Message:
-----------
BGE patch: support Set Scene in BGE. Linked Set Scene should have no name 
conflict in Object, Object data and Action of the main scene to avoid confusion 
in Python scripting. Nested Set Scene are supported. You will need Python 
scripting to create cross references between objects in the main scene and the 
Set (e.g TrackTo actuator)

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_scene.h
    trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp

Modified: trunk/blender/source/blender/blenkernel/BKE_scene.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_scene.h 2008-06-14 20:34:40 UTC 
(rev 15226)
+++ trunk/blender/source/blender/blenkernel/BKE_scene.h 2008-06-14 20:42:15 UTC 
(rev 15227)
@@ -53,7 +53,7 @@
 }
 
 /* note; doesn't work when scene is empty */
-#define SETLOOPER(s, b) sce= s, b= sce->base.first; b; b= 
(b->next?b->next:sce->set?(sce=sce->set)->base.first:NULL)
+#define SETLOOPER(s, b) sce= s, b= (Base*)sce->base.first; b; b= 
(Base*)(b->next?b->next:sce->set?(sce=sce->set)->base.first:NULL)
 
 
 void free_avicodecdata(struct AviCodecData *acd);

Modified: trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp      
2008-06-14 20:34:40 UTC (rev 15226)
+++ trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp      
2008-06-14 20:42:15 UTC (rev 15227)
@@ -88,6 +88,7 @@
 #include "BKE_main.h"
 #include "BKE_global.h"
 #include "BKE_object.h"
+#include "BKE_scene.h"
 #include "BL_SkinMeshObject.h"
 #include "BL_SkinDeformer.h"
 #include "BL_MeshDeformer.h"
@@ -1808,6 +1809,9 @@
 {      
 
        Scene *blenderscene = GetSceneForName(maggie, scenename);
+       // for SETLOOPER
+       Scene *sce;
+       Base *base;
 
        // Get the frame settings of the canvas.
        // Get the aspect ratio of the canvas as designed by the user.
@@ -1881,9 +1885,11 @@
        }
 
        SetDefaultFaceType(blenderscene);
-       
-       Base *base = static_cast<Base*>(blenderscene->base.first);
-       while(base)
+       // Let's support scene set.
+       // Beware of name conflict in linked data, it will not crash but will 
create confusion
+       // in Python scripting and in certain actuators (replace mesh). Linked 
scene *should* have
+       // no conflicting name for Object, Object data and Action.
+       for (SETLOOPER(blenderscene, base))
        {
                Object* blenderobject = base->object;
                KX_GameObject* gameobj = gameobject_from_blenderobject(
@@ -2038,7 +2044,6 @@
                if (gameobj)
                        gameobj->Release();
 
-               base = base->next;
        }
 
        if (blenderscene->camera) {
@@ -2048,7 +2053,7 @@
        }
 
        //      Set up armatures
-       for (base = static_cast<Base*>(blenderscene->base.first); base; 
base=base->next){
+       for(SETLOOPER(blenderscene, base)){
                if (base->object->type==OB_MESH){
                        Mesh *me = (Mesh*)base->object->data;
        


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

Reply via email to