Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix error when Cybran air factories die while building #6636

Merged
merged 4 commits into from
Feb 7, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog/snippets/fix.6636.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- (#6636) Fix an error that occurs when a Cybran air factory dies while building something.
1 change: 1 addition & 0 deletions changelog/snippets/graphics.6636.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- (#6636) Fix some build effects for Cybran land and air factories never appearing.
89 changes: 45 additions & 44 deletions lua/EffectUtilities.lua
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,49 @@ local IEffectSetEmitterCurveParam = moho.IEffect.SetEmitterCurveParam
local IEffectSetEmitterParam = moho.IEffect.SetEmitterParam
local TrashBagAdd = TrashBag.Add

--#region Optimized functions

local EffectUtilitiesOpti = import("/lua/effectutilitiesopti.lua")
local EffectUtilitiesUEF = import("/lua/effectutilitiesuef.lua")
local EffectUtilitiesGeneric = import("/lua/effectutilitiesgeneric.lua")
local EffectUtilitiesAeon = import("/lua/effectutilitiesaeon.lua")

CreateCybranEngineerBuildEffectsOpti = EffectUtilitiesOpti.CreateCybranEngineerBuildEffects
CreateCybranBuildBeamsOpti = EffectUtilitiesOpti.CreateCybranBuildBeams
SpawnBuildBotsOpti = EffectUtilitiesOpti.SpawnBuildBots

CreateAeonBuildBaseThread = EffectUtilitiesAeon.CreateAeonBuildBaseThread
CreateAeonConstructionUnitBuildingEffects = EffectUtilitiesAeon.CreateAeonConstructionUnitBuildingEffects
CreateAeonCommanderBuildingEffects = EffectUtilitiesAeon.CreateAeonCommanderBuildingEffects
CreateAeonFactoryBuildingEffects = EffectUtilitiesAeon.CreateAeonFactoryBuildingEffects
CreateAeonColossusBuildingEffects = EffectUtilitiesAeon.CreateAeonColossusBuildingEffects
CreateAeonCZARBuildingEffects = EffectUtilitiesAeon.CreateAeonCZARBuildingEffects
CreateAeonTempestBuildingEffects = EffectUtilitiesAeon.CreateAeonTempestBuildingEffects
CreateAeonParagonBuildingEffects = EffectUtilitiesAeon.CreateAeonParagonBuildingEffects

CreateEffectsOpti = EffectUtilitiesGeneric.CreateEffectsOpti
CreateEffectsInTrashbag = EffectUtilitiesGeneric.CreateEffectsInTrashbag
CreateEffectsWithOffsetOpti = EffectUtilitiesGeneric.CreateEffectsWithOffsetOpti
CreateEffectsWithOffsetInTrashbag = EffectUtilitiesGeneric.CreateEffectsWithOffsetInTrashbag
CreateEffectsWithRandomOffsetOpti = EffectUtilitiesGeneric.CreateEffectsWithRandomOffsetOpti
CreateEffectsWithRandomOffsetInTrashbag = EffectUtilitiesGeneric.CreateEffectsWithRandomOffsetInTrashbag
CreateBoneEffectsOpti = EffectUtilitiesGeneric.CreateBoneEffectsOpti
CreateBoneEffectsInTrashbag = EffectUtilitiesGeneric.CreateBoneEffectsInTrashbag
CreateBoneEffectsOffsetOpti = EffectUtilitiesGeneric.CreateBoneEffectsOffsetOpti
CreateBoneEffectsOffsetInTrashbag = EffectUtilitiesGeneric.CreateBoneEffectsOffsetInTrashbag
CreateRandomEffectsOpti = EffectUtilitiesGeneric.CreateRandomEffectsOpti
CreateRandomEffectsInTrashbag = EffectUtilitiesGeneric.CreateRandomEffectsInTrashbag
PlayReclaimEffects = EffectUtilitiesGeneric.PlayReclaimEffects
PlayReclaimEndEffects = EffectUtilitiesGeneric.PlayReclaimEndEffects
ApplyWindDirection = EffectUtilitiesGeneric.ApplyWindDirection

CreateDefaultBuildBeams = EffectUtilitiesUEF.CreateDefaultBuildBeams
CreateUEFBuildSliceBeams = EffectUtilitiesUEF.CreateUEFBuildSliceBeams
CreateUEFUnitBeingBuiltEffects = EffectUtilitiesUEF.CreateUEFUnitBeingBuiltEffects
CreateUEFCommanderBuildSliceBeams = EffectUtilitiesUEF.CreateUEFCommanderBuildSliceBeams
CreateBuildCubeThread = EffectUtilitiesUEF.CreateBuildCubeThread
--#endregion

-- local DeprecatedWarnings = { }

---@alias AdjacencyBeam {Unit: Unit, Trash: TrashBag}
Expand Down Expand Up @@ -336,10 +379,10 @@ local UnitBuildEffects = {
--- Creates the Cybran factor build effects
---@param builder Unit
---@param unitBeingBuilt Unit
---@param buildBones Bone[]
---@param buildBones BuildBones
---@param buildEffectsBag TrashBag
function CreateCybranFactoryBuildEffects(builder, unitBeingBuilt, buildBones, buildEffectsBag)
CreateCybranBuildBeamsOpti(builder, nil, unitBeingBuilt, buildEffectsBag, false)
TrashBagAdd(buildEffectsBag, ForkThread(CreateCybranBuildBeamsOpti, builder, nil, unitBeingBuilt, buildEffectsBag, false))

local builderArmy = builder.Army
for _, bone in buildBones.BuildEffectBones do
Expand Down Expand Up @@ -1477,45 +1520,3 @@ function DestroyRemainingTeleportChargingEffects(unit, effectsBag)
unit.TeleportCybranSphere:Destroy()
end
end

--- Optimized functions --

local EffectUtilitiesOpti = import("/lua/effectutilitiesopti.lua")
local EffectUtilitiesUEF = import("/lua/effectutilitiesuef.lua")
local EffectUtilitiesGeneric = import("/lua/effectutilitiesgeneric.lua")
local EffectUtilitiesAeon = import("/lua/effectutilitiesaeon.lua")

CreateCybranEngineerBuildEffectsOpti = EffectUtilitiesOpti.CreateCybranEngineerBuildEffects
CreateCybranBuildBeamsOpti = EffectUtilitiesOpti.CreateCybranBuildBeams
SpawnBuildBotsOpti = EffectUtilitiesOpti.SpawnBuildBots

CreateAeonBuildBaseThread = EffectUtilitiesAeon.CreateAeonBuildBaseThread
CreateAeonConstructionUnitBuildingEffects = EffectUtilitiesAeon.CreateAeonConstructionUnitBuildingEffects
CreateAeonCommanderBuildingEffects = EffectUtilitiesAeon.CreateAeonCommanderBuildingEffects
CreateAeonFactoryBuildingEffects = EffectUtilitiesAeon.CreateAeonFactoryBuildingEffects
CreateAeonColossusBuildingEffects = EffectUtilitiesAeon.CreateAeonColossusBuildingEffects
CreateAeonCZARBuildingEffects = EffectUtilitiesAeon.CreateAeonCZARBuildingEffects
CreateAeonTempestBuildingEffects = EffectUtilitiesAeon.CreateAeonTempestBuildingEffects
CreateAeonParagonBuildingEffects = EffectUtilitiesAeon.CreateAeonParagonBuildingEffects

CreateEffectsOpti = EffectUtilitiesGeneric.CreateEffectsOpti
CreateEffectsInTrashbag = EffectUtilitiesGeneric.CreateEffectsInTrashbag
CreateEffectsWithOffsetOpti = EffectUtilitiesGeneric.CreateEffectsWithOffsetOpti
CreateEffectsWithOffsetInTrashbag = EffectUtilitiesGeneric.CreateEffectsWithOffsetInTrashbag
CreateEffectsWithRandomOffsetOpti = EffectUtilitiesGeneric.CreateEffectsWithRandomOffsetOpti
CreateEffectsWithRandomOffsetInTrashbag = EffectUtilitiesGeneric.CreateEffectsWithRandomOffsetInTrashbag
CreateBoneEffectsOpti = EffectUtilitiesGeneric.CreateBoneEffectsOpti
CreateBoneEffectsInTrashbag = EffectUtilitiesGeneric.CreateBoneEffectsInTrashbag
CreateBoneEffectsOffsetOpti = EffectUtilitiesGeneric.CreateBoneEffectsOffsetOpti
CreateBoneEffectsOffsetInTrashbag = EffectUtilitiesGeneric.CreateBoneEffectsOffsetInTrashbag
CreateRandomEffectsOpti = EffectUtilitiesGeneric.CreateRandomEffectsOpti
CreateRandomEffectsInTrashbag = EffectUtilitiesGeneric.CreateRandomEffectsInTrashbag
PlayReclaimEffects = EffectUtilitiesGeneric.PlayReclaimEffects
PlayReclaimEndEffects = EffectUtilitiesGeneric.PlayReclaimEndEffects
ApplyWindDirection = EffectUtilitiesGeneric.ApplyWindDirection

CreateDefaultBuildBeams = EffectUtilitiesUEF.CreateDefaultBuildBeams
CreateUEFBuildSliceBeams = EffectUtilitiesUEF.CreateUEFBuildSliceBeams
CreateUEFUnitBeingBuiltEffects = EffectUtilitiesUEF.CreateUEFUnitBeingBuiltEffects
CreateUEFCommanderBuildSliceBeams = EffectUtilitiesUEF.CreateUEFCommanderBuildSliceBeams
CreateBuildCubeThread = EffectUtilitiesUEF.CreateBuildCubeThread
2 changes: 1 addition & 1 deletion lua/EffectUtilitiesOpti.lua
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ end
--- bots share the welding point which each other, as does the builder with
--- itself.
---@param builder Unit A builder with builder.buildEffectBones set
---@param bots Unit[] The bots of the builder
---@param bots? Unit[] The bots of the builder
---@param unitBeingBuilt Unit The unit that we're building
---@param buildEffectsBag TrashBag The bag that we use to store / trash all effects
---@param noBuilderBeams boolean Whether or not the builder is a building
Expand Down
5 changes: 4 additions & 1 deletion lua/sim/units/cybran/CAirFactoryUnit.lua
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,15 @@ local AnimatorSetRate = moho.AnimationManipulator.SetRate
---@class CAirFactoryUnit : AirFactoryUnit
---@field BuildEffectsBag TrashBag
---@field BuildAnimManip moho.AnimationManipulator
---@field BuildBones BuildBones
CAirFactoryUnit = ClassUnit(AirFactoryUnit) {

---@param self AirFactoryUnit
OnCreate = function(self)
AirFactoryUnitOnCreate(self)

self.BuildBones = self.Blueprint.General.BuildBones

local buildAnimManip = CreateAnimator(self)
AnimatorPlayAnim(buildAnimManip, self.Blueprint.Display.AnimationBuild, true)
AnimatorSetRate(buildAnimManip, 0)
Expand All @@ -59,7 +62,7 @@ CAirFactoryUnit = ClassUnit(AirFactoryUnit) {
end

WaitTicks(2)
CreateCybranFactoryBuildEffects(self, unitBeingBuilt, self.BuildEffectBones, self.BuildEffectsBag)
CreateCybranFactoryBuildEffects(self, unitBeingBuilt, self.BuildBones, self.BuildEffectsBag)
end,

---@param self CAirFactoryUnit
Expand Down
5 changes: 4 additions & 1 deletion lua/sim/units/cybran/CLandFactoryUnit.lua
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ local AnimatorSetRate = moho.AnimationManipulator.SetRate
---@class CLandFactoryUnit : LandFactoryUnit
---@field BuildEffectsBag TrashBag
---@field BuildAnimManip moho.AnimationManipulator
---@field BuildBones BuildBones
CLandFactoryUnit = ClassUnit(LandFactoryUnit) {

---@param self AirFactoryUnit
Expand All @@ -48,6 +49,8 @@ CLandFactoryUnit = ClassUnit(LandFactoryUnit) {
AnimatorPlayAnim(buildAnimManip, self.Blueprint.Display.AnimationBuild, true)
AnimatorSetRate(buildAnimManip, 0)
self.BuildAnimManip = self.Trash:Add(buildAnimManip)

self.BuildBones = self.Blueprint.General.BuildBones
end,

---@param self CLandFactoryUnit
Expand All @@ -58,7 +61,7 @@ CLandFactoryUnit = ClassUnit(LandFactoryUnit) {
end

WaitTicks(2)
CreateCybranFactoryBuildEffects(self, unitBeingBuilt, self.Blueprint.General.BuildBones, self.BuildEffectsBag)
CreateCybranFactoryBuildEffects(self, unitBeingBuilt, self.BuildBones, self.BuildEffectsBag)
end,

---@param self CLandFactoryUnit
Expand Down
6 changes: 4 additions & 2 deletions lua/sim/units/cybran/CSeaFactoryUnit.lua
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ local AnimatorSetRate = moho.AnimationManipulator.SetRate

---@class CSeaFactoryUnit : SeaFactoryUnit
---@field BuildEffectsBag TrashBag
---@field BuildBones BuildBones
CSeaFactoryUnit = ClassUnit(SeaFactoryUnit) {

---@param self CSeaFactoryUnit
Expand All @@ -56,8 +57,9 @@ CSeaFactoryUnit = ClassUnit(SeaFactoryUnit) {
AnimatorPlayAnim(buildAnimManip, self.Blueprint.Display.AnimationBuild, true)
AnimatorSetRate(buildAnimManip, 0)
self.BuildAnimManip = self.Trash:Add(buildAnimManip)
end,

self.BuildBones = self.Blueprint.General.BuildBones
end,

---@param self CAirFactoryUnit
---@param unitBeingBuilt Unit
Expand All @@ -68,7 +70,7 @@ CSeaFactoryUnit = ClassUnit(SeaFactoryUnit) {
end

WaitTicks(2)
CreateCybranFactoryBuildEffects(self, unitBeingBuilt, self.BuildEffectBones, self.BuildEffectsBag)
CreateCybranFactoryBuildEffects(self, unitBeingBuilt, self.BuildBones, self.BuildEffectsBag)
end,

---@param self CSeaFactoryUnit
Expand Down
Loading