cancel building when building from outside and stopping

This commit is contained in:
Tim Felgentreff 2022-03-15 22:25:42 +01:00
parent 00468bd53e
commit a79424e07c
3 changed files with 12 additions and 0 deletions

View file

@ -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
*/

View file

@ -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) {

View file

@ -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);