#ifndef ORBI_WORLD_H_
#define ORBI_WORLD_H_
-#include "AABB.h"
-#include "Entity.h"
#include "Tile.h"
#include "../graphics/Vector.h"
namespace orbi {
+class Entity;
+
class World {
public:
public:
Vector<int> Size() const { return size; }
+ Vector<int> TileSize() const { return Vector<int>(1, 1); }
public:
void Update(float dt);
Tile &TileAt(Vector<int> pos) { return tiles[Index(pos)]; }
const Tile &TileAt(Vector<int> pos) const { return tiles[Index(pos)]; }
void SetTile(Vector<int> pos, const Tile &t) { tiles[Index(pos)] = t; }
- const AABB &TileShapeAt(Vector<int> pos) const;
- const std::list<Entity> &Entities() const { return entities; }
- Entity &AddEntity(const Entity &);
+ const std::list<Entity *> &Entities() const { return entities; }
+ void AddEntity(Entity &e) { entities.push_back(&e); }
+
+private:
+ void BoundsCollision(Entity &, float dt);
+ void TileCollision(Entity &, float dt);
+ void EntityCollision();
private:
Vector<int> size;
Vector<float> gravity;
Vector<float> terminal;
+ float fixSpeed;
std::vector<Tile> tiles;
- std::list<Entity> entities;
-
- mutable AABB tileShape;
+ std::list<Entity *> entities;
};