A 2D tile-based sandbox game.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

WorldPlane.h 1.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #pragma once
  2. #include <vector>
  3. #include <utility>
  4. #include <memory>
  5. #include <map>
  6. #include <set>
  7. #include "common.h"
  8. #include "Chunk.h"
  9. #include "Tile.h"
  10. #include "WorldGen.h"
  11. #include "Entity.h"
  12. namespace Swan {
  13. class World;
  14. class Game;
  15. class WorldPlane {
  16. public:
  17. using ID = uint16_t;
  18. WorldPlane(ID id, World *world, std::shared_ptr<WorldGen> gen):
  19. id_(id), world_(world), gen_(gen) {}
  20. Entity &spawnEntity(const std::string &name, const SRF &params);
  21. Context getContext();
  22. bool hasChunk(ChunkPos pos);
  23. Chunk &getChunk(ChunkPos pos);
  24. void setTileID(TilePos pos, Tile::ID id);
  25. void setTile(TilePos pos, const std::string &name);
  26. Tile::ID getTileID(TilePos pos);
  27. Tile &getTile(TilePos pos);
  28. Entity &spawnPlayer();
  29. void breakBlock(TilePos pos);
  30. void draw(Win &win);
  31. void update(float dt);
  32. void tick();
  33. void debugBox(TilePos pos);
  34. ID id_;
  35. World *world_;
  36. std::shared_ptr<WorldGen> gen_;
  37. private:
  38. std::map<std::pair<int, int>, Chunk> chunks_;
  39. std::set<Chunk *> active_chunks_;
  40. std::vector<std::unique_ptr<Entity>> entities_;
  41. std::vector<TilePos> debug_boxes_;
  42. };
  43. }