summary refs log tree commit diff stats
path: root/src/game.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/game.h')
-rw-r--r--src/game.h27
1 files changed, 20 insertions, 7 deletions
diff --git a/src/game.h b/src/game.h index bb99543..abb70ce 100644 --- a/src/game.h +++ b/src/game.h
@@ -1,6 +1,8 @@
1#ifndef GAME_H_E6F1396E 1#ifndef GAME_H_E6F1396E
2#define GAME_H_E6F1396E 2#define GAME_H_E6F1396E
3 3
4#include <set>
5#include <range/v3/all.hpp>
4#include <vector> 6#include <vector>
5#include "sprite.h" 7#include "sprite.h"
6 8
@@ -14,23 +16,34 @@ struct Input {
14class Game { 16class Game {
15public: 17public:
16 18
17 int addSprite(Sprite sprite) { 19 int addSprite(Sprite sprite);
18 int id = sprites_.size();
19 sprites_.push_back(std::move(sprite));
20 return id;
21 }
22 20
23 Sprite& getSprite(int id) { 21 const Sprite& getSprite(int id) const {
24 return sprites_.at(id); 22 return sprites_.at(id);
25 } 23 }
26 24
27 std::vector<Sprite>& getSprites() { 25 const std::vector<Sprite>& getSprites() {
28 return sprites_; 26 return sprites_;
29 } 27 }
30 28
29 auto spriteView() const {
30 return ranges::views::transform([&] (int id) -> const Sprite& {
31 return sprites_.at(id);
32 });
33 }
34
35 auto getSpritesByY() const {
36 return spritesByY_ | ranges::views::transform([] (const std::tuple<int, int>& val) {
37 return std::get<1>(val);
38 });
39 }
40
41 void moveSprite(int id, vec2i newLoc);
42
31private: 43private:
32 44
33 std::vector<Sprite> sprites_; 45 std::vector<Sprite> sprites_;
46 std::set<std::tuple<int, int>> spritesByY_;
34}; 47};
35 48
36#endif /* end of include guard: GAME_H_E6F1396E */ 49#endif /* end of include guard: GAME_H_E6F1396E */