From 81cc1fe615023e2d03b4373a3ac536f7dbcb0ea9 Mon Sep 17 00:00:00 2001 From: Aldrik Ramaekers Date: Sat, 30 Nov 2024 23:09:41 +0100 Subject: close #26 --- src/scenes/menu_scene.c | 2 + src/scenes/save_state_select.c | 14 ++++++- src/scenes/settings_scene.c | 26 +++++++++---- src/scenes/world_map.c | 84 ++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 113 insertions(+), 13 deletions(-) (limited to 'src/scenes') diff --git a/src/scenes/menu_scene.c b/src/scenes/menu_scene.c index 73ec22d..3061f92 100644 --- a/src/scenes/menu_scene.c +++ b/src/scenes/menu_scene.c @@ -36,11 +36,13 @@ static void menu_draw_options(platform_window* window) if (button_render(scale, BUTTON_ENABLED, "Continue", panel_x + pad_x, vertical_pad + panel_y + pad_y*2 + button_h*1, button_w, button_h)) { game_set_active_scene(GAME_STATE_SELECT_SAVE); + is_selecting_save_location = false; } if (button_render(scale, BUTTON_ENABLED, "Settings", panel_x + pad_x, vertical_pad + panel_y + pad_y*3 + button_h*2, button_w, button_h)) { game_set_active_scene(GAME_STATE_SETTINGS); + is_editing_settings_from_ingame = false; } if (button_render(scale, BUTTON_ENABLED, "Quit", panel_x + pad_x, vertical_pad + panel_y + pad_y*4 + button_h*3, button_w, button_h)) diff --git a/src/scenes/save_state_select.c b/src/scenes/save_state_select.c index 1db5d11..1bd7bc1 100644 --- a/src/scenes/save_state_select.c +++ b/src/scenes/save_state_select.c @@ -81,7 +81,12 @@ static void save_state_draw_options(platform_window* window) s32 back_y = panel_y + panel_h - (back_h/2) - 1; if (push_back_button(scale, back_x, back_y, back_w, back_h)) { - game_set_active_scene(GAME_STATE_MENU); + if (is_selecting_save_location) { + game_set_active_scene(GAME_STATE_WORLD_MAP); + } + else { + game_set_active_scene(GAME_STATE_MENU); + } } } } @@ -95,7 +100,12 @@ void save_state_select_scene_render(platform_window* window) void save_state_select_scene_update(platform_window* window) { if (keyboard_is_key_pressed(KEY_ESCAPE)) { - game_set_active_scene(GAME_STATE_MENU); + if (is_selecting_save_location) { + game_set_active_scene(GAME_STATE_WORLD_MAP); + } + else { + game_set_active_scene(GAME_STATE_MENU); + } } } diff --git a/src/scenes/settings_scene.c b/src/scenes/settings_scene.c index 23655d3..d5573f5 100644 --- a/src/scenes/settings_scene.c +++ b/src/scenes/settings_scene.c @@ -2,7 +2,7 @@ enum settings_state { SETTINGS_AUDIO, SETTINGS_DISPLAY, - SETTINGS_KEYBINDINGS, + //SETTINGS_KEYBINDINGS, }; enum settings_state settings_state = SETTINGS_AUDIO; @@ -90,7 +90,7 @@ static void settings_draw_options(platform_window* window) // Buttons s32 button_pad = 10*scale; - s32 button_w = (panel_w-(button_pad*4))/3; + s32 button_w = (panel_w-(button_pad*4))/2; s32 button_h = 37*scale; s32 button_y = panel_y + button_pad*1.3f; s32 button_x = panel_x + button_pad; @@ -105,10 +105,10 @@ static void settings_draw_options(platform_window* window) settings_state = SETTINGS_DISPLAY; } - if (button_render(scale, BUTTON_ENABLED, "Keybindings", button_x + (button_w + button_pad)*2, button_y, button_w, button_h)) - { - settings_state = SETTINGS_KEYBINDINGS; - } + //if (button_render(scale, BUTTON_ENABLED, "Keybindings", button_x + (button_w + button_pad)*2, button_y, button_w, button_h)) + //{ + // settings_state = SETTINGS_KEYBINDINGS; + //} s32 detail_pad = 25*scale; s32 detail_w = panel_w - (detail_pad*2)-(button_pad*2); @@ -131,7 +131,12 @@ static void settings_draw_options(platform_window* window) s32 back_y = panel_y + panel_h - (back_h/2) - 1; if (push_back_button(scale, back_x, back_y, back_w, back_h)) { - game_set_active_scene(GAME_STATE_MENU); + if (is_editing_settings_from_ingame) { + game_set_active_scene(GAME_STATE_WORLD_MAP); + } + else { + game_set_active_scene(GAME_STATE_MENU); + } } } } @@ -143,7 +148,12 @@ void settings_scene_render(platform_window* window) { void settings_scene_update(platform_window* window) { if (keyboard_is_key_pressed(KEY_ESCAPE)) { - game_set_active_scene(GAME_STATE_MENU); + if (is_editing_settings_from_ingame) { + game_set_active_scene(GAME_STATE_WORLD_MAP); + } + else { + game_set_active_scene(GAME_STATE_MENU); + } } } diff --git a/src/scenes/world_map.c b/src/scenes/world_map.c index af50eed..4dfef05 100644 --- a/src/scenes/world_map.c +++ b/src/scenes/world_map.c @@ -5,6 +5,7 @@ typedef enum t_world_map_scene_state WORLD_SCENE_STATE_LOG, WORLD_SCENE_STATE_INSIGHTS, WORLD_SCENE_STATE_INVEST, + WORLD_SCENE_MENU, } world_map_scene_state; typedef union t_world_map_scene_data @@ -1102,13 +1103,82 @@ static void world_map_draw_night(platform_window* window) renderer->render_image_tint(img_shadow, shadow2_offset, area.y + camera_y, area.w*zoom, area.h*zoom, rgba(255,255,255,100)); } +#define PUSH_MENU_BTN(txt, index, ref)\ +{\ + ref = false;\ + char* _txt = txt;\ + font* fnt_big = fnt_rd24;\ + s32 _txt_pad = 15*scale;\ + s32 _pad = 40*scale;\ + s32 _btn_x = panel_x + _pad;\ + s32 _btn_w = panel_w - (_pad*2);\ + s32 _btn_h = fnt_big->px_h + (_txt_pad*2);\ + s32 _btn_y = panel_y + _pad + (_btn_h * index) + index*3;\ + bool hovered = (_global_mouse.x >= _btn_x && _global_mouse.x <= _btn_x+_btn_w\ + && _global_mouse.y >= _btn_y && _global_mouse.y <= _btn_y+_btn_h);\ +\ + s32 _txt_x = _btn_x + (_btn_w/2) - (renderer->calculate_text_width(fnt_big, _txt) / 2);\ + s32 _txt_y = _btn_y + _txt_pad;\ +\ + if (!hovered) renderer->render_rectangle(_btn_x, _btn_y, _btn_w, _btn_h, COLOR_BUTTON);\ + else renderer->render_rectangle(_btn_x, _btn_y, _btn_w, _btn_h, LEGENDA_HOVER_BACKGROUND_COLOR);\ + \ + renderer->render_text(fnt_big, _txt_x, _txt_y, _txt, COLOR_TEXT);\ + if (hovered) {\ + platform_set_cursor(window, CURSOR_POINTER); \ + if (is_left_clicked()) {\ + ref = true;\ + }\ + else ref = false;\ + }\ +} + +static void world_map_draw_menu(platform_window* window) +{ + s32 screen_center_x = area.x + (area.w/2); + s32 screen_center_y = area.y + (area.h/2); + + s32 panel_h = 350 * scale; + s32 panel_w = 350 * scale; + + s32 panel_x = screen_center_x - (panel_w/2); + s32 panel_y = screen_center_y - (panel_h/2); + panel_render(scale, panel_x, panel_y, panel_w, panel_h); + + bool clicked = false; + PUSH_MENU_BTN("Continue", 0, clicked); + if (clicked) { + scene_state = WORLD_SCENE_STATE_IDLE; + } + + PUSH_MENU_BTN("Save", 1, clicked); + if (clicked) { + game_set_active_scene(GAME_STATE_SELECT_SAVE); + scene_state = WORLD_SCENE_STATE_IDLE; + is_selecting_save_location = true; + } + + PUSH_MENU_BTN("Settings", 2, clicked); + if (clicked) { + game_set_active_scene(GAME_STATE_SETTINGS); + scene_state = WORLD_SCENE_STATE_IDLE; + is_editing_settings_from_ingame = true; + } + + PUSH_MENU_BTN("Quit", 5, clicked); + if (clicked) { + game_set_active_scene(GAME_STATE_MENU); + scene_state = WORLD_SCENE_STATE_IDLE; + } +} + void world_map_scene_render(platform_window* window) { renderer->set_render_depth(5); world_handle_scroll(window); - world_map_draw_info_panel(window, true); + world_map_draw_info_panel(window, scene_state != WORLD_SCENE_MENU); renderer->set_render_depth(4); switch (scene_state) @@ -1126,6 +1196,10 @@ void world_map_scene_render(platform_window* window) case WORLD_SCENE_STATE_INVEST: world_map_draw_invest_panel(window); break; + + case WORLD_SCENE_MENU: + world_map_draw_menu(window); + break; } renderer->set_render_depth(3); @@ -1160,9 +1234,13 @@ void world_map_scene_render(platform_window* window) void world_map_scene_update(platform_window* window) { - world_update(window, _active_world); + if (scene_state != WORLD_SCENE_MENU) world_update(window, _active_world); if (keyboard_is_key_pressed(KEY_ESCAPE)) { - scene_state = WORLD_SCENE_STATE_IDLE; + if (scene_state == WORLD_SCENE_STATE_IDLE) { + + scene_state = WORLD_SCENE_MENU; + } + else scene_state = WORLD_SCENE_STATE_IDLE; } } -- cgit v1.2.3-70-g09d2