summaryrefslogtreecommitdiff
path: root/core/src/cpp/player.h
diff options
context:
space:
mode:
authorNikita Kostovsky <nikita@kostovsky.me>2025-12-23 15:28:05 +0100
committerNikita Kostovsky <nikita@kostovsky.me>2025-12-23 15:28:05 +0100
commitc055eeef6d41269d11b2ddf7f9aba6f8867da65d (patch)
treedcd9baaec93c50a8ab49656be86ea248c17421fd /core/src/cpp/player.h
initial commitHEADmaster
Diffstat (limited to 'core/src/cpp/player.h')
-rw-r--r--core/src/cpp/player.h63
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;
+};