diff --git a/OpenRA.Game/Traits/World/Shroud.cs b/OpenRA.Game/Traits/World/Shroud.cs index ddbc77108d..7089d9c09e 100644 --- a/OpenRA.Game/Traits/World/Shroud.cs +++ b/OpenRA.Game/Traits/World/Shroud.cs @@ -48,13 +48,7 @@ namespace OpenRA.Traits get { return Disabled ? null : exploredBounds; } } - public event Action Dirty = () => { }; - - public void Jank() - { - Dirty(); - } - + public Action Dirty = () => { }; public Shroud(World world) { diff --git a/OpenRA.Mods.RA/Missions/MonsterTankMadnessScript.cs b/OpenRA.Mods.RA/Missions/MonsterTankMadnessScript.cs index 1e7feb2864..d4b2164875 100644 --- a/OpenRA.Mods.RA/Missions/MonsterTankMadnessScript.cs +++ b/OpenRA.Mods.RA/Missions/MonsterTankMadnessScript.cs @@ -281,13 +281,23 @@ namespace OpenRA.Mods.RA.Missions void OnSuperTankDomeInfiltrated(Actor spy) { if (superTankDomeInfiltratedTick != -1) return; + superTankDome.QueueActivity(new Transform(superTankDome, "dome") { SkipMakeAnims = true }); - turkey.Stances[greece] = turkey.Stances[neutral] = Stance.Ally; - greece.Stances[turkey] = neutral.Stances[turkey] = Stance.Ally; - greece.Shroud.ExploreAll(world); + + world.AddFrameEndTask(_ => + { + superTanks.Do(world.Remove); + turkey.Stances[greece] = turkey.Stances[neutral] = Stance.Ally; + greece.Stances[turkey] = neutral.Stances[turkey] = Stance.Ally; + greece.Shroud.ExploreAll(world); + superTanks.Do(world.Add); + }); + foreach (var tank in superTanks.Where(t => !t.IsDead() && t.IsInWorld)) MissionUtils.AttackNearestLandActor(false, tank, ussr); + superTankDomeInfiltratedTick = world.FrameNumber; + objectives[InfiltrateRadarDomeID].Status = ObjectiveStatus.Completed; OnObjectivesUpdated(true); } diff --git a/OpenRA.Mods.RA/Widgets/Logic/ObserverShroudSelectorLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/ObserverShroudSelectorLogic.cs index 2fc3344344..ba2b14c402 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/ObserverShroudSelectorLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/ObserverShroudSelectorLogic.cs @@ -41,11 +41,11 @@ namespace OpenRA.Mods.RA.Widgets.Logic var views = world.Players.Where(p => !p.NonCombatant).ToDictionary(p => p.PlayerName, p => new CameraOption("{0}'s view".F(p.PlayerName), () => world.RenderedPlayer == p, - () => { world.RenderedPlayer = p; world.RenderedShroud.Jank(); } + () => { world.RenderedPlayer = p; world.RenderedShroud.Dirty(); } )); views.Add("", new CameraOption("World view", () => world.RenderedPlayer == null, - () => { world.RenderedPlayer = null; world.RenderedShroud.Jank(); } + () => { world.RenderedPlayer = null; world.RenderedShroud.Dirty(); } )); var shroudSelector = widget.Get("SHROUD_SELECTOR");