summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/include/scenes/save_state_select.h2
-rw-r--r--src/include/settings.h2
-rw-r--r--src/scenes/menu_scene.c2
-rw-r--r--src/scenes/save_state_select.c14
-rw-r--r--src/scenes/settings_scene.c26
-rw-r--r--src/scenes/world_map.c84
6 files changed, 117 insertions, 13 deletions
diff --git a/src/include/scenes/save_state_select.h b/src/include/scenes/save_state_select.h
index 260bec2..414a787 100644
--- a/src/include/scenes/save_state_select.h
+++ b/src/include/scenes/save_state_select.h
@@ -7,6 +7,8 @@
#ifndef INCLUDE_SELECT_SAVE_SCENE
#define INCLUDE_SELECT_SAVE_SCENE
+bool is_selecting_save_location = false;
+
void save_state_select_scene_init();
void save_state_select_scene_render(platform_window* window);
void save_state_select_scene_update(platform_window* window);
diff --git a/src/include/settings.h b/src/include/settings.h
index cba99ad..d6ab87a 100644
--- a/src/include/settings.h
+++ b/src/include/settings.h
@@ -25,4 +25,6 @@ float volume_sfx = 0.2f;
bool option_vsync = true;
bool option_fullscreen = false;
+bool is_editing_settings_from_ingame = false;
+
#endif \ No newline at end of file
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;
}
}