| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- #pragma once
- #include <furi.h>
- #include <gui/gui_i.h>
- #include <u8g2/u8g2.h>
- // global
- #define SCALE 32
- // screen
- #define SCREEN_WIDTH GUI_DISPLAY_WIDTH
- #define SCREEN_HEIGHT GUI_DISPLAY_HEIGHT
- #define BONDARIES_X_LEFT 40
- #define BONDARIES_X_RIGHT 88
- // player
- #define DOLPHIN_WIDTH 32
- #define DOLPHIN_HEIGHT 32
- #define DOLPHIN_CENTER (SCREEN_WIDTH / 2 - DOLPHIN_WIDTH)
- #define SPEED_X 4
- #define SPEED_Y 4
- #define ACTIONS_NUM 4
- #define DOLPHIN_DEFAULT_Y 2
- #define MAX_FRAMES 3
- // world
- #define WORLD_WIDTH 256
- #define WORLD_HEIGHT 192
- #define LAYERS 8
- #define DOLPHIN_LAYER 6
- #define PARALLAX_MOD 7
- #define PARALLAX(layer) layer / PARALLAX_MOD - layer
- #define DIALOG_PROGRESS 250
- enum Actions { IDLE = 0, EMOTE, INTERACT, MINDCONTROL };
- static const uint16_t default_timeout[] =
- {[IDLE] = 100, [EMOTE] = 50, [INTERACT] = 10, [MINDCONTROL] = 50};
- typedef enum {
- EventTypeTick,
- EventTypeKey,
- } EventType;
- typedef struct {
- union {
- InputEvent input;
- } value;
- EventType type;
- } AppEvent;
- typedef struct {
- int32_t x;
- int32_t y;
- } Vec2;
- typedef struct {
- osMessageQueueId_t mqueue;
- Gui* gui;
- ViewPort* view_port;
- osTimerId_t* timer;
- } SceneAppGui;
- typedef struct {
- uint8_t layer;
- uint16_t timeout;
- Vec2 pos;
- uint8_t width;
- uint8_t height;
- void (*draw)(Canvas* canvas, void* model);
- void (*callback)(Canvas* canvas, void* model);
- } Item;
- typedef enum {
- DirUp = 0,
- DirRight,
- DirDown,
- DirLeft,
- } FrameDirectionEnum;
- typedef struct {
- const Icon* f;
- const Icon* b;
- } DolphinGfxAsset;
- typedef struct {
- const DolphinGfxAsset frames[MAX_FRAMES];
- const uint8_t total;
- } DolphinFrame;
- typedef struct {
- Vec2 player;
- Vec2 player_global;
- Vec2 player_v;
- Vec2 screen;
- FrameDirectionEnum frame_group;
- FrameDirectionEnum last_group;
- FrameDirectionEnum frame_pending;
- FrameDirectionEnum frame_type;
- const DolphinFrame* current_frame;
- bool transition;
- bool transition_pending;
- bool use_pending;
- bool debug;
- uint8_t player_anim;
- uint8_t frame_idx;
- uint8_t scene_id;
- uint8_t emote_id;
- uint8_t previous_emote;
- uint8_t action;
- uint8_t prev_action;
- uint8_t action_timeout;
- uint8_t dialog_progress;
- FuriThread* scene_app_thread;
- } SceneState;
- void dolphin_scene_render(SceneState* state, Canvas* canvas, uint32_t t);
- void dolphin_scene_render_dolphin(SceneState* state, Canvas* canvas);
- void dolphin_scene_handle_user_input(SceneState* state, InputEvent* input);
- void dolphin_scene_coordinates(SceneState* state, uint32_t dt);
- void dolphin_scene_render_state(SceneState* state, Canvas* canvas);
- void dolphin_scene_update_state(SceneState* state, uint32_t t, uint32_t dt);
- void dolphin_scene_redraw(Canvas* canvas, void* ctx);
- void dolphin_scene_tick_handler(SceneState* state, uint32_t t, uint32_t dt);
- void dolphin_scene_handle_input(SceneState* state, InputEvent* input);
|