X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=laserbrain_demo;a=blobdiff_plain;f=src%2Fmetascene.cc;h=64946cb551c310c985612325e9529d61ec85300d;hp=66be3ef6f19cc0b7c5bf7939d97181b9918e087b;hb=e12a327cc0b4f1e59f4a66a80b170ec41ce97be6;hpb=fb11663a3654acd0132e71e5652e35b0ea72d544 diff --git a/src/metascene.cc b/src/metascene.cc index 66be3ef..64946cb 100644 --- a/src/metascene.cc +++ b/src/metascene.cc @@ -1,3 +1,13 @@ +/*! \file + * \brief Metascene implementation + * + * Loading starts at `MetaScene::load`, which calls `ts_load` (libtreestore) + * to load the metascene description tree into memory. Then `proc_node` is + * called at the root to recursively process the tree. `scenefile` nodes are + * handed over to `proc_scenefile`, which will trigger scene loading for any + * nodes with a `file` attribute. Scene loading is handled by requesting the + * filename from the scene resource manager, which is of type [SceneSet](\ref SceneSet). + */ #include #include #include @@ -6,6 +16,7 @@ #include "treestore.h" #include "logger.h" #include "app.h" +#include "dbg_gui.h" #if defined(WIN32) || defined(__WIN32__) #include @@ -42,7 +53,6 @@ MetaScene::~MetaScene() delete music; } - bool MetaScene::load(const char *fname) { struct ts_node *root = ts_load(fname); @@ -64,9 +74,33 @@ bool MetaScene::load(const char *fname) void MetaScene::update(float dt) { + bool expanded; + static char text[256]; + if(debug_gui) { + ImGui::Begin("MetaScene nodes", 0, 0); + } + int nscn = scenes.size(); for(int i=0; iname.empty()) { + sprintf(text, "scene %3d", i); + } else { + sprintf(text, "scene %3d: %s", i, scenes[i]->name.c_str()); + } + expanded = parent_expanded = ImGui::TreeNode(text); + } + scenes[i]->update(dt); + + if(debug_gui && expanded) { + ImGui::TreePop(); + } + } + + if(debug_gui) { + ImGui::End(); } } @@ -165,6 +199,9 @@ struct SceneData { std::vector mtledit; }; +/*! Processes a `scenefile` node. And kicks off scene loading (if necessary) by + * calling `SceneSet::get`. + */ static bool proc_scenefile(MetaScene *mscn, struct ts_node *node) { const char *fname = ts_get_attr_str(node, "file"); @@ -218,7 +255,7 @@ static bool proc_scenefile(MetaScene *mscn, struct ts_node *node) fname = namebuf; } - // material edits + // material edits are kept in a list to be applied when the scene has been loaded struct ts_node *child = node->child_list; while(child) { MaterialEdit medit;