X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fworld%2FUniverse.h;h=c4754bd0c718b0100baddd9584a6fbe50eb50d5d;hb=HEAD;hp=563bfd90000b545d56bf754778b5f39d1827ab4a;hpb=3f4f8a92f64df08119a40da4d196b3e92ecdc637;p=space.git diff --git a/src/world/Universe.h b/src/world/Universe.h index 563bfd9..c4754bd 100644 --- a/src/world/Universe.h +++ b/src/world/Universe.h @@ -1,20 +1,21 @@ #ifndef SPACE_UNIVERSE_H_ #define SPACE_UNIVERSE_H_ -#include "../entity/Entity.h" -#include "../math/Vector.h" +#include "Resource.h" +#include "../entity/Ship.h" +#include "../graphics/Vector.h" #include +#include +#include namespace space { -class Sector; - class Universe { public: - Universe(Vector size, Vector secSize, Vector areaSize, int numres); + Universe(Vector size, Vector secSize, Vector areaSize); ~Universe(); Universe(const Universe &) = delete; @@ -24,23 +25,74 @@ public: const Vector size; const Vector secSize; const Vector areaSize; + const Vector bounds; public: - Entity *AddEntity(const Entity &); - const std::list &Entities() const { return entities; } + using Env = std::map; + + class Area; + + class Sector { + + public: + Sector(const Universe &univ, Vector coords) + : univ(univ), coords(coords) { } + + public: + Vector SectorCoords() const { return coords; } + Vector AreaCoords() const { return univ.areaSize * coords; } + + Area AreaAt(Vector ac) const { return univ.AreaAt(AreaCoords() + ac); } + + private: + const Universe &univ; + Vector coords; + + }; + + class Area { + + public: + Area(const Universe &univ, Vector coords) + : univ(univ), coords(coords) { } + + public: + Vector SectorCoords() const { return coords / univ.areaSize; } + Vector AreaCoords() const { return coords; } + + Sector ParentSector() const { return univ.SectorAt(SectorCoords()); } + const Env &GetEnv() const { return univ.EnvAt(coords); } + + private: + const Universe &univ; + Vector coords; + + }; public: - void Update(float deltaT); + Sector SectorAt(Vector coords) const { return Sector(*this, coords); } + Area AreaAt(Vector coords) const { return Area(*this, coords); } + const Env &EnvAt(Vector coords) const { return env[coords.x * bounds.y + coords.y]; } -private: +public: + Ship *AddShip(const Ship &); + const std::list &Ships() const { return ships; } - int numres; - int total; + int AddResource(const Resource &); + const Resource &GetResource(int id) const { return resources[id]; } - Sector *sec_begin; - Sector *sec_end; + void DumpEnv(int res, Vector coords, float amount); + void DumpEnv(int res, Vector coords, float amount) { + DumpEnv(res, Vector(coords), amount); + } - std::list entities; +public: + void Update(float deltaT); + +private: + std::list ships; + std::vector resources; + std::vector env; };