diff options
| author | Nikita Kostovsky <nikita@kostovsky.me> | 2025-12-23 15:28:05 +0100 |
|---|---|---|
| committer | Nikita Kostovsky <nikita@kostovsky.me> | 2025-12-23 15:28:05 +0100 |
| commit | c055eeef6d41269d11b2ddf7f9aba6f8867da65d (patch) | |
| tree | dcd9baaec93c50a8ab49656be86ea248c17421fd /core/src/cpp/player.h | |
Diffstat (limited to 'core/src/cpp/player.h')
| -rw-r--r-- | core/src/cpp/player.h | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/core/src/cpp/player.h b/core/src/cpp/player.h new file mode 100644 index 0000000..f6837bb --- /dev/null +++ b/core/src/cpp/player.h @@ -0,0 +1,63 @@ +#pragma once + +#include "animation.h" +#include "map.h" +#include "size2d.h" +#include "vec2d.h" + +struct SDL_Renderer; + +struct Player +{ + enum class States + { + REST = 0, + TAKEOFF = 1, + FLIGHT = 2, + LANDING = 3, + WALK = 4, + FALL = 5 + }; + + explicit Player(SDL_Renderer* renderer); + + void set_state(const States& s); + + void handle_keyboard(); + + const Animation& sprite(const States& state); + + void update_state(const double dt, const Map& map); + + void draw(); + + // coordinates of the character + vec2d<double> pos{150., 200.}; + // speed of the character + vec2d<double> speed{0., 0.}; + + /*! + * \brief backwards - facing left or right + */ + bool backwards{false}; + // will be used to differentiate high jump from a long jump + vec2d<double> jump{0., 0.}; + + /*! + * \brief state - current sprite + */ + States state{States::REST}; + TimeStamp timestamp{Clock::now()}; + /*! + * \brief renderer - draw here + */ + SDL_Renderer* renderer{nullptr}; + + // size of the sprite on the screen + size2d<int> sprite_size{256, 128}; + + /*! + * \brief sprites - sprite sequences to be drawn + */ + const std::array<Animation, 6> sprites; +}; |
