114 lines
2.3 KiB
C++
114 lines
2.3 KiB
C++
#pragma once
|
|
|
|
#include <cstdint>
|
|
|
|
#include "menu.hpp"
|
|
#include "../trainer.hpp"
|
|
|
|
struct cursor_t {
|
|
int16_t x; // in menu items
|
|
int16_t y; // in menu items
|
|
};
|
|
|
|
struct window_t {
|
|
enum input_event {
|
|
input_up,
|
|
input_down,
|
|
input_left,
|
|
input_right,
|
|
input_a,
|
|
input_b,
|
|
};
|
|
|
|
enum window_event {
|
|
no_op,
|
|
spawn,
|
|
dismiss,
|
|
};
|
|
|
|
cursor_t cursor;
|
|
};
|
|
|
|
struct window_descriptor_t {
|
|
enum type {
|
|
start,
|
|
fight,
|
|
fight_moves,
|
|
};
|
|
|
|
union data {
|
|
menu_t const * const menu;
|
|
};
|
|
|
|
union data data;
|
|
|
|
struct result {
|
|
enum window_t::window_event window_event;
|
|
union {
|
|
uint8_t no_op;
|
|
enum type type;
|
|
};
|
|
|
|
result(enum window_t::window_event window_event,
|
|
enum type type)
|
|
: window_event(window_event), type(type)
|
|
{}
|
|
|
|
result(enum window_t::window_event window_event)
|
|
: window_event(window_event), no_op(0)
|
|
{}
|
|
};
|
|
|
|
void
|
|
(* const draw)(const uint32_t base_pattern,
|
|
const union data& data,
|
|
const window_t& window,
|
|
const trainer_state_t& trainer_state);
|
|
|
|
result
|
|
(* const update)(const union data& data,
|
|
window_t& window,
|
|
trainer_state_t& trainer_state,
|
|
const enum window_t::input_event event
|
|
);
|
|
};
|
|
|
|
extern const window_descriptor_t window_descriptors[];
|
|
|
|
// window types
|
|
|
|
struct window__menu_t {
|
|
static void
|
|
draw(const uint32_t base_pattern,
|
|
const union window_descriptor_t::data& data,
|
|
const window_t& window,
|
|
const trainer_state_t& trainer_state);
|
|
|
|
static void
|
|
draw_fight_moves(const uint32_t base_pattern,
|
|
const union window_descriptor_t::data& data,
|
|
const window_t& window,
|
|
const trainer_state_t& trainer_state);
|
|
|
|
static window_descriptor_t::result
|
|
update(const union window_descriptor_t::data& data,
|
|
window_t& window,
|
|
trainer_state_t& trainer_state,
|
|
const enum window_t::input_event event
|
|
);
|
|
|
|
static window_descriptor_t::result
|
|
update_fight(const union window_descriptor_t::data& data,
|
|
window_t& window,
|
|
trainer_state_t& trainer_state,
|
|
const enum window_t::input_event event
|
|
);
|
|
|
|
static window_descriptor_t::result
|
|
update_fight_moves(const union window_descriptor_t::data& data,
|
|
window_t& window,
|
|
trainer_state_t& trainer_state,
|
|
const enum window_t::input_event event
|
|
);
|
|
};
|