1 #include <msp/datafile/collection.h>
2 #include <msp/fs/utils.h>
3 #include <msp/strings/format.h>
5 #include "objectinstance.h"
6 #include "occludedscene.h"
7 #include "orderedscene.h"
10 #include "simplescene.h"
11 #include "zsortedscene.h"
18 Scene::GenericLoader::TypeRegistry &Scene::get_scene_registry()
20 static Scene::GenericLoader::TypeRegistry registry;
21 static bool initialized = false;
25 register_type<SimpleScene>("simple");
26 register_type<ZSortedScene>("zsorted");
27 register_type<OrderedScene>("ordered");
28 register_type<OccludedScene>("occluded");
34 unsigned Scene::Loader::inline_counter = 0;
36 Scene::Loader::Loader(Scene &s, Collection &c, ContentMap *m):
37 DataFile::CollectionObjectLoader<Scene>(s, &c),
40 add("object", &Loader::object);
41 add("object", &Loader::object_tagged);
42 add("scene", &Loader::scene);
43 add("scene", &Loader::scene_inline);
46 void Scene::Loader::object(const string &n)
48 object_tagged(n, string());
51 void Scene::Loader::object_tagged(const string &n, const string &t)
53 RefPtr<ObjectInstance> inst = new ObjectInstance(get_collection().get<GL::Object>(n));
55 get_collection().add(format("_scene_object_%d.inst", ++inline_counter), inst.get());
56 if(content && !t.empty())
57 (*content)[t] = inst.get();
58 obj.add(*inst.release());
61 void Scene::Loader::scene(const string &n)
63 obj.add(get_collection().get<Scene>(n));
66 void Scene::Loader::scene_inline()
68 GenericLoader ldr(get_collection());
70 Scene *scene = ldr.store_object(get_collection(), format("_scene_%d.scene", ++inline_counter));