migrades portes i plataformes a solidActor
This commit is contained in:
@@ -5,7 +5,9 @@
|
||||
|
||||
// Constructor: carga la animación y posiciona la puerta. Si start_opened es
|
||||
// true, la puerta se crea ya abierta (estado OPENED, animación "opened"); en
|
||||
// caso contrario, se crea cerrada (estado CLOSED, animación "closed").
|
||||
// caso contrario, se crea cerrada (estado CLOSED, animación "closed") y
|
||||
// activa el flag BLOCKS_PLAYER del SolidActor para que los sweeps del
|
||||
// SolidActorManager la vean como muro.
|
||||
Door::Door(const Data& data, bool start_opened)
|
||||
: sprite_(std::make_shared<AnimatedSprite>(Resource::Cache::get()->getAnimationData(data.animation_path))),
|
||||
id_(data.id),
|
||||
@@ -13,7 +15,10 @@ Door::Door(const Data& data, bool start_opened)
|
||||
sprite_->setPosX(data.x);
|
||||
sprite_->setPosY(data.y);
|
||||
sprite_->setCurrentAnimation(start_opened ? "opened" : "closed");
|
||||
collider_ = sprite_->getRect();
|
||||
aabb_ = sprite_->getRect();
|
||||
if (!start_opened) {
|
||||
flags_ = BLOCKS_PLAYER;
|
||||
}
|
||||
}
|
||||
|
||||
// Pinta la puerta en pantalla
|
||||
@@ -23,8 +28,9 @@ void Door::render() {
|
||||
|
||||
// Avanza la animación. Solo OPENING anima de verdad; CLOSED y OPENED son
|
||||
// frames estáticos. Cuando la animación de OPENING termina, transiciona a
|
||||
// OPENED, fija el frame final y marca just_opened_ para que el DoorManager
|
||||
// libere los tiles de colisión.
|
||||
// OPENED, fija el frame final, limpia el flag BLOCKS_PLAYER (los sweeps
|
||||
// del SolidActorManager dejan de verla como muro) y marca just_opened_
|
||||
// para que el DoorManager persista el estado abierto en DoorTracker.
|
||||
void Door::update(float delta_time) {
|
||||
if (is_paused_) {
|
||||
return;
|
||||
@@ -35,6 +41,7 @@ void Door::update(float delta_time) {
|
||||
if (sprite_->animationIsCompleted()) {
|
||||
state_ = State::OPENED;
|
||||
sprite_->setCurrentAnimation("opened");
|
||||
flags_ = 0; // Deja de bloquear al Player
|
||||
just_opened_ = true;
|
||||
}
|
||||
}
|
||||
@@ -65,11 +72,12 @@ auto Door::justOpened() -> bool {
|
||||
}
|
||||
|
||||
#ifdef _DEBUG
|
||||
// Mueve la puerta a la posición indicada (sprite + collider). NO toca el
|
||||
// CollisionMap — eso es responsabilidad del DoorManager (moveDoor/removeDoor).
|
||||
// Mueve la puerta a la posición indicada (sprite + AABB del SolidActor).
|
||||
// Usado por el editor; el DoorManager::moveDoor se encarga del bookkeeping
|
||||
// de registro en el SolidActorManager.
|
||||
void Door::setPosition(float x, float y) {
|
||||
sprite_->setPosX(x);
|
||||
sprite_->setPosY(y);
|
||||
collider_ = sprite_->getRect();
|
||||
aabb_ = sprite_->getRect();
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user