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