diff options
Diffstat (limited to 'src/scenes/world_map.c')
| -rw-r--r-- | src/scenes/world_map.c | 84 |
1 files changed, 81 insertions, 3 deletions
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;
}
}
|
