Skip to content

Commit

Permalink
Prevent siloes from cancelling missiles when issued a hard-stop comma…
Browse files Browse the repository at this point in the history
…nd (#6557)

## Description of the proposed changes
- Silos without engineering suites (SML, TML, SML subs, Sera battleship)
will pause missile construction instead of cancelling (and wasting
progress) when issued a hard stop command mid-build.
- Silos with engineering suites (ACUs and SACUs) are unchanged, and will
cancel missiles under construction when issued a hard-stop. This is to
prevent a situation where you want to construct something with the unit
but don't want to spend additional resources on constructing a missile
at the same time.
- Code changes: `Stop` is moved below `ClearCommands` to prevent LLS
errors/be next to soft stop. Unnecessary local redefinition of `units`
at the beginning of `Stop` and `SoftStop` is removed.

## Testing done on the proposed changes
Spawn the following units and issue soft- and hard-stop commands. SACUs
and ACUs will cancel missile orders when issued a hard-stop command. All
other units will pause construction except Yolona (which can't be
paused).

Naval unit spawn:
   CreateUnitAtMouse('urs0304', 0,   -4.50,   -0.79, -1.05475)
   CreateUnitAtMouse('xss0302', 0,   13.22,    2.00, -0.92170)
   CreateUnitAtMouse('uas0304', 0,  -11.28,   -0.49, -1.09571)
   CreateUnitAtMouse('ues0304', 0,    2.56,   -0.72, -1.05031)

Land unit and structure spawn:
   CreateUnitAtMouse('urb2305', 0,   -4.89,  -20.43,  0.00000)
   CreateUnitAtMouse('xrb0304', 0,   -5.89,   18.57, -0.00000)
   CreateUnitAtMouse('xrb0304', 0,   -7.89,   18.57, -0.00000)
   CreateUnitAtMouse('xrb0304', 0,   -1.89,   18.57, -0.00000)
   CreateUnitAtMouse('xrb0304', 0,   -3.89,   18.57, -0.00000)
   CreateUnitAtMouse('xsl0001', 0,    3.24,   -3.47,  0.00000)
   CreateUnitAtMouse('xsl0301', 0,    0.24,   -3.47,  0.00000)
   CreateUnitAtMouse('uel0001', 0,   -2.76,   -3.47,  0.00000)
   CreateUnitAtMouse('xrb0304', 0,    8.11,   18.57, -0.00000)
   CreateUnitAtMouse('xrb0304', 0,    6.11,   18.57, -0.00000)
   CreateUnitAtMouse('urb2108', 0,    2.11,   -8.43,  0.00000)
   CreateUnitAtMouse('xrb0304', 0,   10.11,   18.57, -0.00000)
   CreateUnitAtMouse('xsb2305', 0,    4.11,  -20.43,  0.00000)
   CreateUnitAtMouse('xsb2108', 0,    6.11,   -8.43,  0.00000)
   CreateUnitAtMouse('uab2305', 0,   13.11,  -20.43,  0.00000)
   CreateUnitAtMouse('ueb2305', 0,  -12.89,  -20.43,  0.00000)
   CreateUnitAtMouse('xsb2401', 0,    0.11,  -29.43,  0.00000)
   CreateUnitAtMouse('xrb0304', 0,    4.11,   18.57, -0.00000)
   CreateUnitAtMouse('ueb2108', 0,   -5.89,   -8.43,  0.00000)
   CreateUnitAtMouse('uab2108', 0,   -1.89,   -8.43,  0.00000)
   CreateUnitAtMouse('xrb0304', 0,    2.11,   18.57, -0.00000)
   CreateUnitAtMouse('xrb0304', 0,    0.11,   18.57, -0.00000)
   CreateUnitAtMouse('xab1401', 0,  -11.89,  -30.43, -0.00000)
  • Loading branch information
clyfordv authored Nov 26, 2024
1 parent 78dfcbc commit 4eeccb8
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 9 deletions.
1 change: 1 addition & 0 deletions changelog/snippets/feature.6557.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- (#6557) Siloes without engineering suites will not cancel missile construction when issued a hard-stop order (siloes will pause construction instead).
32 changes: 23 additions & 9 deletions lua/ui/game/orders.lua
Original file line number Diff line number Diff line change
Expand Up @@ -298,14 +298,6 @@ local function MomentaryOrderBehavior(self, modifiers)
self:SetCheck(false)
end

function Stop(units)
local units = units or GetSelectedUnits()

if units[1] then
IssueUnitCommand(units, 'Stop')
end
end

function ClearCommands(units)
local cb = {Func = 'ClearCommands'}

Expand All @@ -326,8 +318,30 @@ function ClearCommands(units)
SimCallback(cb, true)
end

-- This command (hard stop) will filter out non-construction silo units to avoid wasting partially completed missiles
-- Those units will have their commands cleared, but will be paused instead of stopped
function Stop(units)
units = units or GetSelectedUnits()
local silos = EntityCategoryFilterDown(categories.SILO - categories.CONSTRUCTION, units)
if silos[1] then
ClearCommands(silos)
for _, silo in silos do
if not GetIsPausedOfUnit(silo) then
local missileInfo = silo:GetMissileInfo()
if missileInfo.nukeSiloBuildCount > 0 or missileInfo.tacticalSiloBuildCount > 0 then
IssueUnitCommand(silo, 'Pause')
end
end
end
end
units = EntityCategoryFilterOut(categories.SILO - categories.CONSTRUCTION, units)
if units[1] then
IssueUnitCommand(units, 'Stop')
end
end

function SoftStop(units)
local units = units or GetSelectedUnits()
units = units or GetSelectedUnits()
Construction.ResetOrderQueues(units)
ClearCommands(EntityCategoryFilterDown(categories.SILO, units))
Stop(EntityCategoryFilterOut((categories.SHOWQUEUE * categories.STRUCTURE) + categories.FACTORY + categories.SILO, units))
Expand Down

0 comments on commit 4eeccb8

Please sign in to comment.