| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- #include "scene_credits.h"
- #include "app.h"
- #include "wave/calc.h"
- #include "wave/scene_management.h"
- #include "racso_sokoban_icons.h"
- #include "wave/graphics/icons.h"
- #include "wave/graphics/icon_drawing.h"
- #include "gui/canvas.h"
- typedef enum Screen
- {
- Screen_ControlsGuide,
- Screen_Credits,
- Screen_COUNT
- } Screen;
- static Screen currentScreen;
- void credits_transition_callback(int from, int to, void* context)
- {
- UNUSED(from);
- UNUSED(to);
- UNUSED(context);
- currentScreen = 0;
- }
- void render_boxed_text(Canvas* canvas, char* text, int x, int y)
- {
- int fontHeight = canvas_current_font_height(canvas);
- int textWidth = strlen(text) * fontHeight * 2 / 3;
- canvas_set_color(canvas, ColorWhite);
- canvas_draw_box(canvas, x, y - fontHeight / 2, textWidth, fontHeight - 1);
- canvas_set_color(canvas, ColorBlack);
- canvas_draw_frame(canvas, x - 1, y - fontHeight / 2 - 1, textWidth + 2, fontHeight + 1);
- canvas_draw_str_aligned(canvas, x + textWidth / 2, y, AlignCenter, AlignCenter, text);
- }
- void render_controls_guide(Canvas* canvas)
- {
- canvas_clear(canvas);
- canvas_set_color(canvas, ColorBlack);
- canvas_set_font(canvas, FontPrimary);
- canvas_draw_str_aligned(canvas, 64, 1, AlignCenter, AlignTop, "Controls");
- canvas_set_font(canvas, FontKeyboard);
- int x = 32, y = 32;
- draw_icon_aligned(canvas, x, y, AlignCenter, AlignCenter, &I_icon_button_ok);
- draw_icon_aligned(canvas, x, y - 10, AlignCenter, AlignBottom, &I_icon_button_up);
- draw_icon_aligned(canvas, x, y + 10, AlignCenter, AlignTop, &I_icon_button_down);
- draw_icon_aligned(canvas, x - 10, y, AlignRight, AlignCenter, &I_icon_button_left);
- draw_icon_aligned(canvas, x + 10, y, AlignLeft, AlignCenter, &I_icon_button_right);
- draw_icon_aligned(canvas, x + 40, y + 20, AlignLeft, AlignCenter, &I_icon_button_back);
- render_boxed_text(canvas, "Move", 36, 18);
- render_boxed_text(canvas, "Undo", 38, 34);
- render_boxed_text(canvas, "Exit", 90, 54);
- }
- void render_credits(Canvas* canvas)
- {
- canvas_clear(canvas);
- canvas_set_color(canvas, ColorBlack);
- canvas_set_font(canvas, FontPrimary);
- canvas_draw_str_aligned(canvas, 64 - 10, 1, AlignRight, AlignTop, "Made with");
- canvas_draw_icon(canvas, 64 - 4, 0, &I_ace_spades);
- canvas_draw_str_aligned(canvas, 65 + 10, 1, AlignLeft, AlignTop, "by Racso");
- int boxSize = 10;
- int x = 64 - boxSize * 3 / 2;
- int y = 32 - boxSize * 3 / 2;
- canvas_draw_box(canvas, x + boxSize, y, boxSize, boxSize);
- canvas_draw_box(canvas, x + 2 * boxSize, y, boxSize, boxSize);
- canvas_draw_box(canvas, x + boxSize, y + boxSize, boxSize, boxSize);
- canvas_draw_box(canvas, x + boxSize, y + 2 * boxSize, boxSize, boxSize);
- canvas_draw_box(canvas, x, y + boxSize, boxSize, boxSize);
- canvas_set_font(canvas, FontKeyboard);
- canvas_draw_str_aligned(canvas, 64, 62, AlignCenter, AlignBottom, "https://rac.so");
- }
- void credits_render_callback(Canvas* const canvas, void* context)
- {
- UNUSED(context);
- if (currentScreen == Screen_ControlsGuide)
- render_controls_guide(canvas);
- else if (currentScreen == Screen_Credits)
- render_credits(canvas);
- }
- void credits_input_callback(InputKey key, InputType type, void* context)
- {
- UNUSED(key);
- AppContext* app = (AppContext*)context;
- if (type != InputTypePress)
- return;
- currentScreen += 1;
- if (currentScreen >= Screen_COUNT)
- scene_manager_set_scene(app->sceneManager, SceneType_Menu);
- }
|