From a18d195cfd6e4d1656e68d5368d3a989b52b26c9 Mon Sep 17 00:00:00 2001 From: MrSimbax Date: Thu, 30 Jul 2015 17:47:26 +0200 Subject: [PATCH] Add an ability to cancel making a building (fixes #509) --- src/object/task/taskbuild.cpp | 41 +++++++++++++++++++++++++++++++++++ src/object/task/taskbuild.h | 1 + 2 files changed, 42 insertions(+) diff --git a/src/object/task/taskbuild.cpp b/src/object/task/taskbuild.cpp index f511a3c1..8ba74540 100644 --- a/src/object/task/taskbuild.cpp +++ b/src/object/task/taskbuild.cpp @@ -208,6 +208,22 @@ bool CTaskBuild::EventProcess(const Event &event) m_progress += event.rTime*m_speed; // other advance + // Cancel if the player try to move + float axeX = event.motionInput.x; + float axeY = event.motionInput.y; + float axeZ = event.motionInput.z; + if ( m_object->GetType() == OBJECT_HUMAN && + (axeX != 0.0f || axeY != 0.0f || axeZ != 0.0f) && + (m_phase == TBP_TURN || m_phase == TBP_MOVE || m_phase == TBP_TAKE || m_phase == TBP_PREP) ) + { + m_phase = TBP_STOP; + } + + if ( m_phase == TBP_STOP ) // stops? + { + return true; + } + if ( m_phase == TBP_TURN ) // preliminary rotation? { a = m_object->GetRotationY(); @@ -554,6 +570,31 @@ Error CTaskBuild::IsEnded() m_physics->SetMotorSpeedX(0.0f); } + if ( m_phase == TBP_STOP ) // canceled? + { + if ( m_progress < 1.0f && m_motion->GetAction() == MHS_GUN ) return ERR_CONTINUE; + + if ( m_motion->GetAction() == MHS_FIRE ) + { + m_motion->SetAction(MHS_GUN); + m_speed = 1.0f/1.0f; + m_progress = 0.0f; + return ERR_CONTINUE; + } + + m_motion->SetAction(-1); + + // Place gun back + m_object->SetObjectParent(14, 0); + m_object->SetPartPosition(14, Math::Vector(-1.5f, 0.3f, -1.35f)); + m_object->SetPartRotationZ(14, Math::PI); + + m_physics->SetMotorSpeedX(0.0f); + m_physics->SetMotorSpeedZ(0.0f); + + m_metal->SetLock(false); // make titanium usable + } + Abort(); return ERR_STOP; } diff --git a/src/object/task/taskbuild.h b/src/object/task/taskbuild.h index 292ff0b0..3993fdb2 100644 --- a/src/object/task/taskbuild.h +++ b/src/object/task/taskbuild.h @@ -37,6 +37,7 @@ const int TBMAXLIGHT = 4; enum TaskBuildPhase { + TBP_STOP = 0, // cancels task TBP_TURN = 1, // turns TBP_MOVE = 2, // forward/backward TBP_TAKE = 3, // takes gun