]> git.localhorst.tv Git - gworm.git/blob - src/world/World.h
speed up rendering by caching world texture
[gworm.git] / src / world / World.h
1 #ifndef GWORM_WORLD_H_
2 #define GWORM_WORLD_H_
3
4 #include "Entity.h"
5 #include "../graphics/Color.h"
6 #include "../graphics/Vector.h"
7
8 #include <list>
9 #include <vector>
10
11
12 namespace gworm {
13
14 class World {
15
16 public:
17         World(Vector<int> size);
18
19 public:
20         Vector<int> Size() const { return size; }
21
22 public:
23         void Update(float dt);
24
25         bool InBounds(Vector<int> pos) const
26                 { return pos.x > 0 && pos.y > 0 && pos.x < size.x && pos.y < size.y; }
27         int Index(Vector<int> pos) const { return pos.y * size.x + pos.x; }
28
29         float MassAt(Vector<int> pos) const { return masses[Index(pos)]; }
30         void SetMass(Vector<int> pos, float m) { masses[Index(pos)] = m; }
31
32         Color ColorAt(Vector<int> pos) const { return colors[Index(pos)]; }
33         const Color *GetColors() const { return colors.data(); }
34         void SetColor(Vector<int> pos, Color c) {
35                 colors[Index(pos)] = c;
36                 colorDirty = true;
37         }
38         bool ColorDirty() const { return colorDirty; }
39         void CleanColor() { colorDirty = false; }
40
41         const std::list<Entity> &Entities() const { return entities; }
42         Entity &AddEntity(const Entity &);
43
44         Vector<float> ForceAt(Vector<float>, float m) const;
45         bool WorldCollision(const Entity &, Vector<float> &) const;
46         Vector<float> NormalAt(Vector<float>) const;
47         bool IsSurface(Vector<int>) const;
48
49 private:
50         Vector<int> size;
51         int count;
52
53         std::vector<float> masses;
54         std::vector<Color> colors;
55         bool colorDirty;
56
57         std::list<Entity> entities;
58
59 };
60
61 }
62
63 #endif