#pragma once #include "GameDataLoader.h" #include "GameMapLayer.h" #include #include #include namespace frostbite2D { class GameMap : public Actor { public: using MapMoveArea = game::MoveAreaTarget; GameMap(); ~GameMap() override = default; bool LoadMap(const std::string& mapName); void Enter(); void Update(float deltaTime) override; void AddObject(RefPtr object); Vec3 CheckIsItMovable(const Vec3& curPos, const Vec3& posOffset) const; MapMoveArea CheckIsItMoveArea(const Vec3& curPos) const; const std::vector& GetMoveAreaInfo() const; Rect GetMovablePositionArea(size_t index) const; int GetMapLength() const { return mapLength_; } int GetMapHeight() const { return mapHeight_; } private: void initLayers(); void clearLayerChildren(); void InitTile(); void InitBackgroundAnimation(); void InitMapAnimation(); void InitVirtualMovableArea(); void InitMoveArea(); void updateCamera(); void updateLayerPositions(const Vec2& cameraPos); game::MapConfig mapConfig_; std::unordered_map> layerMap_; std::vector movableArea_; std::vector moveArea_; int mapLength_ = 0; int mapHeight_ = 0; int mapOffsetY_ = 0; bool debugMode_ = false; Vec2 cameraFocus_ = Vec2::Zero(); Ptr currentMusic_; }; } // namespace frostbite2D