From 2cadd7018b9f2f1560c105d5874fdea05c3e806f Mon Sep 17 00:00:00 2001 From: Eshed Date: Tue, 8 Mar 2016 12:52:30 +0200 Subject: [PATCH] Add Spring.ClearUnitGoal(unitID) will help custom commands to clean after themselves also fix #5153 --- rts/Lua/LuaSyncedCtrl.cpp | 13 +++++++++++++ rts/Lua/LuaSyncedCtrl.h | 1 + rts/Sim/MoveTypes/StrafeAirMoveType.cpp | 3 ++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/rts/Lua/LuaSyncedCtrl.cpp b/rts/Lua/LuaSyncedCtrl.cpp index 3a17963db2e..e6b8abded90 100644 --- a/rts/Lua/LuaSyncedCtrl.cpp +++ b/rts/Lua/LuaSyncedCtrl.cpp @@ -196,6 +196,7 @@ bool LuaSyncedCtrl::PushEntries(lua_State* L) REGISTER_LUA_CFUNC(SetUnitFuel); REGISTER_LUA_CFUNC(SetUnitMoveGoal); REGISTER_LUA_CFUNC(SetUnitLandGoal); + REGISTER_LUA_CFUNC(ClearUnitGoal); REGISTER_LUA_CFUNC(SetUnitNeutral); REGISTER_LUA_CFUNC(SetUnitTarget); REGISTER_LUA_CFUNC(SetUnitMidAndAimPos); @@ -2391,6 +2392,18 @@ int LuaSyncedCtrl::SetUnitLandGoal(lua_State* L) } +int LuaSyncedCtrl::ClearUnitGoal(lua_State* L) +{ + CUnit* unit = ParseUnit(L, __FUNCTION__, 1); + + if (unit == nullptr) + return 0; + + unit->moveType->StopMoving(); + return 0; +} + + int LuaSyncedCtrl::SetUnitPhysics(lua_State* L) { return (SetSolidObjectPhysicalState(L, ParseUnit(L, __FUNCTION__, 1))); diff --git a/rts/Lua/LuaSyncedCtrl.h b/rts/Lua/LuaSyncedCtrl.h index 84f56aa3647..7a75017299f 100644 --- a/rts/Lua/LuaSyncedCtrl.h +++ b/rts/Lua/LuaSyncedCtrl.h @@ -85,6 +85,7 @@ class LuaSyncedCtrl static int SetUnitFuel(lua_State* L); static int SetUnitMoveGoal(lua_State* L); static int SetUnitLandGoal(lua_State* L); + static int ClearUnitGoal(lua_State* L); static int SetUnitNeutral(lua_State* L); static int SetUnitTarget(lua_State* L); static int SetUnitMidAndAimPos(lua_State* L); diff --git a/rts/Sim/MoveTypes/StrafeAirMoveType.cpp b/rts/Sim/MoveTypes/StrafeAirMoveType.cpp index f5e9e1df51c..2018cfb64eb 100644 --- a/rts/Sim/MoveTypes/StrafeAirMoveType.cpp +++ b/rts/Sim/MoveTypes/StrafeAirMoveType.cpp @@ -1314,10 +1314,11 @@ void CStrafeAirMoveType::StopMoving(bool callScript, bool hardStop) SetGoal(owner->pos); SetWantedMaxSpeed(0.0f); - if (aircraftState != AAirMoveType::AIRCRAFT_FLYING) + if (aircraftState != AAirMoveType::AIRCRAFT_FLYING && aircraftState != AAirMoveType::AIRCRAFT_LANDING) return; if (owner->unitDef->DontLand() || !autoLand) { + SetState(AIRCRAFT_FLYING); return; } SetState(AIRCRAFT_LANDING);