sprite-animation/player.h
2024-11-04 20:01:19 +00:00

69 lines
1.5 KiB
C

#pragma once
#include "animation_player.h"
#include "state_machine.h"
#include <SDL2/SDL_rect.h>
#include <SDL2/SDL_events.h>
#include <SDL2/SDL_render.h>
#include <stdint.h>
#include <stdbool.h>
enum player_states {
PLAYER_STATE_IDLE,
PLAYER_STATE_WALK,
PLAYER_STATE_JUMP,
PLAYER_STATE_FALL,
PLAYER_STATE_DASH,
COUNT_PLAYER_STATES,
};
enum player_controls {
PLAYER_CONTROL_NONE,
PLAYER_CONTROL_LEFT_DOWN,
PLAYER_CONTROL_RIGHT_DOWN,
PLAYER_CONTROL_LEFT_UP,
PLAYER_CONTROL_RIGHT_UP,
PLAYER_CONTROL_SPACE,
PLAYER_CONTROL_LCTRL,
COUNT_PLAYER_CONTROLS,
};
enum player_direction {
PLAYER_DIRECTION_LEFT = -1,
PLAYER_DIRECTION_RIGHT = 1,
PLAYER_DIRECTION_UP = -1,
PLAYER_DIRECTION_DOWN = 1,
};
typedef struct player_event_data PlayerEventData;
struct player_event_data {
uint32_t key;
bool dash_in_air;
};
typedef struct movement Movement;
struct movement {
int32_t x;
int32_t y;
};
typedef struct player Player;
struct player {
uint32_t current_state;
uint32_t velocity;
int32_t x_direction;
Movement movement;
SDL_Rect position;
PlayerEventData event_data;
StateMachine state_machine;
State states[COUNT_PLAYER_STATES];
AnimPlayer animations[COUNT_PLAYER_STATES];
};
void player_init (Player *player, SDL_Renderer *renderer, SDL_Rect position);
void player_events(Player *player, const SDL_Event *event);
void player_update(Player *player, uint32_t ticks);
void player_draw (const Player *player, SDL_Renderer *renderer);