text/plain
•
1.39 KB
•
55 lines
#pragma once
#include <stdint.h>
// Screen types enum
typedef enum {
SCREEN_NONE = 0,
SCREEN_HOME,
SCREEN_DEMO,
SCREEN_GAMES,
SCREEN_BREAKOUT,
SCREEN_FILES,
SCREEN_PLAYER,
} screen_type_t;
// Global app config (available to all screens)
typedef struct {
uint8_t volume; // 0-100
uint8_t brightness; // 0-100
} app_state_t;
// Forward declarations for screen state types
typedef struct home_screen_state home_screen_state_t;
typedef struct demo_screen_state demo_screen_state_t;
typedef struct games_screen_state games_screen_state_t;
typedef struct breakout_screen_state breakout_screen_state_t;
typedef struct files_screen_state files_screen_state_t;
typedef struct player_screen_state player_screen_state_t;
// Tagged union for current screen state
typedef struct {
screen_type_t type;
union {
home_screen_state_t *home;
demo_screen_state_t *demo;
games_screen_state_t *games;
breakout_screen_state_t *breakout;
files_screen_state_t *files;
player_screen_state_t *player;
};
} ui_state_t;
// Globals
extern app_state_t app_state;
extern ui_state_t ui_state;
// Dispatch functions
ui_state_t setup_screen(screen_type_t type);
void free_screen(void);
void update_screen(void);
// Navigation helper
#define navigate_to(screen_type) do { \
free_screen(); \
ui_state = setup_screen(screen_type); \
} while(0)