Files
Frostbite2D/Game/include/map/GameMapLayer.h
Lenheart db0fd3a17e feat(渲染): 实现NPC和地图层的渲染优化
重构NPC渲染逻辑,将交互高亮同步移至Render方法
为NpcAnimation添加帧激活检查以避免无效纹理刷新
为GameMapLayer添加调试覆盖层画布,优化可行区域和移动区域渲染
更新测试场景地图路径和相机控制器设置
2026-04-08 00:17:03 +08:00

48 lines
1.4 KiB
C++

#pragma once
#include <frostbite2D/2d/canvas_actor.h>
#include <frostbite2D/2d/actor.h>
#include <vector>
namespace frostbite2D {
class GameMapLayer : public Actor {
public:
static constexpr size_t kInvalidMoveAreaIndex = static_cast<size_t>(-1);
void Render() override;
void SetDebugFeasibleAreaPolygon(const std::vector<Vec2>& polygon);
void AddDebugMoveAreaInfo(const Rect& rect, size_t index);
void SetDebugHighlightedMoveAreaIndex(size_t index);
void ClearDebugAreaInfo();
void AddObject(RefPtr<Actor> 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<CanvasActor> feasibleAreaOverlayCanvas_ = nullptr;
RefPtr<CanvasActor> moveAreaOverlayCanvas_ = nullptr;
std::vector<Vec2> feasibleAreaPolygon_;
std::vector<Rect> feasibleAreaFillRects_;
std::vector<DebugMoveAreaInfo> moveAreaInfoList_;
size_t highlightedMoveAreaIndex_ = kInvalidMoveAreaIndex;
Rect feasibleAreaOverlayBounds_;
Rect moveAreaOverlayBounds_;
bool feasibleAreaOverlayDirty_ = true;
bool moveAreaOverlayDirty_ = true;
};
} // namespace frostbite2D