migrades portes i plataformes a solidActor
This commit is contained in:
@@ -5,6 +5,8 @@
|
||||
#include <memory> // Para shared_ptr
|
||||
#include <string> // Para string
|
||||
|
||||
#include "game/entities/solid_actor.hpp" // Para SolidActor
|
||||
|
||||
class AnimatedSprite;
|
||||
|
||||
/**
|
||||
@@ -15,12 +17,12 @@ class AnimatedSprite;
|
||||
* - "opening": animación de transición que se reproduce una sola vez
|
||||
* - "opened": estado final no bloqueante (frame estático)
|
||||
*
|
||||
* El comportamiento de "muro" se implementa marcando los 4 tiles que ocupa
|
||||
* la puerta como WALL en el CollisionMap (lo gestiona el DoorManager). Cuando
|
||||
* la puerta termina de abrirse, los tiles vuelven a EMPTY y el jugador puede
|
||||
* pasar.
|
||||
* El comportamiento de "muro" se implementa como SolidActor con flag
|
||||
* BLOCKS_PLAYER. El SolidActorManager de la Room lo consulta en los sweeps
|
||||
* del Player. Cuando la puerta termina de abrirse, se limpia el flag
|
||||
* BLOCKS_PLAYER y el sweep deja de verla como pared.
|
||||
*/
|
||||
class Door {
|
||||
class Door : public SolidActor {
|
||||
public:
|
||||
enum class State : int {
|
||||
CLOSED = 0,
|
||||
@@ -41,11 +43,10 @@ class Door {
|
||||
void render(); // Pinta la puerta en pantalla
|
||||
void update(float delta_time); // Avanza la animación; si OPENING termina → OPENED
|
||||
|
||||
auto getCollider() -> SDL_FRect& { return collider_; } // Rectángulo de colisión (8x32)
|
||||
[[nodiscard]] auto getPos() const -> SDL_FPoint; // Posición en píxeles
|
||||
[[nodiscard]] auto getId() const -> const std::string& { return id_; } // Identificador
|
||||
[[nodiscard]] auto getState() const -> State { return state_; } // Estado actual
|
||||
[[nodiscard]] auto isBlocking() const -> bool { return state_ != State::OPENED; } // True si bloquea al jugador
|
||||
auto getCollider() -> SDL_FRect& { return aabb_; } // Rectángulo de colisión (8x32)
|
||||
[[nodiscard]] auto getPos() const -> SDL_FPoint; // Posición en píxeles
|
||||
[[nodiscard]] auto getId() const -> const std::string& { return id_; } // Identificador
|
||||
[[nodiscard]] auto getState() const -> State { return state_; } // Estado actual
|
||||
|
||||
void startOpening(); // Transición CLOSED → OPENING
|
||||
auto justOpened() -> bool; // Flag one-shot consumido por el manager
|
||||
@@ -53,12 +54,11 @@ class Door {
|
||||
void setPaused(bool paused) { is_paused_ = paused; } // Pausa/despausa la animación
|
||||
|
||||
#ifdef _DEBUG
|
||||
void setPosition(float x, float y); // Mueve sprite y collider en vivo (editor; NO toca CollisionMap)
|
||||
void setPosition(float x, float y); // Mueve sprite y AABB en vivo (editor)
|
||||
#endif
|
||||
|
||||
private:
|
||||
std::shared_ptr<AnimatedSprite> sprite_; // Sprite animado de la puerta
|
||||
SDL_FRect collider_{}; // Rectángulo de colisión
|
||||
std::string id_; // Identificador
|
||||
State state_{State::CLOSED}; // Estado actual
|
||||
bool just_opened_{false}; // Flag one-shot: la puerta acaba de transicionar a OPENED
|
||||
|
||||
Reference in New Issue
Block a user