/* by korenkonder GitHub/GitLab: korenkonder */ #include "system_startup.hpp" #include "../CRE/auth_2d.hpp" #include "../CRE/mdata_manager.hpp" #include "../CRE/sprite.hpp" #include "pv_game/pv_game.hpp" #include "game_state.hpp" system_startup_detail::TaskSystemStartup* task_system_startup; struct system_startup_struct { int32_t state; int32_t wait; bool ready; }; extern render_context* rctx_ptr; system_startup_struct system_startup; int32_t system_startup_ready; static bool system_startup_check_ready(); namespace system_startup_detail { TaskSystemStartup::TaskSystemStartup() { } TaskSystemStartup::~TaskSystemStartup() { } bool TaskSystemStartup::init() { system_startup.state = 0; system_startup.wait = 0; system_startup.ready = false; return true; } bool TaskSystemStartup::ctrl() { system_startup_ready = 0; switch (system_startup.state) { case 0: system_startup.state = 1; case 1: system_startup.state = 2; break; case 2: mdata_manager_add_task(); system_startup.state = 3; break; case 3: if (!app::TaskWork::check_task_ready(mdata_manager_get())) system_startup.state = 4; break; case 4: rctx_ptr->render_manager->set_pass_sw(rndr::RND_PASSID_3D, false); task_pv_game_init_test_pv(); system_startup.state = 5; break; case 5: if (!task_pv_game_check_task_ready() && system_startup_check_ready()) system_startup.state = 6; break; case 6: system_startup.wait = 0;//120; system_startup.state = 7; break; case 7: if (system_startup.wait-- < 0) system_startup.state = 8; break; case 8: rctx_ptr->render_manager->set_pass_sw(rndr::RND_PASSID_3D, true); system_startup_ready = 1; break; } return false; } bool TaskSystemStartup::dest() { if (task_pv_game_check_task_ready() && !system_startup_check_ready()) return false; opd_make_manager_del_task(); mdata_manager_del_task(); return true; } void TaskSystemStartup::disp() { resolution_struct* res_wind = res_window_get(); spr::put_sprite_rect({ 0.0f, 0.0f, (float_t)res_wind->width, (float_t)res_wind->height }, res_wind->resolution_mode, spr::SPR_PRIO_25, color_black, 0); } } bool task_system_startup_add_task() { if (!task_system_startup) task_system_startup = new system_startup_detail::TaskSystemStartup; return app::TaskWork::add_task(task_system_startup, "SYSTEM_STARTUP"); } bool task_system_startup_del_task() { if (!app::TaskWork::check_task_ready(task_system_startup)) { delete task_system_startup; task_system_startup = 0; return true; } task_system_startup->del(); return false; } void task_system_startup_free() { if (task_system_startup) { delete task_system_startup; task_system_startup = 0; } } static bool system_startup_check_ready() { if (test_mode_get() || system_startup.ready) return true; task_pv_game_del_task(); if (!task_pv_game_check_task_ready()) { //task_mask_screen_fade_in(0.0f, 0); rctx_ptr->render_manager->set_multisample(true); if (task_rob_manager_del_task()) { system_startup.ready = true; return true; } } return system_startup.ready; }