]> git.localhorst.tv Git - orbi.git/blob - src/world/World.h
switch world entities from instance to pointer
[orbi.git] / src / world / World.h
1 #ifndef ORBI_WORLD_H_
2 #define ORBI_WORLD_H_
3
4 #include "Tile.h"
5 #include "../graphics/Vector.h"
6
7 #include <list>
8 #include <vector>
9
10
11 namespace orbi {
12
13 class Entity;
14
15 class World {
16
17 public:
18         World(Vector<int> size);
19
20 public:
21         Vector<int> Size() const { return size; }
22         Vector<int> TileSize() const { return Vector<int>(1, 1); }
23
24 public:
25         void Update(float dt);
26
27         bool InBounds(Vector<int> pos) const
28                 { return pos.x > 0 && pos.y > 0 && pos.x < size.x && pos.y < size.y; }
29         int Index(Vector<int> pos) const { return pos.y * size.x + pos.x; }
30
31         Tile &TileAt(Vector<int> pos) { return tiles[Index(pos)]; }
32         const Tile &TileAt(Vector<int> pos) const { return tiles[Index(pos)]; }
33         void SetTile(Vector<int> pos, const Tile &t) { tiles[Index(pos)] = t; }
34
35         const std::list<Entity *> &Entities() const { return entities; }
36         void AddEntity(Entity &e) { entities.push_back(&e); }
37
38 private:
39         void BoundsCollision(Entity &, float dt);
40         void TileCollision(Entity &, float dt);
41         void EntityCollision();
42
43 private:
44         Vector<int> size;
45         int count;
46
47         Vector<float> gravity;
48         Vector<float> terminal;
49         float fixSpeed;
50
51         std::vector<Tile> tiles;
52
53         std::list<Entity *> entities;
54
55 };
56
57 }
58
59 #endif