]> git.localhorst.tv Git - space.git/blob - src/world/Universe.cpp
ec71fd1acc665a83e42ff80023b3195e0b78f8af
[space.git] / src / world / Universe.cpp
1 #include "Universe.h"
2
3 #include "Sector.h"
4
5 #include <cstring>
6 #include <memory>
7
8
9 namespace space {
10
11 Universe::Universe(Vector<int> size, Vector<int> secSize, Vector<int> areaSize, int numres)
12 : size(size)
13 , secSize(secSize)
14 , areaSize(areaSize)
15 , numres(numres)
16 , total(size.x * size.y)
17 , sec_begin(reinterpret_cast<Sector *>(new char[total * sizeof(Sector)]))
18 , sec_end(sec_begin + total) {
19         for (Sector *i = sec_begin; i < sec_end; ++i) {
20                 new (i) Sector(secSize, numres);
21         }
22 }
23
24 Universe::~Universe() {
25         delete[] reinterpret_cast<char *>(sec_begin);
26 }
27
28
29 Entity *Universe::AddEntity(const Entity &e) {
30         entities.emplace_back(e);
31         return &entities.back();
32 }
33
34
35 void Universe::Update(float delta) {
36         for (Entity &e : entities) {
37                 e.Update(delta);
38                 while (e.pos.x > areaSize.x) {
39                         e.pos.x -= areaSize.x;
40                         ++e.area.x;
41                 }
42                 while (e.pos.x < 0) {
43                         e.pos.x += areaSize.x;
44                         --e.area.x;
45                 }
46                 while (e.pos.y > areaSize.y) {
47                         e.pos.y -= areaSize.y;
48                         ++e.area.y;
49                 }
50                 while (e.pos.y < 0) {
51                         e.pos.y += areaSize.y;
52                         --e.area.y;
53                 }
54         }
55 }
56
57 }