diff --git a/src/ReDIVA/classes.cpp b/src/ReDIVA/classes.cpp index bd0e9b79..17f904f3 100644 --- a/src/ReDIVA/classes.cpp +++ b/src/ReDIVA/classes.cpp @@ -13,10 +13,7 @@ void classes_process_init(classes_data* classes, const size_t classes_count, ren for (size_t i = 0; i < classes_count; i++) { classes_data* c = &classes[i]; - c->data.lock = new lock_cs; - if (c->data.lock->check_init() - && c->flags & (CLASSES_INIT_AT_STARTUP | CLASSES_SHOW_AT_STARTUP) && c->init) { - lock_lock(c->data.lock); + if (c->flags & (CLASSES_INIT_AT_STARTUP | CLASSES_SHOW_AT_STARTUP) && c->init) { if (c->init(&c->data, rctx)) c->data.flags = CLASS_INIT; else @@ -25,16 +22,11 @@ void classes_process_init(classes_data* classes, const size_t classes_count, ren if (!(c->flags & CLASSES_SHOW_AT_STARTUP)) enum_or(c->data.flags, CLASS_HIDDEN); - lock_unlock(c->data.lock); } - if (c->data.lock->check_init() - && c->flags & CLASSES_SHOW_AT_STARTUP) { - lock_lock(c->data.lock); - if (c->data.flags & CLASS_INIT && ((c->show && c->show(&c->data)) || !c->show)) { + if (c->flags & CLASSES_SHOW_AT_STARTUP) { + if (c->data.flags & CLASS_INIT) enum_and(c->data.flags, ~(CLASS_HIDE | CLASS_HIDDEN)); - } - lock_unlock(c->data.lock); } if (c->sub_classes && c->sub_classes_count) @@ -48,146 +40,17 @@ void classes_process_ctrl(classes_data* classes, const size_t classes_count) { for (size_t i = 0; i < classes_count; i++) { classes_data* c = &classes[i]; - if (c->data.lock->check_init()) { - if (c->data.flags & CLASS_HIDE) { - lock_lock(c->data.lock); - if (!(c->data.flags & CLASS_HIDDEN) && ((c->hide && c->hide(&c->data)) || !c->hide)) { - enum_and(c->data.flags, ~CLASS_HIDE); - enum_or(c->data.flags, CLASS_HIDDEN); - enum_and(c->data.flags, ~CLASS_HAS_PARENT); - } - lock_unlock(c->data.lock); - } - - if ((c->data.flags & CLASS_DISPOSE || (c->data.flags & CLASS_HIDDEN - && c->flags & CLASSES_DISPOSE_AT_HIDE))) { - lock_lock(c->data.lock); - if (!(c->data.flags & CLASS_HIDDEN) && ((c->hide && c->hide(&c->data)) || !c->hide)) { - enum_and(c->data.flags, ~CLASS_HIDE); - enum_or(c->data.flags, CLASS_HIDDEN); - enum_and(c->data.flags, ~CLASS_HAS_PARENT); - } - - if (!(c->data.flags & CLASS_DISPOSED) && ((c->dispose && c->dispose(&c->data)) || !c->dispose)) { - enum_and(c->data.flags, ~CLASS_DISPOSE); - enum_or(c->data.flags, CLASS_DISPOSED); - c->data.imgui_focus = false; - } - lock_unlock(c->data.lock); - delete c->data.lock; - c->data.lock = 0; - } - - if (c->data.flags & CLASS_INIT && c->ctrl) { - lock_lock(c->data.lock); - c->ctrl(&c->data); - lock_unlock(c->data.lock); - } - } - - classes_process_ctrl(c->sub_classes, c->sub_classes_count); - } -} - -void classes_process_disp(classes_data* classes, size_t classes_count) { - for (size_t i = 0; i < classes_count; i++) { - classes_data* c = &classes[i]; - if (c->data.lock->check_init() && c->disp) { - lock_lock(c->data.lock); - if (c->data.flags & CLASS_INIT) - c->disp(&c->data); - lock_unlock(c->data.lock); - } - - if (c->sub_classes && c->sub_classes_count) - classes_process_disp(c->sub_classes, c->sub_classes_count); - } -} - -void classes_process_drop(classes_data* classes, size_t classes_count, size_t count, char** paths) { - if (count < 1 || !paths[0]) - return; - - for (size_t i = 0; i < classes_count; i++) { - classes_data* c = &classes[i]; - if (c->data.lock->check_init() && c->drop) { - lock_lock(c->data.lock); - if (c->data.flags & CLASS_INIT) - c->drop(&c->data, count, paths); - lock_unlock(c->data.lock); - } - - if (c->sub_classes && c->sub_classes_count) - classes_process_drop(c->sub_classes, c->sub_classes_count, count, paths); - } -} - -void classes_process_imgui(classes_data* classes, const size_t classes_count) { - if (!classes || !classes_count) - return; - - for (size_t i = 0; i < classes_count; i++) { - classes_data* c = &classes[i]; - if (c->data.lock->check_init()) { - lock_lock(c->data.lock); + if (c->data.flags & CLASS_HIDE) { if (!(c->data.flags & CLASS_HIDDEN)) { - if (c->imgui) - c->imgui(&c->data); - input_locked |= c->data.imgui_focus; + enum_and(c->data.flags, ~CLASS_HIDE); + enum_or(c->data.flags, CLASS_HIDDEN); + enum_and(c->data.flags, ~CLASS_HAS_PARENT); } - lock_unlock(c->data.lock); } - classes_process_imgui(c->sub_classes, c->sub_classes_count); - } -} - -void classes_process_input(classes_data* classes, const size_t classes_count) { - if (!classes || !classes_count) - return; - - for (size_t i = 0; i < classes_count; i++) { - classes_data* c = &classes[i]; - if (c->data.lock->check_init()) { - lock_lock(c->data.lock); - if (c->data.flags & CLASS_INIT) { - if (c->input) - c->input(&c->data); - input_locked |= c->data.imgui_focus; - } - lock_unlock(c->data.lock); - } - - classes_process_input(c->sub_classes, c->sub_classes_count); - } -} - -void classes_process_sound(classes_data* classes, const size_t classes_count) { - if (!classes || !classes_count) - return; - - for (size_t i = 0; i < classes_count; i++) { - classes_data* c = &classes[i]; - if (c->data.lock->check_init() && c->sound) { - lock_lock(c->data.lock); - if (c->data.flags & CLASS_INIT) - c->sound(&c->data); - lock_unlock(c->data.lock); - } - - classes_process_sound(c->sub_classes, c->sub_classes_count); - } -} - -void classes_process_dispose(classes_data* classes, const size_t classes_count) { - if (!classes || !classes_count) - return; - - for (size_t i = 0; i < classes_count; i++) { - classes_data* c = &classes[i]; - if (c->data.lock->check_init()) { - lock_lock(c->data.lock); - if (!(c->data.flags & CLASS_HIDDEN) && ((c->hide && c->hide(&c->data)) || !c->hide)) { + if ((c->data.flags & CLASS_DISPOSE || (c->data.flags & CLASS_HIDDEN + && c->flags & CLASSES_DISPOSE_AT_HIDE))) { + if (!(c->data.flags & CLASS_HIDDEN)) { enum_and(c->data.flags, ~CLASS_HIDE); enum_or(c->data.flags, CLASS_HIDDEN); enum_and(c->data.flags, ~CLASS_HAS_PARENT); @@ -198,10 +61,43 @@ void classes_process_dispose(classes_data* classes, const size_t classes_count) enum_or(c->data.flags, CLASS_DISPOSED); c->data.imgui_focus = false; } - lock_unlock(c->data.lock); } - delete c->data.lock; - c->data.lock = 0; + + classes_process_ctrl(c->sub_classes, c->sub_classes_count); + } +} + +void classes_process_imgui(classes_data* classes, const size_t classes_count) { + if (!classes || !classes_count) + return; + + for (size_t i = 0; i < classes_count; i++) { + classes_data* c = &classes[i]; + if (!(c->data.flags & CLASS_HIDDEN) && c->imgui) { + c->imgui(&c->data); + input_locked |= c->data.imgui_focus; + } + + classes_process_imgui(c->sub_classes, c->sub_classes_count); + } +} +void classes_process_dispose(classes_data* classes, const size_t classes_count) { + if (!classes || !classes_count) + return; + + for (size_t i = 0; i < classes_count; i++) { + classes_data* c = &classes[i]; + if (!(c->data.flags & CLASS_HIDDEN)) { + enum_and(c->data.flags, ~CLASS_HIDE); + enum_or(c->data.flags, CLASS_HIDDEN); + enum_and(c->data.flags, ~CLASS_HAS_PARENT); + } + + if (!(c->data.flags & CLASS_DISPOSED) && ((c->dispose && c->dispose(&c->data)) || !c->dispose)) { + enum_and(c->data.flags, ~CLASS_DISPOSE); + enum_or(c->data.flags, CLASS_DISPOSED); + c->data.imgui_focus = false; + } classes_process_dispose(c->sub_classes, c->sub_classes_count); } diff --git a/src/ReDIVA/classes.hpp b/src/ReDIVA/classes.hpp index 7e25c1f4..cae049e0 100644 --- a/src/ReDIVA/classes.hpp +++ b/src/ReDIVA/classes.hpp @@ -30,7 +30,6 @@ enum classes_enum { }; struct class_data { - lock_cs* lock; class_flags flags; bool imgui_focus; void* data; @@ -40,14 +39,7 @@ struct classes_data { const char* name; const classes_enum flags; bool(* init)(class_data* data, render_context* rctx); - void(* ctrl)(class_data* data); - void(* disp)(class_data* data); - void(* drop)(class_data* data, size_t count, char** paths); - bool(* hide)(class_data* data); void(* imgui)(class_data* data); - void(* input)(class_data* data); - bool(* show)(class_data* data); - void(* sound)(class_data* data); bool(* dispose)(class_data* data); class_data data; classes_data* sub_classes; @@ -55,10 +47,5 @@ struct classes_data { }; extern void classes_process_init (classes_data* classes, size_t classes_count, render_context* rctx); -extern void classes_process_disp (classes_data* classes, size_t classes_count); -extern void classes_process_drop (classes_data* classes, size_t classes_count, size_t count, char** paths); extern void classes_process_imgui (classes_data* classes, size_t classes_count); -extern void classes_process_input (classes_data* classes, size_t classes_count); -extern void classes_process_ctrl (classes_data* classes, size_t classes_count); -extern void classes_process_sound (classes_data* classes, size_t classes_count); extern void classes_process_dispose(classes_data* classes, size_t classes_count); diff --git a/src/ReDIVA/classes/data_view.cpp b/src/ReDIVA/classes/data_view.cpp index 2f3de981..0357db47 100644 --- a/src/ReDIVA/classes/data_view.cpp +++ b/src/ReDIVA/classes/data_view.cpp @@ -15,17 +15,9 @@ classes_data data_view_classes[] = { "Auth 3D##Data View", CLASSES_IN_CONTEXT_MENU, data_view_auth_3d_init, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, data_view_auth_3d_imgui, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, data_view_auth_3d_dispose, { - {}, (class_flags)(CLASS_DISPOSED | CLASS_HIDDEN), false, CLASS_DATA_NO_DATA, @@ -37,17 +29,9 @@ classes_data data_view_classes[] = { "Draw Task##Data View", CLASSES_IN_CONTEXT_MENU, data_view_draw_task_init, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, data_view_draw_task_imgui, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, data_view_draw_task_dispose, { - {}, (class_flags)(CLASS_DISPOSED | CLASS_HIDDEN), false, CLASS_DATA_NO_DATA, @@ -59,17 +43,9 @@ classes_data data_view_classes[] = { "Glitter##Data View", CLASSES_IN_CONTEXT_MENU, data_view_glitter_init, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, data_view_glitter_imgui, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, data_view_glitter_dispose, { - {}, (class_flags)(CLASS_DISPOSED | CLASS_HIDDEN), false, CLASS_DATA_NO_DATA, @@ -81,17 +57,9 @@ classes_data data_view_classes[] = { "Object##Data View", CLASSES_IN_CONTEXT_MENU, data_view_object_init, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, data_view_object_imgui, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, data_view_object_dispose, { - {}, (class_flags)(CLASS_DISPOSED | CLASS_HIDDEN), false, CLASS_DATA_NO_DATA, @@ -103,17 +71,9 @@ classes_data data_view_classes[] = { "Texture##Data View", CLASSES_IN_CONTEXT_MENU, data_view_texture_init, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, data_view_texture_imgui, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, data_view_texture_dispose, { - {}, (class_flags)(CLASS_DISPOSED | CLASS_HIDDEN), false, CLASS_DATA_NO_DATA, diff --git a/src/ReDIVA/classes/graphics.cpp b/src/ReDIVA/classes/graphics.cpp index 920551eb..c6100baa 100644 --- a/src/ReDIVA/classes/graphics.cpp +++ b/src/ReDIVA/classes/graphics.cpp @@ -4,10 +4,10 @@ */ #include "graphics.hpp" +#include "../graphics/light.hpp" #include "graphics/background_color.hpp" #include "graphics/face_light.hpp" #include "graphics/fog.hpp" -#include "graphics/light.hpp" #include "graphics/glitter.hpp" #include "graphics/post_process.hpp" #include "graphics/render_settings.hpp" @@ -17,17 +17,9 @@ classes_data graphics_classes[] = { "Background Color##Graphics", CLASSES_IN_CONTEXT_MENU, graphics_background_color_init, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, graphics_background_color_imgui, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, graphics_background_color_dispose, { - {}, (class_flags)(CLASS_DISPOSED | CLASS_HIDDEN), false, CLASS_DATA_NO_DATA, @@ -38,18 +30,10 @@ classes_data graphics_classes[] = { { "Light##Graphics", CLASSES_IN_CONTEXT_MENU, - graphics_light_init, - graphics_light_ctrl, + (bool(*)(class_data*, render_context*))light_dw_init, CLASSES_DATA_NO_FUNC, CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - graphics_light_imgui, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - graphics_light_dispose, { - {}, (class_flags)(CLASS_DISPOSED | CLASS_HIDDEN), false, CLASS_DATA_NO_DATA, @@ -61,17 +45,9 @@ classes_data graphics_classes[] = { "Face Light##Graphics", CLASSES_IN_CONTEXT_MENU, graphics_face_light_init, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, graphics_face_light_imgui, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, graphics_face_light_dispose, { - {}, (class_flags)(CLASS_DISPOSED | CLASS_HIDDEN), false, CLASS_DATA_NO_DATA, @@ -83,17 +59,9 @@ classes_data graphics_classes[] = { "Fog##Graphics", CLASSES_IN_CONTEXT_MENU, graphics_fog_init, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, graphics_fog_imgui, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, graphics_fog_dispose, { - {}, (class_flags)(CLASS_DISPOSED | CLASS_HIDDEN), false, CLASS_DATA_NO_DATA, @@ -105,17 +73,9 @@ classes_data graphics_classes[] = { "Post Process##Graphics", CLASSES_IN_CONTEXT_MENU, graphics_post_process_init, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, graphics_post_process_imgui, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, graphics_post_process_dispose, { - {}, (class_flags)(CLASS_DISPOSED | CLASS_HIDDEN), false, CLASS_DATA_NO_DATA, @@ -127,17 +87,9 @@ classes_data graphics_classes[] = { "Glitter##Graphics", CLASSES_IN_CONTEXT_MENU, graphics_glitter_init, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, graphics_glitter_imgui, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, graphics_glitter_dispose, { - {}, (class_flags)(CLASS_DISPOSED | CLASS_HIDDEN), false, CLASS_DATA_NO_DATA, @@ -149,17 +101,9 @@ classes_data graphics_classes[] = { "Render Settings##Graphics", CLASSES_IN_CONTEXT_MENU, graphics_render_settings_init, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, graphics_render_settings_imgui, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, graphics_render_settings_dispose, { - {}, (class_flags)(CLASS_DISPOSED | CLASS_HIDDEN), false, CLASS_DATA_NO_DATA, diff --git a/src/ReDIVA/classes/graphics/light.cpp b/src/ReDIVA/classes/graphics/light.cpp deleted file mode 100644 index 44977f9a..00000000 --- a/src/ReDIVA/classes/graphics/light.cpp +++ /dev/null @@ -1,321 +0,0 @@ -/* - by korenkonder - GitHub/GitLab: korenkonder -*/ - -#include "light.hpp" -#include "../../../CRE/stage.hpp" -#include "../../imgui_helper.hpp" - -struct data_view_light { - render_context* rctx; - light_id id; - bool sync_pos; - bool light_auth_enable; - int32_t stage_index; - int32_t stage_index_prev; - - data_view_light(); - ~data_view_light(); - - static void column_slider_float_button(const char* label, float_t* val); -}; - -extern int32_t width; -extern int32_t height; - -static const char* graphics_light_window_title = "Light##Graphics"; - -bool graphics_light_init(class_data* data, render_context* rctx) { - graphics_light_dispose(data); - - data_view_light* light = new data_view_light; - if (light) { - light->rctx = rctx; - - int32_t stage_index = task_stage_get_current_stage_index(); - stage_index = max_def(stage_index, 0); - light->stage_index = stage_index; - light->stage_index_prev = stage_index; - } - data->data = light; - return true; -} - -void graphics_light_ctrl(class_data* data) { - if (data->flags & (CLASS_HIDE | CLASS_HIDDEN)) - return; - - data_view_light* light = (data_view_light*)data->data; - if (!light) - return; - - if (light->stage_index != light->stage_index_prev - && !light_param_data_storage_data_load_file()) { - light->stage_index_prev = light->stage_index; - light_param_data_storage_data_set_stage(light->stage_index); - } -} - -void graphics_light_imgui(class_data* data) { - ImGuiIO& io = ImGui::GetIO(); - ImGuiStyle& style = ImGui::GetStyle(); - ImFont* font = ImGui::GetFont(); - - float_t w = min_def((float_t)width, 464.0f); - float_t h = min_def((float_t)height, 604.0f); - - ImGui::SetNextWindowPos({ 0, 0 }, ImGuiCond_Appearing); - ImGui::SetNextWindowSize({ w, h }, ImGuiCond_Appearing); - - data->imgui_focus = false; - bool open = data->flags & CLASS_HIDDEN ? false : true; - bool collapsed = !ImGui::Begin(graphics_light_window_title, &open, 0); - if (!open) { - enum_or(data->flags, CLASS_HIDE); - ImGui::End(); - return; - } - else if (collapsed) { - ImGui::End(); - return; - } - - data_view_light* light = (data_view_light*)data->data; - if (!light) { - ImGui::End(); - return; - } - - render_context* rctx = light->rctx; - - data_struct* aft_data = &data_list[DATA_AFT]; - stage_database* aft_stage_data = &aft_data->data_ft.stage_data; - - std::vector& stg_data = aft_stage_data->stage_data; - - light_set* light_set = rctx->light_set; - - int32_t stage_index = light_param_data_storage_data_get_stage_index(); - - int32_t _stage_index = stage_index < 0 ? light->stage_index : stage_index; - - ImGui::TextCentered("STAGE (Light/Fog/PP)"); - - ImGui::GetContentRegionAvailSetNextItemWidth(); - if (ImGui::BeginCombo("##Stage Index", _stage_index > -1 - ? stg_data[_stage_index].name.c_str() : "", 0)) { - for (stage_data& i : stg_data) { - int32_t stage_idx = (int32_t)(&i - stg_data.data()); - - ImGui::PushID(&i); - if (ImGui::Selectable(i.name.c_str(), _stage_index == stage_idx) - || ImGui::ItemKeyPressed(ImGuiKey_Enter) - || (ImGui::IsItemFocused() && _stage_index != stage_idx)) { - stage_index = -1; - _stage_index = stage_idx; - } - ImGui::PopID(); - - if (_stage_index == stage_idx) - ImGui::SetItemDefaultFocus(); - } - - data->imgui_focus |= ImGui::IsWindowFocused(); - ImGui::EndCombo(); - } - - ::light_data* light_data = &light_set->lights[light->id]; - - const char* light_id_labels[] = { - "0:CHARA", - "1:STAGE", - "2:SUN", - "3:REFLECT", - "4:SHADOW", - "5:CHARA COLOR", - "6:CHARA(F)", - "7:PROJECTION", - }; - - ImGui::TextCentered("ID"); - - ImGui::GetContentRegionAvailSetNextItemWidth(); - ImGui::ComboBox("##ID", light_id_labels, LIGHT_MAX, - (int32_t*)&light->id, 0, false, &data->imgui_focus); - - const char* light_type_labels[] = { - "OFF", - "PARALLEL", - "POINT", - "SPOT", - }; - - ImGui::TextCentered("TYPE"); - - light_type type = light_data->get_type(); - ImGui::GetContentRegionAvailSetNextItemWidth(); - ImGui::ComboBox("##Type", light_type_labels, LIGHT_SPOT, - (int32_t*)&type, 0, true, &data->imgui_focus); - light_data->set_type(type); - - if (light->id == LIGHT_CHARA || light->id == LIGHT_TONE_CURVE) { - ::light_data* light_data = &light_set->lights[LIGHT_TONE_CURVE]; - - ImGui::TextCentered("CHARA(F) Tone Curve Adjustment"); - - ImGui::PushID("Tone Curve"); - light_tone_curve tone_curve; - light_data->get_tone_curve(tone_curve); - ImGui::ColumnSliderFloatButton("Start Point", &tone_curve.start_point, 0.01f, 0.0f, 1.0f, 0.1f, "%4.2f", 0); - ImGui::ColumnSliderFloatButton("End Point", &tone_curve.end_point, 0.01f, 0.0f, 1.0f, 0.1f, "%4.2f", 0); - ImGui::ColumnSliderFloatButton("Coefficient", &tone_curve.coefficient, 0.01f, 0.0f, 1.0f, 0.1f, "%4.2f", 0); - light_data->set_tone_curve(tone_curve); - ImGui::PopID(); - - ImGui::Checkbox("Light 0-6 Sync Position", &light->sync_pos); - ImGui::Checkbox("Light Auth Enable", &light->light_auth_enable); - } - - if (light_data->type != LIGHT_OFF) { - ImGui::TextCentered("AMBIENT"); - - ImGui::PushID("Ambient"); - vec4 ambient; - light_data->get_ambient(ambient); - ImGui::ColumnSliderFloatButton("R", &ambient.x, 0.01f, 0.0f, 2.0f, 0.1f, "%4.3f", 0); - ImGui::ColumnSliderFloatButton("G", &ambient.y, 0.01f, 0.0f, 2.0f, 0.1f, "%4.3f", 0); - ImGui::ColumnSliderFloatButton("B", &ambient.z, 0.01f, 0.0f, 2.0f, 0.1f, "%4.3f", 0); - light_data->set_ambient(ambient); - ImGui::PopID(); - - ImGui::TextCentered("DIFFUSE"); - - ImGui::PushID("Diffuse"); - vec4 diffuse; - light_data->get_diffuse(diffuse); - ImGui::ColumnSliderFloatButton("R", &diffuse.x, 0.01f, 0.0f, 2.0f, 0.1f, "%4.3f", 0); - ImGui::ColumnSliderFloatButton("G", &diffuse.y, 0.01f, 0.0f, 2.0f, 0.1f, "%4.3f", 0); - ImGui::ColumnSliderFloatButton("B", &diffuse.z, 0.01f, 0.0f, 2.0f, 0.1f, "%4.3f", 0); - light_data->set_diffuse(diffuse); - ImGui::PopID(); - - ImGui::TextCentered("SPECULAR"); - - ImGui::PushID("Specular"); - vec4 specular; - light_data->get_specular(specular); - ImGui::ColumnSliderFloatButton("R", &specular.x, 0.01f, 0.0f, 2.0f, 0.1f, "%4.3f", 0); - ImGui::ColumnSliderFloatButton("G", &specular.y, 0.01f, 0.0f, 2.0f, 0.1f, "%4.3f", 0); - ImGui::ColumnSliderFloatButton("B", &specular.z, 0.01f, 0.0f, 2.0f, 0.1f, "%4.3f", 0); - ImGui::ColumnSliderFloatButton("A", &specular.w, 0.02f, 0.0f, 4.0f, 0.2f, "%4.3f", 0); - light_data->set_specular(specular); - ImGui::PopID(); - - ImGui::TextCentered("POSITION"); - - ImGui::PushID("Position"); - vec3 position; - light_data->get_position(position); - - float_t rot_y; - if (fabsf(position.x) > 0.000001f || fabsf(position.y) > 0.000001f) - rot_y = atan2f(position.z, position.x) * RAD_TO_DEG_FLOAT; - else - rot_y = 0.0f; - - data_view_light::column_slider_float_button("X", &position.x); - data_view_light::column_slider_float_button("Y", &position.y); - data_view_light::column_slider_float_button("Z", &position.z); - if (ImGui::ColumnSliderFloatButton("ROTY", &rot_y, 0.01f, -180.0f, 180.0f, 0.1f, "%6.2f", 0)) { - vec2 pos = { position.x, position.z }; - float_t len = vec2::length(pos); - position.x = cosf(rot_y * DEG_TO_RAD_FLOAT) * len; - position.z = sinf(rot_y * DEG_TO_RAD_FLOAT) * len; - } - light_data->set_position(position); - ImGui::PopID(); - } - - if (light_data->type == LIGHT_SPOT) { - ImGui::TextCentered("SPOT DIRECTION"); - - ImGui::PushID("Spot Direction"); - vec3 spot_direction; - light_data->get_spot_direction(spot_direction); - ImGui::ColumnSliderFloatButton("X", &spot_direction.x, 0.02f, -1.0f, 1.0f, 0.1f, "%5.2f", 0); - ImGui::ColumnSliderFloatButton("Y", &spot_direction.y, 0.02f, -1.0f, 1.0f, 0.1f, "%5.2f", 0); - ImGui::ColumnSliderFloatButton("Z", &spot_direction.z, 0.02f, -1.0f, 1.0f, 0.1f, "%5.2f", 0); - light_data->set_spot_direction(spot_direction); - ImGui::PopID(); - - if (light->id == LIGHT_REFLECT) { - light_clip_plane clip_plane; - light_data->get_clip_plane(clip_plane); - ImGui::Checkbox("Reflective surface clip(STAGE)", &clip_plane.data[1]); - light_data->set_clip_plane(clip_plane); - } - - ImGui::TextCentered("SPOT EXPONENT"); - - float_t spot_exponent = light_data->get_spot_exponent(); - ImGui::ColumnSliderFloatButton("EXPONENT", &spot_exponent, 1.0f, 0.0f, 128.0f, 10.0f, "%8.4f", 0); - light_data->set_spot_exponent(spot_exponent); - - ImGui::TextCentered("SPOT CUTOFF"); - - float_t spot_cutoff = light_data->get_spot_cutoff(); - ImGui::ColumnSliderFloatButton("CUTOFF", &spot_cutoff, 0.0f, 0.0f, 90.0f, 5.0f, "%8.4f", 0); - light_data->set_spot_cutoff(spot_cutoff); - - ImGui::TextCentered("ATTENUATION"); - - ImGui::PushID("Attenuation"); - light_attenuation attenuation; - light_data->get_attenuation(attenuation); - ImGui::ColumnSliderFloatButton("CONSTANT", &attenuation.constant, 0.01f, 0.0f, 1.0f, 0.1f, "%8.4f", 0); - ImGui::ColumnSliderFloatButton("LINEAR", &attenuation.linear, 0.01f, 0.0f, 1.0f, 0.1f, "%8.4f", 0); - ImGui::ColumnSliderFloatButton("QUADRATIC", &attenuation.quadratic, 0.01f, 0.0f, 1.0f, 0.1f, "%8.4f", 0); - light_data->set_attenuation(attenuation); - ImGui::PopID(); - } - - if (_stage_index != stage_index && _stage_index != light->stage_index) { - light_param_data_storage_data_load_stage(_stage_index); - light->stage_index = _stage_index; - } - - data->imgui_focus |= ImGui::IsWindowFocused(); - ImGui::End(); -} - -bool graphics_light_dispose(class_data* data) { - data_view_light* light = (data_view_light*)data->data; - if (light) - delete light; - data->data = 0; - return true; -} - -data_view_light::data_view_light() : rctx(), id(), sync_pos(), -light_auth_enable(), stage_index(), stage_index_prev() { - -} - -data_view_light::~data_view_light() { - -} - -void data_view_light::column_slider_float_button(const char* label, float_t* val) { - float_t val_abs = fabsf(*val); - float_t step; - if (val_abs < 150.0f) - step = 1.0; - else if (val_abs >= 1900.0) - step = 50.0f; - else - step = 10.0f; - - ImGui::ColumnSliderFloatButton(label, val, - step * 0.2f, 1.0f - step * 200.0f, step * 200.0f - 1.0f, step, "%6.2f", 0); -} diff --git a/src/ReDIVA/classes/graphics/light.hpp b/src/ReDIVA/classes/graphics/light.hpp deleted file mode 100644 index f9d9806e..00000000 --- a/src/ReDIVA/classes/graphics/light.hpp +++ /dev/null @@ -1,14 +0,0 @@ -/* - by korenkonder - GitHub/GitLab: korenkonder -*/ - -#pragma once - -#include "../../../KKdLib/default.hpp" -#include "../../classes.hpp" - -extern bool graphics_light_init(class_data* data, render_context* rctx); -extern void graphics_light_ctrl(class_data* data); -extern void graphics_light_imgui(class_data* data); -extern bool graphics_light_dispose(class_data* data); diff --git a/src/ReDIVA/classes/information.cpp b/src/ReDIVA/classes/information.cpp index dd5c2456..cca5199c 100644 --- a/src/ReDIVA/classes/information.cpp +++ b/src/ReDIVA/classes/information.cpp @@ -4,7 +4,7 @@ */ #include "information.hpp" -#include "../dw_console.hpp" +#include "../information/dw_console.hpp" #include "information/frame_speed.hpp" #include "information/task.hpp" @@ -15,15 +15,7 @@ classes_data information_classes[] = { (bool(*)(class_data*, render_context*))dw_console_init, CLASSES_DATA_NO_FUNC, CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, { - {}, (class_flags)(CLASS_DISPOSED | CLASS_HIDDEN), false, CLASS_DATA_NO_DATA, @@ -35,17 +27,9 @@ classes_data information_classes[] = { "FrameSpeed##Information", CLASSES_IN_CONTEXT_MENU, information_frame_speed_init, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, information_frame_speed_imgui, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, information_frame_speed_dispose, { - {}, (class_flags)(CLASS_DISPOSED | CLASS_HIDDEN), false, CLASS_DATA_NO_DATA, @@ -57,17 +41,9 @@ classes_data information_classes[] = { "Task##Information", CLASSES_IN_CONTEXT_MENU, information_task_init, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, information_task_imgui, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, information_task_dispose, { - {}, (class_flags)(CLASS_DISPOSED | CLASS_HIDDEN), false, CLASS_DATA_NO_DATA, diff --git a/src/ReDIVA/data_test/stage_test.cpp b/src/ReDIVA/data_test/stage_test.cpp index 2f5c5eca..f2e0d192 100644 --- a/src/ReDIVA/data_test/stage_test.cpp +++ b/src/ReDIVA/data_test/stage_test.cpp @@ -137,8 +137,6 @@ DtwStg::DtwStg() : Shell(0) { data_struct* aft_data = &data_list[DATA_AFT]; stage_database* aft_stage_data = &aft_data->data_ft.stage_data; - std::vector& stg_data = aft_stage_data->stage_data; - dw::Widget::SetText("STAGE TEST"); dw::Composite* pv_comp = new dw::Composite(this); diff --git a/src/ReDIVA/game_state.cpp b/src/ReDIVA/game_state.cpp index b0349d32..9f39fb06 100644 --- a/src/ReDIVA/game_state.cpp +++ b/src/ReDIVA/game_state.cpp @@ -21,7 +21,6 @@ #include "pv_game/pv_game.hpp" #include "data_edit.hpp" #include "data_initialize.hpp" -#include "dw_console.hpp" #include "glitter_editor.hpp" #include "system_startup.hpp" #include "x_pv_game.hpp" diff --git a/src/ReDIVA/graphics/light.cpp b/src/ReDIVA/graphics/light.cpp new file mode 100644 index 00000000..1d4663a0 --- /dev/null +++ b/src/ReDIVA/graphics/light.cpp @@ -0,0 +1,1180 @@ +/* + by korenkonder + GitHub/GitLab: korenkonder +*/ + +#include "light.hpp" +#include "../../CRE/light_param/light.hpp" +#include "../../CRE/light_param.hpp" +#include "../../CRE/render_context.hpp" +#include "../../CRE/stage.hpp" +#include "../../CRE/task.hpp" +#include "../dw.hpp" + +extern render_context* rctx_ptr; + +class LightDw : public dw::Shell { +public: + class GAmbientSlider : public dw::SelectionAdapter { + public: + LightDw* light_dw; + dw::Slider* start_point; + dw::Slider* end_point; + dw::Slider* coefficient; + + GAmbientSlider(LightDw* light_dw, dw::Widget* parent); + virtual ~GAmbientSlider(); + + virtual void Callback(dw::SelectionListener::CallbackData* data) override; + }; + + class SyncPosButton : public dw::SelectionAdapter { + public: + LightDw* light_dw; + dw::Button* sync_pos; + + SyncPosButton(LightDw* light_dw, dw::Widget* parent); + virtual ~SyncPosButton(); + + virtual void Callback(dw::SelectionListener::CallbackData* data) override; + }; + + class LightAuthEnableButton : public dw::SelectionAdapter { + public: + LightDw* light_dw; + dw::Button* light_auth_enable; + + LightAuthEnableButton(LightDw* light_dw, dw::Widget* parent); + virtual ~LightAuthEnableButton(); + + virtual void Callback(dw::SelectionListener::CallbackData* data) override; + }; + + class CutLightEnableButton : public dw::SelectionAdapter { + public: + LightDw* light_dw; + dw::Button* set_for_each_cut; + + CutLightEnableButton(LightDw* light_dw, dw::Widget* parent); + virtual ~CutLightEnableButton(); + + virtual void Callback(dw::SelectionListener::CallbackData* data) override; + }; + + class IdListBox : public dw::SelectionAdapter { + public: + LightDw* light_dw; + dw::ListBox* id; + + IdListBox(LightDw* light_dw, dw::Widget* parent); + virtual ~IdListBox(); + + virtual void Callback(dw::SelectionListener::CallbackData* data) override; + }; + + class TypeListBox : public dw::SelectionAdapter { + public: + LightDw* light_dw; + dw::ListBox* type; + + TypeListBox(LightDw* light_dw, dw::Widget* parent); + virtual ~TypeListBox(); + + virtual void Callback(dw::SelectionListener::CallbackData* data) override; + }; + + class AmbientSlider : public dw::SelectionAdapter { + public: + LightDw* light_dw; + dw::Slider* r; + dw::Slider* g; + dw::Slider* b; + dw::Slider* a; + + AmbientSlider(LightDw* light_dw, dw::Widget* parent); + virtual ~AmbientSlider(); + + virtual void Callback(dw::SelectionListener::CallbackData* data) override; + }; + + class DiffuseSlider : public dw::SelectionAdapter { + public: + LightDw* light_dw; + dw::Slider* r; + dw::Slider* g; + dw::Slider* b; + dw::Slider* a; + + DiffuseSlider(LightDw* light_dw, dw::Widget* parent); + virtual ~DiffuseSlider(); + + virtual void Callback(dw::SelectionListener::CallbackData* data) override; + }; + + class SpecularSlider : public dw::SelectionAdapter { + public: + LightDw* light_dw; + dw::Slider* r; + dw::Slider* g; + dw::Slider* b; + dw::Slider* a; + + SpecularSlider(LightDw* light_dw, dw::Widget* parent); + virtual ~SpecularSlider(); + + virtual void Callback(dw::SelectionListener::CallbackData* data) override; + }; + + class PositionSlider : public dw::SelectionAdapter { + public: + LightDw* light_dw; + dw::Slider* x; + dw::Slider* y; + dw::Slider* z; + dw::Slider* rot_y; + + PositionSlider(LightDw* light_dw, dw::Widget* parent); + virtual ~PositionSlider(); + + virtual void Callback(dw::SelectionListener::CallbackData* data) override; + + float_t GetRotY(float_t x, float_t z); + void SetPositionSliderParams(dw::Slider* slider, float_t value); + void SetRotYParams(float_t value); + void SetRotation(float_t& x, float_t& y, float_t rot_y); + }; + + class DirectionSlider : public dw::SelectionAdapter { + public: + LightDw* light_dw; + dw::Slider* x; + dw::Slider* y; + dw::Slider* z; + + DirectionSlider(LightDw* light_dw, dw::Widget* parent); + virtual ~DirectionSlider(); + + virtual void Callback(dw::SelectionListener::CallbackData* data) override; + }; + + class ExponentSlider : public dw::SelectionAdapter { + public: + LightDw* light_dw; + dw::Slider* exponent; + + ExponentSlider(LightDw* light_dw, dw::Widget* parent); + virtual ~ExponentSlider(); + + virtual void Callback(dw::SelectionListener::CallbackData* data) override; + }; + + class CutoffSlider : public dw::SelectionAdapter { + public: + LightDw* light_dw; + dw::Slider* cutoff; + + CutoffSlider(LightDw* light_dw, dw::Widget* parent); + virtual ~CutoffSlider(); + + virtual void Callback(dw::SelectionListener::CallbackData* data) override; + }; + + class AttenuationSlider : public dw::SelectionAdapter { + public: + LightDw* light_dw; + dw::Slider* constant; + dw::Slider* linear; + dw::Slider* quadratic; + + AttenuationSlider(LightDw* light_dw, dw::Widget* parent); + virtual ~AttenuationSlider(); + + virtual void Callback(dw::SelectionListener::CallbackData* data) override; + }; + + /*struct File { + LightDw* light_dw; + dw::Button* save; + dw::Button* load; + dw::Button* light0_coord_init; + + File(LightDw* light_dw, dw::Widget* parent); + };*/ + + dw::ListBox* stage; + GAmbientSlider* g_ambient_slider; + SyncPosButton* sync_pos_button; + LightAuthEnableButton* light_auth_enable_button; + CutLightEnableButton* cut_light_enable_button; + IdListBox* id_list_box; + TypeListBox* type_list_box; + AmbientSlider* ambient_slider; + DiffuseSlider* diffuse_slider; + SpecularSlider* specular_slider; + PositionSlider* position_slider; + DirectionSlider* direction_slider; + ExponentSlider* exponent_slider; + CutoffSlider* cutoff_slider; + AttenuationSlider* attenuation_slider; + //File* file; + + LightDw(); + virtual ~LightDw() override; + + virtual void Hide() override; + + virtual void ResetData(); + + void ResetStage(int32_t stage_index); + + static void ReflectiveSurfaceClipStageCallback(dw::Widget* data); + static void StageCallback(dw::Widget* data); +}; + +class LightDwTask : public app::Task { +public: + int32_t stage_index; + int32_t curr_stage_index; + bool ready; + bool set; + + LightDwTask(); + virtual ~LightDwTask() override; + + virtual bool ctrl() override; + virtual void disp() override; +}; + +LightDw* light_dw; +LightDwTask light_dw_task; + +light_set_id light_dw_light_set_id = LIGHT_SET_MAIN; +light_id light_dw_light_id = LIGHT_CHARA; +bool light_dw_auth_enable = true; +bool light_dw_cut_light_enable = false; +bool light_dw_sync_pos = false; + +rectangle light_dw_rect = { 0.0f, vec2(256.0f, 610.0f) }; + +static LightDw* light_dw_get(); +static light_data* light_dw_get_light(); + +void light_dw_init() { + if (!light_dw) { + light_dw = new LightDw; + light_dw->sub_1402F38B0(); + } + else + light_dw->Disp(); + + if (!light_dw_task.ready) + app::TaskWork::add_task(&light_dw_task, "LIGHT_DW_TASK"); +} + +LightDw::GAmbientSlider::GAmbientSlider(LightDw* light_dw, dw::Widget* parent) { + this->light_dw = light_dw; + start_point = 0; + end_point = 0; + coefficient = 0; + + dw::Composite* comp = dynamic_cast(parent); + if (comp) { + light_data* light = &rctx_ptr->light_set[light_dw_light_set_id].lights[LIGHT_TONE_CURVE]; + +#if DW_TRANSLATE + const char* chara_f_tone_curve_adjustment_text = "CHARA(F) Tone Curve Adjustment"; + const char* start_point_text = "Start Point"; + const char* end_point_text = "End Point"; + const char* coefficient_text = "Coefficient"; +#else + const char* chara_f_tone_curve_adjustment_text = "CHARA(F)トーンカーブ調整"; + const char* start_point_text = "始点"; + const char* end_point_text = "終点"; + const char* coefficient_text = "係数"; +#endif + + dw::Label* label = new dw::Label(comp); + label->SetText(chara_f_tone_curve_adjustment_text); + + light_tone_curve value; + light->get_tone_curve(value); + + start_point = dw::Slider::Create(comp); + start_point->SetText(start_point_text); + start_point->format = "%4.2f"; + start_point->scroll_bar->SetParams(value.start_point, 0.0f, 1.0f, 0.2f, 0.01f, 0.1f); + start_point->callback_data.i64 = 0; + start_point->AddSelectionListener(this); + + end_point = dw::Slider::Create(comp); + end_point->SetText(end_point_text); + end_point->format = "%4.2f"; + end_point->scroll_bar->SetParams(value.end_point, 0.0f, 1.0f, 0.2f, 0.01f, 0.1f); + end_point->callback_data.i64 = 1; + end_point->AddSelectionListener(this); + + coefficient = dw::Slider::Create(comp); + coefficient->SetText(coefficient_text); + coefficient->format = "%4.2f"; + coefficient->scroll_bar->SetParams(value.coefficient, 0.0f, 4.0f, 0.2f, 0.01f, 0.1f); + coefficient->callback_data.i64 = 2; + coefficient->AddSelectionListener(this); + } +} + +LightDw::GAmbientSlider::~GAmbientSlider() { + +} + +void LightDw::GAmbientSlider::Callback(dw::SelectionListener::CallbackData* data) { + dw::Slider* slider = dynamic_cast(data->widget); + if (slider) { + light_data* light = light_dw_get_light(); + light_tone_curve value; + light->get_tone_curve(value); + ((float_t*)&value)[slider->callback_data.i32] = slider->scroll_bar->value; + light->set_tone_curve(value); + } +} + +LightDw::SyncPosButton::SyncPosButton(LightDw* light_dw, dw::Widget* parent) { + this->light_dw = light_dw; + sync_pos = 0; + + dw::Composite* comp = dynamic_cast(parent); + if (comp) { +#if DW_TRANSLATE + const char* sync_pos_text = "Light 0-6 Sync Position"; +#else + const char* sync_pos_text = "Light 0-6 座標同期"; +#endif + + sync_pos = new dw::Button(comp, dw::CHECKBOX); + sync_pos->SetText(sync_pos_text); + sync_pos->SetValue(light_dw_sync_pos); + sync_pos->callback_data.i64 = 0; + sync_pos->AddSelectionListener(this); + } +} + +LightDw::SyncPosButton::~SyncPosButton() { + +} + +void LightDw::SyncPosButton::Callback(dw::SelectionListener::CallbackData* data) { + dw::Button* button = dynamic_cast(data->widget); + if (button && !button->callback_data.i32) + light_dw_sync_pos = button->value; +} + +LightDw::LightAuthEnableButton::LightAuthEnableButton(LightDw* light_dw, dw::Widget* parent) { + this->light_dw = light_dw; + light_auth_enable = 0; + + dw::Composite* comp = dynamic_cast(parent); + if (comp) { +#if DW_TRANSLATE + const char* light_auth_enable_text = "Light Auth Enable"; +#else + const char* light_auth_enable_text = "ライトオーサ有効"; +#endif + + light_auth_enable = new dw::Button(comp, dw::CHECKBOX); + light_auth_enable->SetText(light_auth_enable_text); + light_auth_enable->SetValue(light_dw_auth_enable); + light_auth_enable->callback_data.i64 = 0; + light_auth_enable->AddSelectionListener(this); + } +} + +LightDw::LightAuthEnableButton::~LightAuthEnableButton() { + +} + +void LightDw::LightAuthEnableButton::Callback(dw::SelectionListener::CallbackData* data) { + dw::Button* button = dynamic_cast(data->widget); + if (button && !button->callback_data.i32) + light_dw_auth_enable = button->value; +} + +LightDw::CutLightEnableButton::CutLightEnableButton(LightDw* light_dw, dw::Widget* parent) { + this->light_dw = light_dw; + set_for_each_cut = 0; + + dw::Composite* comp = dynamic_cast(parent); + if (comp) { +#if DW_TRANSLATE + const char* set_for_each_cut_text = "Set for each PV cut"; +#else + const char* set_for_each_cut_text = "PVのカットごとに設定"; +#endif + + set_for_each_cut = new dw::Button(comp, dw::CHECKBOX); + set_for_each_cut->SetText(set_for_each_cut_text); + set_for_each_cut->SetValue(light_dw_cut_light_enable); + set_for_each_cut->callback_data.i64 = 0; + set_for_each_cut->AddSelectionListener(this); + } +} + +LightDw::CutLightEnableButton::~CutLightEnableButton() { + +} + +void LightDw::CutLightEnableButton::Callback(dw::SelectionListener::CallbackData* data) { + dw::Button* button = dynamic_cast(data->widget); + if (button && !button->callback_data.i32) + light_dw_cut_light_enable = button->value; +} + +LightDw::IdListBox::IdListBox(LightDw* light_dw, dw::Widget* parent) { + this->light_dw = light_dw; + id = 0; + + dw::Composite* comp = dynamic_cast(parent); + if (comp) { + dw::Label* label = new dw::Label(comp); + label->SetText("ID"); + + id = new dw::ListBox(comp, dw::MULTISELECT); + + const char* light_id_labels[] = { + "0:CHARA", + "1:STAGE", + "2:SUN", + "3:REFLECT", + "4:SHADOW", + "5:CHARA COLOR", + "6:CHARA(F)", + "7:PROJECTION", + }; + + for (const char*& i : light_id_labels) + id->AddItem(i); + + id->SetItemIndex(light_dw_light_id); + id->AddSelectionListener(this); + } +} + +LightDw::IdListBox::~IdListBox() { + +} + +void LightDw::IdListBox::Callback(dw::SelectionListener::CallbackData* data) { + dw::ListBox* list_box = dynamic_cast(data->widget); + if (list_box) { + light_dw_light_id = (light_id)list_box->list->selected_item; + light_dw->ResetData(); + } +} + +LightDw::TypeListBox::TypeListBox(LightDw* light_dw, dw::Widget* parent) { + this->light_dw = light_dw; + type = 0; + + dw::Composite* comp = dynamic_cast(parent); + if (comp) { + light_data* light = light_dw_get_light(); + + dw::Label* label = new dw::Label(comp); + label->SetText("TYPE"); + + type = new dw::ListBox(comp, dw::MULTISELECT); + + const char* light_type_labels[] = { + "OFF", + "PARALLEL", + "POINT", + "SPOT", + }; + + for (const char*& i : light_type_labels) + type->AddItem(i); + + type->SetItemIndex(light->get_type()); + type->AddSelectionListener(this); + } +} + +LightDw::TypeListBox::~TypeListBox() { + +} + +void LightDw::TypeListBox::Callback(dw::SelectionListener::CallbackData* data) { + dw::ListBox* list_box = dynamic_cast(data->widget); + if (list_box) { + light_data* light = light_dw_get_light(); + light->set_type((light_type)list_box->list->selected_item); + light_dw->ResetData(); + } +} + +LightDw::AmbientSlider::AmbientSlider(LightDw* light_dw, dw::Widget* parent) { + this->light_dw = light_dw; + r = 0; + g = 0; + b = 0; + a = 0; + + dw::Composite* comp = dynamic_cast(parent); + if (comp) { + light_data* light = &rctx_ptr->light_set[light_dw_light_set_id].lights[LIGHT_TONE_CURVE]; + + dw::Label* label = new dw::Label(comp); + label->SetText("AMBIENT"); + + vec4 value; + light->get_ambient(value); + + r = dw::Slider::Create(comp); + r->SetText("R"); + r->format = "%4.3f"; + r->scroll_bar->SetParams(value.x, 0.0f, 2.0f, 0.2f, 0.01f, 0.1f); + r->callback_data.i64 = 0; + r->AddSelectionListener(this); + + g = dw::Slider::Create(comp); + g->SetText("G"); + g->format = "%4.3f"; + g->scroll_bar->SetParams(value.y, 0.0f, 2.0f, 0.2f, 0.01f, 0.1f); + g->callback_data.i64 = 1; + g->AddSelectionListener(this); + + b = dw::Slider::Create(comp); + b->SetText("B"); + b->format = "%4.3f"; + b->scroll_bar->SetParams(value.z, 0.0f, 2.0f, 0.2f, 0.01f, 0.1f); + b->callback_data.i64 = 2; + b->AddSelectionListener(this); + } +} + +LightDw::AmbientSlider::~AmbientSlider() { + +} + +void LightDw::AmbientSlider::Callback(dw::SelectionListener::CallbackData* data) { + dw::Slider* slider = dynamic_cast(data->widget); + if (slider) { + light_data* light = light_dw_get_light(); + vec4 value; + light->get_ambient(value); + ((float_t*)&value)[slider->callback_data.i32] = slider->scroll_bar->value; + light->set_ambient(value); + } +} + +LightDw::DiffuseSlider::DiffuseSlider(LightDw* light_dw, dw::Widget* parent) { + this->light_dw = light_dw; + r = 0; + g = 0; + b = 0; + a = 0; + + dw::Composite* comp = dynamic_cast(parent); + if (comp) { + light_data* light = &rctx_ptr->light_set[light_dw_light_set_id].lights[LIGHT_TONE_CURVE]; + + dw::Label* label = new dw::Label(comp); + label->SetText("DIFFUSE"); + + vec4 value; + light->get_diffuse(value); + + r = dw::Slider::Create(comp); + r->SetText("R"); + r->format = "%4.3f"; + r->scroll_bar->SetParams(value.x, 0.0f, 2.0f, 0.2f, 0.01f, 0.1f); + r->callback_data.i64 = 0; + r->AddSelectionListener(this); + + g = dw::Slider::Create(comp); + g->SetText("G"); + g->format = "%4.3f"; + g->scroll_bar->SetParams(value.y, 0.0f, 2.0f, 0.2f, 0.01f, 0.1f); + g->callback_data.i64 = 1; + g->AddSelectionListener(this); + + b = dw::Slider::Create(comp); + b->SetText("B"); + b->format = "%4.3f"; + b->scroll_bar->SetParams(value.z, 0.0f, 2.0f, 0.2f, 0.01f, 0.1f); + b->callback_data.i64 = 2; + b->AddSelectionListener(this); + } +} + +LightDw::DiffuseSlider::~DiffuseSlider() { + +} + +void LightDw::DiffuseSlider::Callback(dw::SelectionListener::CallbackData* data) { + dw::Slider* slider = dynamic_cast(data->widget); + if (slider) { + light_data* light = light_dw_get_light(); + vec4 value; + light->get_diffuse(value); + ((float_t*)&value)[slider->callback_data.i32] = slider->scroll_bar->value; + light->set_diffuse(value); + } +} + +LightDw::SpecularSlider::SpecularSlider(LightDw* light_dw, dw::Widget* parent) { + this->light_dw = light_dw; + r = 0; + g = 0; + b = 0; + a = 0; + + dw::Composite* comp = dynamic_cast(parent); + if (comp) { + light_data* light = &rctx_ptr->light_set[light_dw_light_set_id].lights[LIGHT_TONE_CURVE]; + + dw::Label* label = new dw::Label(comp); + label->SetText("SPECULAR"); + + vec4 value; + light->get_specular(value); + + r = dw::Slider::Create(comp); + r->SetText("R"); + r->format = "%4.3f"; + r->scroll_bar->SetParams(value.x, 0.0f, 2.0f, 0.2f, 0.01f, 0.1f); + r->callback_data.i64 = 0; + r->AddSelectionListener(this); + + g = dw::Slider::Create(comp); + g->SetText("G"); + g->format = "%4.3f"; + g->scroll_bar->SetParams(value.y, 0.0f, 2.0f, 0.2f, 0.01f, 0.1f); + g->callback_data.i64 = 1; + g->AddSelectionListener(this); + + b = dw::Slider::Create(comp); + b->SetText("B"); + b->format = "%4.3f"; + b->scroll_bar->SetParams(value.z, 0.0f, 2.0f, 0.2f, 0.01f, 0.1f); + b->callback_data.i64 = 2; + b->AddSelectionListener(this); + + a = dw::Slider::Create(comp); + a->SetText("A"); + a->format = "%4.3f"; + a->scroll_bar->SetParams(value.z, 0.0f, 2.0f, 0.2f, 0.01f, 0.1f); + a->callback_data.i64 = 3; + a->AddSelectionListener(this); + } +} + +LightDw::SpecularSlider::~SpecularSlider() { + +} + +void LightDw::SpecularSlider::Callback(dw::SelectionListener::CallbackData* data) { + dw::Slider* slider = dynamic_cast(data->widget); + if (slider) { + light_data* light = light_dw_get_light(); + vec4 value; + light->get_specular(value); + ((float_t*)&value)[slider->callback_data.i32] = slider->scroll_bar->value; + light->set_specular(value); + } +} + +LightDw::PositionSlider::PositionSlider(LightDw* light_dw, dw::Widget* parent) { + this->light_dw = light_dw; + x = 0; + y = 0; + z = 0; + rot_y = 0; + + dw::Composite* comp = dynamic_cast(parent); + if (comp) { + light_data* light = &rctx_ptr->light_set[light_dw_light_set_id].lights[LIGHT_TONE_CURVE]; + + dw::Label* label = new dw::Label(comp); + label->SetText("SPECULAR"); + + vec3 value; + light->get_position(value); + + x = dw::Slider::Create(comp, (dw::Flags)(dw::FLAG_800 + | dw::HORIZONTAL), 0.0f, 0.0f, 160.0f, 20.0f, "slider"); + x->SetText("X"); + x->format = "%6.2f"; + SetPositionSliderParams(x, value.x); + x->callback_data.i64 = 0; + x->AddSelectionListener(this); + + y = dw::Slider::Create(comp, (dw::Flags)(dw::FLAG_800 + | dw::HORIZONTAL), 0.0f, 0.0f, 160.0f, 20.0f, "slider"); + y->SetText("Y"); + y->format = "%6.2f"; + SetPositionSliderParams(y, value.y); + y->callback_data.i64 = 1; + y->AddSelectionListener(this); + + z = dw::Slider::Create(comp, (dw::Flags)(dw::FLAG_800 + | dw::HORIZONTAL), 0.0f, 0.0f, 160.0f, 20.0f, "slider"); + z->SetText("Z"); + z->format = "%6.2f"; + SetPositionSliderParams(z, value.z); + z->callback_data.i64 = 2; + z->AddSelectionListener(this); + + rot_y = dw::Slider::Create(comp); + rot_y->SetText("ROTY"); + rot_y->format = "%2.2f"; + SetRotYParams(GetRotY(value.x, value.z)); + rot_y->callback_data.i64 = 3; + rot_y->AddSelectionListener(this); + } +} + +LightDw::PositionSlider::~PositionSlider() { + +} + +void LightDw::PositionSlider::Callback(dw::SelectionListener::CallbackData* data) { + dw::Slider* slider = dynamic_cast(data->widget); + if (slider) { + light_data* light = light_dw_get_light(); + + float_t pos_rot[4]; + light->get_position(*(vec3*)pos_rot); + pos_rot[slider->callback_data.i32] = slider->scroll_bar->value; + if (light->get_type() == LIGHT_SPOT) { + SetRotYParams(slider->scroll_bar->value); + SetRotation(pos_rot[0], pos_rot[2], pos_rot[3]); + light->set_position(*(vec3*)pos_rot); + SetPositionSliderParams(x, pos_rot[0]); + SetPositionSliderParams(z, pos_rot[2]); + } + else { + light->set_position(*(vec3*)pos_rot); + SetPositionSliderParams(slider, pos_rot[slider->callback_data.i32]); + SetRotYParams(GetRotY(pos_rot[0], pos_rot[2])); + } + + if (light_dw_sync_pos) { + light_set* set = &rctx_ptr->light_set[light_dw_light_set_id]; + switch (light_dw_light_id) { + case LIGHT_CHARA: + set->lights[LIGHT_TONE_CURVE].set_position(*(vec3*)pos_rot); + break; + case LIGHT_TONE_CURVE: + set->lights[LIGHT_CHARA].set_position(*(vec3*)pos_rot); + break; + } + } + } +} + +float_t LightDw::PositionSlider::GetRotY(float_t x, float_t z) { + if (fabsf(x) > 0.000001f || fabsf(z) > 0.000001f) + return atan2f(z, x) * RAD_TO_DEG_FLOAT; + return 0.0f; +} + +void LightDw::PositionSlider::SetPositionSliderParams(dw::Slider* slider, float_t value) { + float_t scale; + if (fabsf(value) < 150.0f) + scale = 1.0f; + else if (fabsf(value) < 1900.0f) + scale = 10.0f; + else + scale = 50.0f; + slider->scroll_bar->SetParams(value, 1.0f - scale * 200.0f, + scale * 200.0f - 1.0f, scale * 40.0f, scale * 0.02f, scale); +} + +void LightDw::PositionSlider::SetRotYParams(float_t value) { + rot_y->scroll_bar->SetParams(value, -180.0f, 180.0f, 0.2f, 0.01f, 0.1f); +} + +void LightDw::PositionSlider::SetRotation(float_t& x, float_t& z, float_t rot_y) { + rot_y *= DEG_TO_RAD_FLOAT; + float_t length = sqrtf(x * x + z * z); + x = cosf(rot_y) * length; + z = sinf(rot_y) * length; +} + +LightDw::DirectionSlider::DirectionSlider(LightDw* light_dw, dw::Widget* parent) { + this->light_dw = light_dw; + x = 0; + y = 0; + z = 0; + + dw::Composite* comp = dynamic_cast(parent); + if (comp) { + light_data* light = &rctx_ptr->light_set[light_dw_light_set_id].lights[LIGHT_TONE_CURVE]; + + dw::Label* label = new dw::Label(comp); + label->SetText("SPOT DIRECTION"); + + vec3 value; + light->get_spot_direction(value); + + x = dw::Slider::Create(comp); + x->SetText("R"); + x->format = "%5.2f"; + x->scroll_bar->SetParams(value.x, -1.0f, 1.0f, 0.2f, 0.02f, 0.1f); + x->callback_data.i64 = 0; + x->AddSelectionListener(this); + + y = dw::Slider::Create(comp); + y->SetText("G"); + y->format = "%5.2f"; + y->scroll_bar->SetParams(value.y, -1.0f, 1.0f, 0.2f, 0.02f, 0.1f); + y->callback_data.i64 = 1; + y->AddSelectionListener(this); + + z = dw::Slider::Create(comp); + z->SetText("B"); + z->format = "%5.2f"; + z->scroll_bar->SetParams(value.z, -1.0f, 1.0f, 0.2f, 0.02f, 0.1f); + z->callback_data.i64 = 2; + z->AddSelectionListener(this); + } +} + +LightDw::DirectionSlider::~DirectionSlider() { + +} + +void LightDw::DirectionSlider::Callback(dw::SelectionListener::CallbackData* data) { + dw::Slider* slider = dynamic_cast(data->widget); + if (slider) { + light_data* light = light_dw_get_light(); + vec3 value; + light->get_spot_direction(value); + ((float_t*)&value)[slider->callback_data.i32] = slider->scroll_bar->value; + light->set_spot_direction(value); + } +} + +LightDw::ExponentSlider::ExponentSlider(LightDw* light_dw, dw::Widget* parent) { + this->light_dw = light_dw; + exponent = 0; + + dw::Composite* comp = dynamic_cast(parent); + if (comp) { + light_data* light = &rctx_ptr->light_set[light_dw_light_set_id].lights[LIGHT_TONE_CURVE]; + + dw::Label* label = new dw::Label(comp); + label->SetText("SPOT EXPONENT"); + + float_t value = light->get_spot_exponent(); + + exponent = dw::Slider::Create(comp); + exponent->SetText("EXPONENT"); + exponent->format = "%8.4f"; + exponent->scroll_bar->SetParams(value, 0.0f, 128.0f, 12.8f, 1.0f, 10.0f); + exponent->AddSelectionListener(this); + } +} + +LightDw::ExponentSlider::~ExponentSlider() { + +} + +void LightDw::ExponentSlider::Callback(dw::SelectionListener::CallbackData* data) { + dw::Slider* slider = dynamic_cast(data->widget); + if (slider) { + light_data* light = light_dw_get_light(); + light->set_spot_exponent(slider->scroll_bar->value); + } +} + +LightDw::CutoffSlider::CutoffSlider(LightDw* light_dw, dw::Widget* parent) { + this->light_dw = light_dw; + cutoff = 0; + + dw::Composite* comp = dynamic_cast(parent); + if (comp) { + light_data* light = &rctx_ptr->light_set[light_dw_light_set_id].lights[LIGHT_TONE_CURVE]; + + dw::Label* label = new dw::Label(comp); + label->SetText("SPOT CUTOFF"); + + float_t value = light->get_spot_cutoff(); + + cutoff = dw::Slider::Create(comp); + cutoff->SetText("CUTOFF"); + cutoff->format = "%8.4f"; + cutoff->scroll_bar->SetParams(value, 0.0f, 9.0f, 9.0f, 1.0f, 5.0f); + cutoff->AddSelectionListener(this); + } +} + +LightDw::CutoffSlider::~CutoffSlider() { + +} + +void LightDw::CutoffSlider::Callback(dw::SelectionListener::CallbackData* data) { + dw::Slider* slider = dynamic_cast(data->widget); + if (slider) { + light_data* light = light_dw_get_light(); + light->set_spot_cutoff(slider->scroll_bar->value); + } +} + +LightDw::AttenuationSlider::AttenuationSlider(LightDw* light_dw, dw::Widget* parent) { + this->light_dw = light_dw; + constant = 0; + linear = 0; + quadratic = 0; + + dw::Composite* comp = dynamic_cast(parent); + if (comp) { + light_data* light = &rctx_ptr->light_set[light_dw_light_set_id].lights[LIGHT_TONE_CURVE]; + + dw::Label* label = new dw::Label(comp); + label->SetText("ATTENUATION"); + + light_attenuation value; + light->get_attenuation(value); + + constant = dw::Slider::Create(comp); + constant->SetText("CONSTANT"); + constant->format = "%8.4f"; + constant->scroll_bar->SetParams(value.constant, 0.0f, 1.0f, 0.1f, 0.01f, 0.1f); + constant->callback_data.i64 = 0; + constant->AddSelectionListener(this); + + linear = dw::Slider::Create(comp); + linear->SetText("LINEAR"); + linear->format = "%8.4f"; + linear->scroll_bar->SetParams(value.linear, 0.0f, 1.0f, 0.1f, 0.01f, 0.1f); + linear->callback_data.i64 = 1; + linear->AddSelectionListener(this); + + quadratic = dw::Slider::Create(comp); + quadratic->SetText("QUADRATIC"); + quadratic->format = "%8.4f"; + quadratic->scroll_bar->SetParams(value.quadratic, 0.0f, 1.0f, 0.1f, 0.01f, 0.1f); + quadratic->callback_data.i64 = 2; + quadratic->AddSelectionListener(this); + } +} + +LightDw::AttenuationSlider::~AttenuationSlider() { + +} + +void LightDw::AttenuationSlider::Callback(dw::SelectionListener::CallbackData* data) { + dw::Slider* slider = dynamic_cast(data->widget); + if (slider) { + light_data* light = light_dw_get_light(); + light_attenuation value; + light->get_attenuation(value); + ((float_t*)&value)[slider->callback_data.i32] = slider->scroll_bar->value; + light->set_attenuation(value); + } +} + +/*LightDw::File::File(LightDw* light_dw, dw::Widget* parent) { + +}*/ + +LightDw::LightDw() { + data_struct* aft_data = &data_list[DATA_AFT]; + stage_database* aft_stage_data = &aft_data->data_ft.stage_data; + + SetText("LIGHT"); + + dw::Composite* comp = new dw::Composite(this, dw::VERTICAL); + + //file = new LightDw::File(this, comp); + cut_light_enable_button = new LightDw::CutLightEnableButton(this, comp); + + dw::Label* stage_label = new dw::Label(comp); + stage_label->SetText("STAGE (Light/Fog/PP)"); + + stage = new dw::ListBox(comp); + + for (const stage_data& i : aft_stage_data->stage_data) + stage->list->AddItem(i.name); + + if (!light_dw_task.set) { + light_dw_task.curr_stage_index = max_def(task_stage_get_current_stage_index(), 0); + light_dw_task.stage_index = light_dw_task.curr_stage_index; + } + light_dw_task.set = false; + + stage->SetItemIndex(light_dw_task.curr_stage_index); + stage->SetMaxItems(30); + stage->AddSelectionListener(new dw::SelectionListenerOnHook(LightDw::StageCallback)); + + id_list_box = new LightDw::IdListBox(this, comp); + + g_ambient_slider = 0; + sync_pos_button = 0; + light_auth_enable_button = 0; + + if (light_dw_light_id == LIGHT_CHARA || light_dw_light_id == LIGHT_TONE_CURVE) { + g_ambient_slider = new LightDw::GAmbientSlider(this, comp); + sync_pos_button = new LightDw::SyncPosButton(this, comp); + light_auth_enable_button = new LightDw::LightAuthEnableButton(this, comp); + } + + type_list_box = new LightDw::TypeListBox(this, comp); + + ambient_slider = 0; + diffuse_slider = 0; + specular_slider = 0; + position_slider = 0; + direction_slider = 0; + exponent_slider = 0; + cutoff_slider = 0; + attenuation_slider = 0; + + switch (type_list_box->type->list->selected_item) { + case LIGHT_PARALLEL: + ambient_slider = new LightDw::AmbientSlider(this, comp); + diffuse_slider = new LightDw::DiffuseSlider(this, comp); + specular_slider = new LightDw::SpecularSlider(this, comp); + position_slider = new LightDw::PositionSlider(this, comp); + break; + case LIGHT_POINT: + ambient_slider = new LightDw::AmbientSlider(this, comp); + diffuse_slider = new LightDw::DiffuseSlider(this, comp); + specular_slider = new LightDw::SpecularSlider(this, comp); + position_slider = new LightDw::PositionSlider(this, comp); + break; + case LIGHT_SPOT: + break; + } + if (!( - 1)) { + goto LABEL_113; + } + + if (!(type_list_box->type->list->selected_item - 2)) { + goto LABEL_113; + } + if (type_list_box->type->list->selected_item == 3) { + ambient_slider = new LightDw::AmbientSlider(this, comp); + diffuse_slider = new LightDw::DiffuseSlider(this, comp); + specular_slider = new LightDw::SpecularSlider(this, comp); + position_slider = new LightDw::PositionSlider(this, comp); + direction_slider = new LightDw::DirectionSlider(this, comp); + + if (light_dw_light_id == LIGHT_REFLECT) { + light_clip_plane clip_plane; + light_dw_get_light()->get_clip_plane(clip_plane); + +#if DW_TRANSLATE + const char* reflective_surface_clip_stage_text = "Reflective Surface Clip (STAGE)"; +#else + const char* reflective_surface_clip_stage_text = "反射面クリップ(STAGE)"; +#endif + + dw::Button* reflective_surface_clip_stage = new dw::Button(comp, dw::CHECKBOX); + reflective_surface_clip_stage->SetText(reflective_surface_clip_stage_text); + reflective_surface_clip_stage->SetValue(clip_plane.data[1]); + reflective_surface_clip_stage->callback = LightDw::ReflectiveSurfaceClipStageCallback; + } + + exponent_slider = new LightDw::ExponentSlider(this, comp); + cutoff_slider = new LightDw::CutoffSlider(this, comp); + attenuation_slider = new LightDw::AttenuationSlider(this, comp); + } + +LABEL_113: + comp->UpdateLayout(); + + float_t size_y = comp->rect.size.y; + rect.pos = light_dw_rect.pos; + SetSize(light_dw_rect.size); + + comp->v_bar->SetMax(size_y - comp->rect.size.y); +} + +LightDw::~LightDw() { + +} + +void LightDw::Hide() { + light_dw_rect = this->parent_shell->rect; + dw::Shell::Hide(); + light_dw = 0i64; + if (!light_dw_task.ready) + light_dw_task.del(); +} + +void LightDw::ResetData() { + ResetStage(-1); +} + +void LightDw::ResetStage(int32_t stage_index) { + light_dw_task.ready = true; + if (stage_index != -1) { + light_dw_task.set = true; + light_dw_task.stage_index = stage_index; + light_dw_task.curr_stage_index = stage_index; + } + + Hide(); + + light_dw_init(); + light_dw_task.ready = false; +} + +void LightDw::ReflectiveSurfaceClipStageCallback(dw::Widget* data) { + if (!light_dw_get()) + return; + + dw::Button* button = dynamic_cast(data); + if (button) { + light_data* light = light_dw_get_light(); + light_clip_plane clip_plane; + light->get_clip_plane(clip_plane); + clip_plane.data[1] = button->value; + light->set_clip_plane(clip_plane); + } +} + +void LightDw::StageCallback(dw::Widget* data) { + dw::ListBox* list_box = dynamic_cast(data); + if (list_box) { + data_struct* aft_data = &data_list[DATA_AFT]; + stage_database* aft_stage_data = &aft_data->data_ft.stage_data; + + std::string name = list_box->GetSelectedItemStr(); + light_dw_task.stage_index = aft_stage_data->get_stage_index(name.c_str()); + + if (light_dw_task.curr_stage_index != light_dw_task.stage_index) + light_param_data_storage_data_load_stage(light_dw_task.stage_index); + } +} + +LightDwTask::LightDwTask() : ready(), set() { + stage_index = -1; + curr_stage_index = -1; +} + +LightDwTask::~LightDwTask() { + +} + +bool LightDwTask::ctrl() { + if (stage_index != curr_stage_index && !light_param_data_storage_data_load_file()) { + set = true; + curr_stage_index = stage_index; + light_param_data_storage_data_set_stage(stage_index); + } + return false; +} + +void LightDwTask::disp() { + +} + +static LightDw* light_dw_get() { + return light_dw; +} + +static light_data* light_dw_get_light() { + return &rctx_ptr->light_set[light_dw_light_set_id].lights[light_dw_light_id]; +} diff --git a/src/ReDIVA/graphics/light.hpp b/src/ReDIVA/graphics/light.hpp new file mode 100644 index 00000000..9fe9c3d4 --- /dev/null +++ b/src/ReDIVA/graphics/light.hpp @@ -0,0 +1,10 @@ +/* + by korenkonder + GitHub/GitLab: korenkonder +*/ + +#pragma once + +#include "../../KKdLib/default.hpp" + +extern void light_dw_init(); diff --git a/src/ReDIVA/dw_console.cpp b/src/ReDIVA/information/dw_console.cpp similarity index 98% rename from src/ReDIVA/dw_console.cpp rename to src/ReDIVA/information/dw_console.cpp index 78bb5f4c..9ffbd226 100644 --- a/src/ReDIVA/dw_console.cpp +++ b/src/ReDIVA/information/dw_console.cpp @@ -4,8 +4,8 @@ */ #include "dw_console.hpp" -#include "../KKdLib/str_utils.hpp" -#include "dw.hpp" +#include "../../KKdLib/str_utils.hpp" +#include "../dw.hpp" struct c_buff_data { char* buf; @@ -76,7 +76,7 @@ static const char* dw_console_c_buff_array_get_buf(int32_t index); void dw_console_init() { if (!dw_console) { - dw_console = new DwConsole(); + dw_console = new DwConsole; dw_console->sub_1402F38B0(); } else diff --git a/src/ReDIVA/dw_console.hpp b/src/ReDIVA/information/dw_console.hpp similarity index 96% rename from src/ReDIVA/dw_console.hpp rename to src/ReDIVA/information/dw_console.hpp index 30a91ad7..5d3b9179 100644 --- a/src/ReDIVA/dw_console.hpp +++ b/src/ReDIVA/information/dw_console.hpp @@ -5,7 +5,7 @@ #pragma once -#include "../KKdLib/default.hpp" +#include "../../KKdLib/default.hpp" enum dw_console_index { DW_CONSOLE_SYSTEM, diff --git a/src/ReDIVA/input.cpp b/src/ReDIVA/input.cpp index fdb69841..134c4252 100644 --- a/src/ReDIVA/input.cpp +++ b/src/ReDIVA/input.cpp @@ -222,8 +222,6 @@ namespace Input { double_t freq_hist = render_timer->get_freq_hist(); double_t frame_speed = freq / freq_hist; - classes_process_input(classes, classes_count); - if (input_locked) { input_reset_mouse_position = true; input_locked = false; diff --git a/src/ReDIVA/pv_game/pv_game_pv_data.cpp b/src/ReDIVA/pv_game/pv_game_pv_data.cpp index eded49da..af1bd96b 100644 --- a/src/ReDIVA/pv_game/pv_game_pv_data.cpp +++ b/src/ReDIVA/pv_game/pv_game_pv_data.cpp @@ -7,7 +7,7 @@ #include "../../CRE/rob/motion.hpp" #include "../../CRE/pv_expression.hpp" #include "../../CRE/pv_param.hpp" -#include "../dw_console.hpp" +#include "../information/dw_console.hpp" #include "pv_game.hpp" #include "pv_game_camera.hpp" #include "pv_game_music.hpp" diff --git a/src/ReDIVA/render.cpp b/src/ReDIVA/render.cpp index 7b9b0eb9..7bf02d3c 100644 --- a/src/ReDIVA/render.cpp +++ b/src/ReDIVA/render.cpp @@ -54,8 +54,8 @@ #include "data_test/motion_test.hpp" #include "data_test/selector.hpp" #include "data_test/stage_test.hpp" +#include "information/dw_console.hpp" #include "pv_game/pv_game.hpp" -#include "dw_console.hpp" #include "game_state.hpp" #include "glitter_editor.hpp" #include "font_info.hpp" @@ -1106,8 +1106,6 @@ static void render_context_ctrl(render_context* rctx) { #endif #endif - classes_process_ctrl(classes, classes_count); - rctx_ptr = rctx; input_state_ctrl(); game_state_ctrl(); @@ -1176,7 +1174,6 @@ static void render_context_disp(render_context* rctx) { #endif glViewport(0, 0, rctx->screen_width, rctx->screen_height); - classes_process_disp(classes, classes_count); if (draw_imgui) render_context_imgui(rctx); @@ -1369,8 +1366,6 @@ static void render_drop_glfw(GLFWwindow* window, int32_t count, char** paths) { if (!count || !paths) return; - classes_process_drop(classes, classes_count, count, paths); - #if ReDIVA_DEV if (app::TaskWork::has_task(&glitter_editor)) { glitter_editor.file.assign(paths[0]); @@ -1445,24 +1440,16 @@ static void render_imgui_context_menu(classes_data* classes, ImGui::MenuItem(c->name, 0, false, false); else if (ImGui::MenuItem(c->name, 0)) { if (!(c->data.flags & CLASS_INIT)) { - c->data.lock = new lock_cs; - if (c->data.lock->check_init() && c->init) { - lock_lock(c->data.lock); + if (c->init) { if (c->init(&c->data, rctx)) c->data.flags = CLASS_INIT; else c->data.flags = (class_flags)(CLASS_DISPOSED | CLASS_HIDDEN); - lock_unlock(c->data.lock); } } - if (c->data.lock->check_init()) { - lock_lock(c->data.lock); - if (c->data.flags & CLASS_INIT && ((c->show && c->show(&c->data)) || !c->show)) - enum_and(c->data.flags, ~(CLASS_HIDE | CLASS_HIDDEN | CLASS_HIDE_WINDOW)); - lock_unlock(c->data.lock); - } - } + if (c->data.flags & CLASS_INIT) + enum_and(c->data.flags, ~(CLASS_HIDE | CLASS_HIDDEN | CLASS_HIDE_WINDOW)); } } } diff --git a/src/ReDIVA/shared.cpp b/src/ReDIVA/shared.cpp index ec210554..48d2ee1c 100644 --- a/src/ReDIVA/shared.cpp +++ b/src/ReDIVA/shared.cpp @@ -15,15 +15,7 @@ classes_data classes[] = { CLASSES_DATA_NO_FUNC, CLASSES_DATA_NO_FUNC, CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, { - {}, (class_flags)CLASS_INIT, false, CLASS_DATA_NO_DATA, @@ -37,15 +29,7 @@ classes_data classes[] = { CLASSES_DATA_NO_FUNC, CLASSES_DATA_NO_FUNC, CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, { - {}, (class_flags)CLASS_INIT, false, CLASS_DATA_NO_DATA, @@ -59,15 +43,7 @@ classes_data classes[] = { CLASSES_DATA_NO_FUNC, CLASSES_DATA_NO_FUNC, CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, - CLASSES_DATA_NO_FUNC, { - {}, (class_flags)CLASS_INIT, false, CLASS_DATA_NO_DATA,