// Called before quitting bool j1App::CleanUp() { PERF_START(ptimer); bool ret = true; p2List_item<j1Module*>* item; item = modules.end; while(item != NULL && ret == true) { ret = item->data->CleanUp(); item = item->prev; } PERF_PEEK(ptimer); return ret; }
// Called before the first frame bool j1App::Start() { PERF_START(ptimer); bool ret = true; p2List_item<j1Module*>* item; item = modules.start; while(item != NULL && ret == true) { ret = item->data->Start(); item = item->next; } startup_time.Start(); PERF_PEEK(ptimer); return ret; }
// Called before render is available bool j1App::Awake() { PERF_START(ptimer); pugi::xml_document config_file; pugi::xml_node config; pugi::xml_node app_config; bool ret = false; config = LoadConfig(config_file); if(config.empty() == false) { // self-config ret = true; app_config = config.child("app"); title.create(app_config.child("title").child_value()); organization.create(app_config.child("organization").child_value()); int cap = app_config.attribute("framerate_cap").as_int(-1); if(cap > 0) { capped_ms = 1000 / cap; } } if(ret == true) { p2List_item<j1Module*>* item; item = modules.start; while(item != NULL && ret == true) { ret = item->data->Awake(config.child(item->data->name.GetString())); item = item->next; } } PERF_PEEK(ptimer); return ret; }
// Constructor j1App::j1App(int argc, char* args[]) : argc(argc), args(args) { PERF_START(ptimer); input = new j1Input(); win = new j1Window(); render = new j1Render(); tex = new j1Textures(); audio = new j1Audio(); scene = new j1Scene(); fs = new j1FileSystem(); map = new j1Map(); pathfinding = new j1PathFinding(); font = new j1Fonts(); ui = new j1UIManager(); wow = new j1WowMenu(); // Ordered for awake / Start / Update // Reverse order of CleanUp AddModule(fs); AddModule(input); AddModule(win); AddModule(tex); AddModule(audio); AddModule(map); AddModule(pathfinding); AddModule(font); // scene last //AddModule(scene); AddModule(wow); AddModule(ui); // render last to swap buffer AddModule(render); PERF_PEEK(ptimer); }