#pragma once #include #include #include namespace frostbite2D { class GameMapLayer : public Actor { public: static constexpr size_t kInvalidMoveAreaIndex = static_cast(-1); void Render() override; void SetDebugFeasibleAreaPolygon(const std::vector& polygon); void AddDebugMoveAreaInfo(const Rect& rect, size_t index); void SetDebugHighlightedMoveAreaIndex(size_t index); void ClearDebugAreaInfo(); void AddObject(RefPtr obj); private: void EnsureDebugOverlayCanvases(); void RefreshFeasibleAreaOverlay(); void RefreshMoveAreaOverlay(); Rect ComputeFeasibleAreaOverlayBounds() const; Rect ComputeMoveAreaOverlayBounds() const; void DrawFeasibleAreaOverlay() const; void DrawMoveAreaOverlay() const; struct DebugMoveAreaInfo { Rect rect; size_t index = kInvalidMoveAreaIndex; }; RefPtr feasibleAreaOverlayCanvas_ = nullptr; RefPtr moveAreaOverlayCanvas_ = nullptr; std::vector feasibleAreaPolygon_; std::vector feasibleAreaFillRects_; std::vector moveAreaInfoList_; size_t highlightedMoveAreaIndex_ = kInvalidMoveAreaIndex; Rect feasibleAreaOverlayBounds_; Rect moveAreaOverlayBounds_; bool feasibleAreaOverlayDirty_ = true; bool moveAreaOverlayDirty_ = true; }; } // namespace frostbite2D