diff options
-rw-r--r-- | CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/consts.h | 2 | ||||
-rw-r--r-- | src/game.h | 7 | ||||
-rw-r--r-- | src/main.cpp | 27 | ||||
-rw-r--r-- | src/party.cpp | 42 | ||||
-rw-r--r-- | src/party.h | 23 | ||||
-rw-r--r-- | src/renderer.cpp | 2 | ||||
-rw-r--r-- | src/sprite.h | 19 | ||||
-rw-r--r-- | src/vector.h | 102 |
9 files changed, 196 insertions, 29 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 590577a..3b46e02 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt | |||
@@ -29,6 +29,7 @@ add_executable(tanetane | |||
29 | src/main.cpp | 29 | src/main.cpp |
30 | src/renderer.cpp | 30 | src/renderer.cpp |
31 | src/sprite.cpp | 31 | src/sprite.cpp |
32 | src/party.cpp | ||
32 | ) | 33 | ) |
33 | 34 | ||
34 | set_property(TARGET tanetane PROPERTY CXX_STANDARD 17) | 35 | set_property(TARGET tanetane PROPERTY CXX_STANDARD 17) |
diff --git a/src/consts.h b/src/consts.h index 2088f45..96176a4 100644 --- a/src/consts.h +++ b/src/consts.h | |||
@@ -4,4 +4,6 @@ | |||
4 | const int GAME_WIDTH = 640; | 4 | const int GAME_WIDTH = 640; |
5 | const int GAME_HEIGHT = 480; | 5 | const int GAME_HEIGHT = 480; |
6 | 6 | ||
7 | const int MOVEMENT_SPEED = 4; | ||
8 | |||
7 | #endif /* end of include guard: CONSTS_H_9561E49C */ | 9 | #endif /* end of include guard: CONSTS_H_9561E49C */ |
diff --git a/src/game.h b/src/game.h index 46f1ab2..bb99543 100644 --- a/src/game.h +++ b/src/game.h | |||
@@ -4,6 +4,13 @@ | |||
4 | #include <vector> | 4 | #include <vector> |
5 | #include "sprite.h" | 5 | #include "sprite.h" |
6 | 6 | ||
7 | struct Input { | ||
8 | bool left = false; | ||
9 | bool right = false; | ||
10 | bool up = false; | ||
11 | bool down = false; | ||
12 | }; | ||
13 | |||
7 | class Game { | 14 | class Game { |
8 | public: | 15 | public: |
9 | 16 | ||
diff --git a/src/main.cpp b/src/main.cpp index 8bd7f89..b282a2e 100644 --- a/src/main.cpp +++ b/src/main.cpp | |||
@@ -1,11 +1,17 @@ | |||
1 | #include <iostream> | 1 | #include <iostream> |
2 | #include "renderer.h" | 2 | #include "renderer.h" |
3 | #include "game.h" | 3 | #include "game.h" |
4 | #include "party.h" | ||
4 | 5 | ||
5 | void loop(Renderer& renderer) { | 6 | void loop(Renderer& renderer) { |
6 | Game game; | 7 | Game game; |
7 | int playerSpriteId = game.addSprite(Sprite("../res/lucas.png", renderer)); | 8 | int playerSpriteId = game.addSprite(Sprite("../res/lucas.png", renderer)); |
8 | 9 | ||
10 | Input keystate; | ||
11 | |||
12 | Party party; | ||
13 | party.addMember(playerSpriteId); | ||
14 | |||
9 | renderer.render(game); | 15 | renderer.render(game); |
10 | 16 | ||
11 | size_t inputDt = 50; | 17 | size_t inputDt = 50; |
@@ -25,28 +31,17 @@ void loop(Renderer& renderer) { | |||
25 | } | 31 | } |
26 | } | 32 | } |
27 | 33 | ||
28 | Sprite& playerSprite = game.getSprite(playerSpriteId); | ||
29 | const Uint8* state = SDL_GetKeyboardState(NULL); | 34 | const Uint8* state = SDL_GetKeyboardState(NULL); |
35 | keystate.left = state[SDL_SCANCODE_LEFT]; | ||
36 | keystate.right = state[SDL_SCANCODE_RIGHT]; | ||
37 | keystate.up = state[SDL_SCANCODE_UP]; | ||
38 | keystate.down = state[SDL_SCANCODE_DOWN]; | ||
30 | 39 | ||
31 | inputAcc += frameTime; | 40 | inputAcc += frameTime; |
32 | while (inputAcc > inputDt) { | 41 | while (inputAcc > inputDt) { |
33 | inputAcc -= inputDt; | 42 | inputAcc -= inputDt; |
34 | 43 | ||
35 | if (state[SDL_SCANCODE_LEFT]) { | 44 | party.move(game, keystate); |
36 | playerSprite.setX(playerSprite.getX()-8); | ||
37 | } | ||
38 | |||
39 | if (state[SDL_SCANCODE_RIGHT]) { | ||
40 | playerSprite.setX(playerSprite.getX()+8); | ||
41 | } | ||
42 | |||
43 | if (state[SDL_SCANCODE_UP]) { | ||
44 | playerSprite.setY(playerSprite.getY()-8); | ||
45 | } | ||
46 | |||
47 | if (state[SDL_SCANCODE_DOWN]) { | ||
48 | playerSprite.setY(playerSprite.getY()+8); | ||
49 | } | ||
50 | } | 45 | } |
51 | 46 | ||
52 | renderer.render(game); | 47 | renderer.render(game); |
diff --git a/src/party.cpp b/src/party.cpp new file mode 100644 index 0000000..559aacb --- /dev/null +++ b/src/party.cpp | |||
@@ -0,0 +1,42 @@ | |||
1 | #include "party.h" | ||
2 | #include "consts.h" | ||
3 | |||
4 | void Party::addMember(int spriteId) { | ||
5 | PartyMember newMember; | ||
6 | newMember.spriteId = spriteId; | ||
7 | |||
8 | members_.push_back(std::move(newMember)); | ||
9 | } | ||
10 | |||
11 | void Party::move(Game& game, const Input& keystate) { | ||
12 | if (members_.empty()) { | ||
13 | return; | ||
14 | } | ||
15 | |||
16 | Sprite& p1 = game.getSprite(members_[0].spriteId); | ||
17 | vec2i pLoc = p1.loc(); | ||
18 | |||
19 | if (keystate.up) | ||
20 | { | ||
21 | pLoc.y() -= MOVEMENT_SPEED; | ||
22 | } | ||
23 | |||
24 | if (keystate.down) | ||
25 | { | ||
26 | pLoc.y() += MOVEMENT_SPEED; | ||
27 | } | ||
28 | |||
29 | if (keystate.left) | ||
30 | { | ||
31 | pLoc.x() -= MOVEMENT_SPEED; | ||
32 | } | ||
33 | |||
34 | if (keystate.right) | ||
35 | { | ||
36 | pLoc.x() += MOVEMENT_SPEED; | ||
37 | } | ||
38 | |||
39 | if (pLoc != p1.loc()) { | ||
40 | p1.loc() = pLoc; | ||
41 | } | ||
42 | } \ No newline at end of file | ||
diff --git a/src/party.h b/src/party.h new file mode 100644 index 0000000..18c57b5 --- /dev/null +++ b/src/party.h | |||
@@ -0,0 +1,23 @@ | |||
1 | #ifndef PARTY_H_826F91BA | ||
2 | #define PARTY_H_826F91BA | ||
3 | |||
4 | #include <vector> | ||
5 | #include "game.h" | ||
6 | |||
7 | class Party { | ||
8 | public: | ||
9 | |||
10 | void addMember(int spriteId); | ||
11 | |||
12 | void move(Game& game, const Input& keystate); | ||
13 | |||
14 | private: | ||
15 | |||
16 | struct PartyMember { | ||
17 | int spriteId; | ||
18 | }; | ||
19 | |||
20 | std::vector<PartyMember> members_; | ||
21 | }; | ||
22 | |||
23 | #endif /* end of include guard: PARTY_H_826F91BA */ | ||
diff --git a/src/renderer.cpp b/src/renderer.cpp index 3bd0beb..bcc3e95 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp | |||
@@ -49,7 +49,7 @@ void Renderer::render(Game& game) { | |||
49 | SDL_RenderClear(ren_.get()); | 49 | SDL_RenderClear(ren_.get()); |
50 | 50 | ||
51 | for (Sprite& sprite : game.getSprites()) { | 51 | for (Sprite& sprite : game.getSprites()) { |
52 | SDL_Rect dest { sprite.getX(), sprite.getY(), sprite.getWidth(), sprite.getHeight() }; | 52 | SDL_Rect dest { sprite.loc().x(), sprite.loc().y(), sprite.size().w(), sprite.size().h() }; |
53 | SDL_RenderCopy(ren_.get(), textures_.at(sprite.getTextureId()).get(), nullptr, &dest); | 53 | SDL_RenderCopy(ren_.get(), textures_.at(sprite.getTextureId()).get(), nullptr, &dest); |
54 | } | 54 | } |
55 | 55 | ||
diff --git a/src/sprite.h b/src/sprite.h index d868bdb..c45e208 100644 --- a/src/sprite.h +++ b/src/sprite.h | |||
@@ -3,6 +3,7 @@ | |||
3 | 3 | ||
4 | #include <string_view> | 4 | #include <string_view> |
5 | #include "renderer.h" | 5 | #include "renderer.h" |
6 | #include "vector.h" | ||
6 | 7 | ||
7 | class Sprite { | 8 | class Sprite { |
8 | public: | 9 | public: |
@@ -13,25 +14,19 @@ public: | |||
13 | return textureId_; | 14 | return textureId_; |
14 | } | 15 | } |
15 | 16 | ||
16 | int getX() { return x_; } | 17 | const vec2i& loc() const { return loc_; } |
17 | 18 | ||
18 | void setX(int x) { x_ = x; } | 19 | vec2i& loc() { return loc_; } |
19 | 20 | ||
20 | void setY(int y) { y_ = y; } | 21 | const vec2i& size() const { return size_; } |
21 | 22 | ||
22 | int getY() { return y_; } | 23 | vec2i& size() { return size_; } |
23 | |||
24 | int getWidth() { return width_; } | ||
25 | |||
26 | int getHeight() { return height_; } | ||
27 | 24 | ||
28 | private: | 25 | private: |
29 | 26 | ||
30 | int textureId_; | 27 | int textureId_; |
31 | int x_ = 0; | 28 | vec2i loc_ { 0, 0 }; |
32 | int y_ = 0; | 29 | vec2i size_ { 17*4, 27 * 4 }; |
33 | int width_ = 17*4; | ||
34 | int height_ = 27*4; | ||
35 | }; | 30 | }; |
36 | 31 | ||
37 | #endif /* end of include guard: SPRITE_H_70503825 */ | 32 | #endif /* end of include guard: SPRITE_H_70503825 */ |
diff --git a/src/vector.h b/src/vector.h new file mode 100644 index 0000000..9973ea6 --- /dev/null +++ b/src/vector.h | |||
@@ -0,0 +1,102 @@ | |||
1 | #ifndef VECTOR_H_5458ED71 | ||
2 | #define VECTOR_H_5458ED71 | ||
3 | |||
4 | template <typename T> | ||
5 | class vec2 { | ||
6 | public: | ||
7 | |||
8 | T coords[2]; | ||
9 | |||
10 | vec2() : coords{0, 0} { | ||
11 | } | ||
12 | |||
13 | vec2(T x, T y) : coords{x, y} { | ||
14 | } | ||
15 | |||
16 | inline T& x() { | ||
17 | return coords[0]; | ||
18 | } | ||
19 | |||
20 | inline const T& x() const { | ||
21 | return coords[0]; | ||
22 | } | ||
23 | |||
24 | inline T& w() { | ||
25 | return coords[0]; | ||
26 | } | ||
27 | |||
28 | inline const T& w() const { | ||
29 | return coords[0]; | ||
30 | } | ||
31 | |||
32 | inline T& y() { | ||
33 | return coords[1]; | ||
34 | } | ||
35 | |||
36 | inline const T& y() const { | ||
37 | return coords[1]; | ||
38 | } | ||
39 | |||
40 | inline T& h() { | ||
41 | return coords[1]; | ||
42 | } | ||
43 | |||
44 | inline const T& h() const { | ||
45 | return coords[1]; | ||
46 | } | ||
47 | |||
48 | template <typename R> | ||
49 | operator vec2<R>() const { | ||
50 | return vec2<R>(x(), y()); | ||
51 | } | ||
52 | |||
53 | vec2 operator+(const vec2& other) const { | ||
54 | return vec2(x() + other.x(), y() + other.y()); | ||
55 | } | ||
56 | |||
57 | vec2& operator+=(const vec2& other) { | ||
58 | x() += other.x(); | ||
59 | y() += other.y(); | ||
60 | |||
61 | return *this; | ||
62 | } | ||
63 | |||
64 | vec2 operator-(const vec2& other) const { | ||
65 | return vec2(x() - other.x(), y() - other.y()); | ||
66 | } | ||
67 | |||
68 | vec2 operator-=(const vec2& other) { | ||
69 | x() -= other.x(); | ||
70 | y() -= other.y(); | ||
71 | |||
72 | return *this; | ||
73 | } | ||
74 | |||
75 | vec2 operator-() const { | ||
76 | return vec2(-x(), -y()); | ||
77 | } | ||
78 | |||
79 | vec2 operator*(T s) const { | ||
80 | return vec2(x() * s, y() * s); | ||
81 | } | ||
82 | |||
83 | vec2& operator*=(T s) { | ||
84 | x() *= s; | ||
85 | y() *= s; | ||
86 | |||
87 | return *this; | ||
88 | } | ||
89 | |||
90 | bool operator==(const vec2& other) const { | ||
91 | return std::tie(x(), other.x()) == std::tie(y(), other.y()); | ||
92 | } | ||
93 | |||
94 | bool operator!=(const vec2& other) const { | ||
95 | return std::tie(x(), other.x()) != std::tie(y(), other.y()); | ||
96 | } | ||
97 | |||
98 | }; | ||
99 | |||
100 | using vec2i = vec2<int>; | ||
101 | |||
102 | #endif /* end of include guard: VECTOR_H_5458ED71 */ | ||