#ifndef GAME_H
#define GAME_H

struct world;
struct mixer_startup_receipt;
struct sprite_startup_receipt;
struct sound_startup_receipt;

enum game_cmd_kind {
    GAME_CMD_KIND_NONE,

    GAME_CMD_KIND_PLAYER_MOVE,

    /* Testing */
    GAME_CMD_KIND_CLEAR_ALL,

    GAME_CMD_KIND_COUNT
};

struct game_cmd {
    enum game_cmd_kind kind;

    /* GAME_CMD_KIND_PLAYER_MOVE */
    struct v2 move_dir;
    struct v2 aim;
};

struct game_cmd_array {
    struct game_cmd *cmds;
    u64 count;
};

struct game_startup_receipt { i32 _; };
struct game_startup_receipt game_startup(struct mixer_startup_receipt *mixer_sr,
                                         struct sprite_startup_receipt *sheet_sr,
                                         struct sound_startup_receipt *sound_sr);

void game_get_latest_tick(struct world *dest);
u64 game_get_latest_tick_id(void);

void game_push_cmds(struct game_cmd_array cmd_array);

#endif
