]> git.localhorst.tv Git - space.git/blob - src/world/Universe.h
move to SDL2
[space.git] / src / world / Universe.h
1 #ifndef SPACE_UNIVERSE_H_
2 #define SPACE_UNIVERSE_H_
3
4 #include "../entity/Entity.h"
5 #include "../graphics/Vector.h"
6
7 #include <list>
8
9
10 namespace space {
11
12 class Universe {
13
14 public:
15         Universe(Vector<int> size, Vector<int> secSize, Vector<int> areaSize);
16         ~Universe();
17
18         Universe(const Universe &) = delete;
19         Universe &operator =(const Universe &) = delete;
20
21 public:
22         const Vector<int> size;
23         const Vector<int> secSize;
24         const Vector<int> areaSize;
25
26 public:
27         class Area;
28
29         class Sector {
30
31         public:
32                 Sector(const Universe &univ, Vector<int> coords)
33                 : univ(univ), coords(coords) { }
34
35         public:
36                 Vector<int> SectorCoords() const { return coords; }
37                 Vector<int> AreaCoords() const { return univ.areaSize * coords; }
38
39                 Area AreaAt(Vector<int> ac) const { return univ.AreaAt(AreaCoords() + ac); }
40
41         private:
42                 const Universe &univ;
43                 Vector<int> coords;
44
45         };
46
47         class Area {
48
49         public:
50                 Area(const Universe &univ, Vector<int> coords)
51                 : univ(univ), coords(coords) { }
52
53         public:
54                 Vector<int> SectorCoords() const { return coords / univ.areaSize; }
55                 Vector<int> AreaCoords() const { return coords; }
56
57                 Sector ParentSector() const { return univ.SectorAt(SectorCoords()); }
58
59         private:
60                 const Universe &univ;
61                 Vector<int> coords;
62
63         };
64
65 public:
66         Sector SectorAt(Vector<int> coords) const { return Sector(*this, coords); }
67         Area AreaAt(Vector<int> coords) const { return Area(*this, coords); }
68
69 public:
70         Entity *AddEntity(const Entity &);
71         const std::list<Entity> &Entities() const { return entities; }
72
73 public:
74         void Update(float deltaT);
75
76 private:
77         std::list<Entity> entities;
78
79 };
80
81 }
82
83 #endif