#pragma once #include "../actor/player_actor.h" #include "../core/debug_flags.h" #include "../data/level_definition.h" #include "../debug/debug_overlay.h" #include "camera_controller.h" #include "../stage/stage_renderer.h" #include #include #include #include namespace ns_game { class WhiteboxScene : public frostbite2D::Scene { public: void onEnter() override; void Update(float deltaTime) override; bool OnEvent(const frostbite2D::Event& event) override; void Render() override; private: struct BattleZoneRuntime { bool triggered = false; bool cleared = false; }; frostbite2D::Camera* activeCamera() const; std::vector buildBattleZoneDebugInfo() const; void configureCamera(); bool handleDebugKey(frostbite2D::KeyCode keyCode); void toggleDebugOverlay(); void beginCameraBoundsBlend(const frostbite2D::Rect& targetBounds); void clearActiveBattleZone(); void updateCameraBoundsBlend(float deltaTime); void updateBattleZones(); void updateCamera(float deltaTime); LevelDefinition level_; DebugFlags debugFlags_; std::vector battleZoneStates_; int activeBattleZoneIndex_ = -1; bool cameraBoundsBlendActive_ = false; float cameraBoundsBlendTimer_ = 0.0f; float cameraBoundsBlendDuration_ = 0.35f; frostbite2D::Rect cameraBoundsBlendStart_; frostbite2D::Rect cameraBoundsBlendTarget_; frostbite2D::Rect currentCameraBounds_; CameraController cameraController_; StageRenderer stageRenderer_; DebugOverlay debugOverlay_; frostbite2D::Ptr player_; }; } // namespace ns_game