From 73d491549395406a31fb7081d5ba6aec27918740 Mon Sep 17 00:00:00 2001 From: XProger Date: Sat, 30 Jun 2018 23:57:54 +0300 Subject: [PATCH] fix switch state management --- src/controller.h | 2 +- src/lara.h | 2 +- src/trigger.h | 9 +++++++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/controller.h b/src/controller.h index 0fbae9e..71cdb80 100644 --- a/src/controller.h +++ b/src/controller.h @@ -513,7 +513,7 @@ struct Controller { } virtual bool activate() { - if (flags.state != TR::Entity::asNone) + if (flags.state == TR::Entity::asActive) return false; flags.invisible = false; flags.state = TR::Entity::asActive; diff --git a/src/lara.h b/src/lara.h index 747babf..0bec786 100644 --- a/src/lara.h +++ b/src/lara.h @@ -1813,7 +1813,7 @@ struct Lara : Character { case TR::Level::Trigger::SWITCH : { Switch *controller = (Switch*)level->entities[info.trigCmd[cmdIndex++].args].controller; - if (controller->flags.state == TR::Entity::asNone) { + if (controller->flags.state != TR::Entity::asActive) { limit = state == STATE_STOP ? &TR::Limits::SWITCH : &TR::Limits::SWITCH_UNDERWATER; if (checkInteraction(controller, limit, Input::state[camera->cameraIndex][cAction])) { actionState = (controller->state == Switch::STATE_DOWN && stand == STAND_GROUND) ? STATE_SWITCH_UP : STATE_SWITCH_DOWN; diff --git a/src/trigger.h b/src/trigger.h index bbd6bef..9d9b223 100644 --- a/src/trigger.h +++ b/src/trigger.h @@ -18,13 +18,18 @@ struct Switch : Controller { if (flags.state == TR::Entity::asInactive) { if (state == STATE_DOWN && t > 0.0f) { timer = t; - flags.state = TR::Entity::asActive; + Controller::activate(); } else - deactivate(true); + Controller::deactivate(true); return true; } return false; } + + virtual void deactivate(bool removeFromList) { + Controller::deactivate(true); + flags.state = TR::Entity::asInactive; + } virtual bool activate() { if (Controller::activate()) {