From a79424e07c106ea6e767bf8e7427ff2524008cfe Mon Sep 17 00:00:00 2001 From: Tim Felgentreff <timfelgentreff@gmail.com> Date: Tue, 15 Mar 2022 22:25:42 +0100 Subject: [PATCH] cancel building when building from outside and stopping --- src/action/action_build.cpp | 8 ++++++++ src/action/command.cpp | 3 +++ src/include/action/action_build.h | 1 + 3 files changed, 12 insertions(+) diff --git a/src/action/action_build.cpp b/src/action/action_build.cpp index 7dcf11241..01eeb5441 100644 --- a/src/action/action_build.cpp +++ b/src/action/action_build.cpp @@ -489,6 +489,14 @@ bool COrder_Build::BuildFromOutside(CUnit &unit) const } } +/* virtual */ void COrder_Build::Cancel(CUnit &unit) +{ + if (this->State == State_BuildFromOutside && this->BuildingUnit != NULL && this->BuildingUnit->CurrentAction() == UnitActionBuilt) { + COrder_Built &targetOrder = *static_cast<COrder_Built *>(this->BuildingUnit->CurrentOrder()); + targetOrder.Cancel(*this->BuildingUnit); + } +} + /** ** Get goal position */ diff --git a/src/action/command.cpp b/src/action/command.cpp index 515ad9ebd..b27212e24 100644 --- a/src/action/command.cpp +++ b/src/action/command.cpp @@ -37,6 +37,7 @@ #include "actions.h" #include "action/action_built.h" +#include "action/action_build.h" #include "action/action_research.h" #include "action/action_train.h" #include "action/action_upgradeto.h" @@ -69,6 +70,8 @@ static void ReleaseOrders(CUnit &unit) for (size_t i = 0; i != unit.Orders.size(); ++i) { if (unit.Orders[i]->Action == UnitActionBuilt) { (dynamic_cast<COrder_Built *>(unit.Orders[i]))->Cancel(unit); + } if (unit.Orders[i]->Action == UnitActionBuild) { + (dynamic_cast<COrder_Build *>(unit.Orders[i]))->Cancel(unit); } else if (unit.Orders[i]->Action == UnitActionResearch) { (dynamic_cast<COrder_Research *>(unit.Orders[i]))->Cancel(unit); } else if (unit.Orders[i]->Action == UnitActionTrain) { diff --git a/src/include/action/action_build.h b/src/include/action/action_build.h index ff909e3b4..f87593d7e 100644 --- a/src/include/action/action_build.h +++ b/src/include/action/action_build.h @@ -52,6 +52,7 @@ public: virtual bool ParseSpecificData(lua_State *l, int &j, const char *value, const CUnit &unit); virtual void Execute(CUnit &unit); + virtual void Cancel(CUnit &unit); virtual PixelPos Show(const CViewport &vp, const PixelPos &lastScreenPos) const; virtual void UpdatePathFinderData(PathFinderInput &input);