#pragma once #include #include namespace frostbite2D { class CharacterObject; class GameMap; class NineSliceActor; class Sprite; class TextSprite; /** * @brief Reusable singleton debug actor for UI scenes. */ class GameDebugActor : public Actor { public: static GameDebugActor& get(); static Ptr getPtr(); GameDebugActor(const GameDebugActor&) = delete; GameDebugActor& operator=(const GameDebugActor&) = delete; bool AttachToScene(Scene* scene); bool AttachToParent(Actor* parent); void DetachFromParent(); void SetDebugMap(GameMap* map); void SetTrackedCharacter(CharacterObject* character); void ClearDebugContext(); void OnUpdate(float deltaTime) override; private: void initOverlay(); void updateOverlay(); void updateMapDebugHighlight(); void updateCompositePreview(); Vec2 computeScreenMatchedPreviewSize(const Vec2& textureSize) const; void updateCompositePreviewMarker(const Vec2& textureSize, const Vec2& previewSize, const Vec2& originInTexture); void setOverlayVisible(bool visible); GameDebugActor(); ~GameDebugActor() override = default; GameMap* debugMap_ = nullptr; CharacterObject* trackedCharacter_ = nullptr; RefPtr background_; RefPtr coordText_; RefPtr actionText_; RefPtr compositeText_; RefPtr compositePreview_; RefPtr compositeOriginMarker_; CharacterObject* previewCharacter_ = nullptr; uint64 previewCompositeVersion_ = 0; bool previewTextureAvailable_ = false; }; } // namespace frostbite2D