// scene.hpp - Interfaz base para escenas del juego // © 2025 Orni Attack // // El frame loop vive en Director, no en cada escena. Cada escena implementa // estos cuatro métodos y el Director los llama en orden por frame: // handleEvent(ev) por cada evento SDL (tras los eventos globales) // update(dt) lógica // draw() pintado (entre clear y present del Director) // isFinished() consultar transición pendiente // // Cuando una escena pide transición (vía context_.setNextScene(...)), // isFinished() debe pasar a true y el Director destruye la escena para // construir la siguiente. #pragma once #include class Scene { public: Scene() = default; virtual ~Scene() = default; Scene(const Scene&) = delete; auto operator=(const Scene&) -> Scene& = delete; Scene(Scene&&) = delete; auto operator=(Scene&&) -> Scene& = delete; // Eventos específicos de la escena. Los globales (window resize, // F1-F4, ESC, QUIT) los procesa GlobalEvents::handle antes. virtual void handleEvent(const SDL_Event& event) = 0; // Lógica de la escena. delta_time en segundos, ya capeado por el Director. virtual void update(float delta_time) = 0; // Pintar la escena (entre clear y present del Director). virtual void draw() = 0; // True cuando la escena ha pedido transición. [[nodiscard]] virtual auto isFinished() const -> bool = 0; };