#pragma once #include #include #include #include #include "typedefs.hpp" #include "Environment.hpp" class Content; class World; class Entities; class Inventories; class LevelEvents; class PhysicsSolver; class GlobalChunks; class Camera; class Players; struct EngineSettings; namespace voxels { class Pathfinding; } /// @brief A level, contains chunks and objects class Level { std::unique_ptr world; public: const Content& content; std::unique_ptr chunks; std::unique_ptr inventories; std::unique_ptr physics; std::unique_ptr events; std::unique_ptr entities; std::unique_ptr players; std::unique_ptr pathfinding; std::vector> cameras; // move somewhere? Environment environment {}; Level( std::unique_ptr world, const Content& content, EngineSettings& settings ); ~Level(); World* getWorld(); const World* getWorld() const; void onSave(); std::shared_ptr getCamera(const std::string& name); };