diff --git a/OpenRA.Editor/Form1.cs b/OpenRA.Editor/Form1.cs index 6364e5dd2b..c9834e1c8d 100644 --- a/OpenRA.Editor/Form1.cs +++ b/OpenRA.Editor/Form1.cs @@ -86,14 +86,17 @@ namespace OpenRA.Editor // TODO: make this work properly foreach (var init in Program.Rules.Actors[kv.Value.Type].GetInitKeys()) - apd.AddRow(init.First, + { + var initName = init.First; + apd.AddRow(initName, apd.MakeEditorControl(init.Second, () => { var nodesDict = objSaved.ToDictionary(); - return nodesDict.ContainsKey(init.First) ? nodesDict[init.First].Value : null; + return nodesDict.ContainsKey(initName) ? nodesDict[initName].Value : null; }, _ => { })); + } apd.ShowDialog(); diff --git a/OpenRA.Game/FileSystem/GlobalFileSystem.cs b/OpenRA.Game/FileSystem/GlobalFileSystem.cs index 8e45075217..ec7ced255a 100644 --- a/OpenRA.Game/FileSystem/GlobalFileSystem.cs +++ b/OpenRA.Game/FileSystem/GlobalFileSystem.cs @@ -199,13 +199,14 @@ namespace OpenRA.FileSystem foreach (var ext in exts) { + var possibleName = filename + ext; var folder = MountedFolders - .Where(x => x.Exists(filename + ext)) + .Where(x => x.Exists(possibleName)) .MaxByOrDefault(x => x.Priority); if (folder != null) { - s = folder.GetContent(filename + ext); + s = folder.GetContent(possibleName); return true; } } diff --git a/OpenRA.Mods.RA/Crates/LevelUpCrateAction.cs b/OpenRA.Mods.RA/Crates/LevelUpCrateAction.cs index 50d03a2e74..5212e408d2 100644 --- a/OpenRA.Mods.RA/Crates/LevelUpCrateAction.cs +++ b/OpenRA.Mods.RA/Crates/LevelUpCrateAction.cs @@ -68,9 +68,10 @@ namespace OpenRA.Mods.RA foreach (var actor in inRange.Append(collector)) { - actor.World.AddFrameEndTask(w => + var recipient = actor; // loop variable in closure hazard + recipient.World.AddFrameEndTask(w => { - var gainsExperience = actor.TraitOrDefault(); + var gainsExperience = recipient.TraitOrDefault(); if (gainsExperience != null) gainsExperience.GiveLevels(((LevelUpCrateActionInfo)info).Levels); }); diff --git a/OpenRA.Mods.RA/PrimaryBuilding.cs b/OpenRA.Mods.RA/PrimaryBuilding.cs index 6cf53664a3..226f1ff6fe 100755 --- a/OpenRA.Mods.RA/PrimaryBuilding.cs +++ b/OpenRA.Mods.RA/PrimaryBuilding.cs @@ -67,13 +67,16 @@ namespace OpenRA.Mods.RA // TODO: THIS IS SHIT // Cancel existing primaries foreach (var p in self.Info.Traits.Get().Produces) + { + var productionType = p; // benign closure hazard foreach (var b in self.World .ActorsWithTrait() .Where(a => a.Actor.Owner == self.Owner && a.Trait.IsPrimary && - a.Actor.Info.Traits.Get().Produces.Contains(p))) + a.Actor.Info.Traits.Get().Produces.Contains(productionType))) b.Trait.SetPrimaryProducer(b.Actor, false); + } isPrimary = true; diff --git a/OpenRA.Mods.RA/Render/WithMuzzleFlash.cs b/OpenRA.Mods.RA/Render/WithMuzzleFlash.cs index 0621331604..c5d7e4e028 100644 --- a/OpenRA.Mods.RA/Render/WithMuzzleFlash.cs +++ b/OpenRA.Mods.RA/Render/WithMuzzleFlash.cs @@ -38,6 +38,8 @@ namespace OpenRA.Mods.RA.Render foreach (var arm in self.TraitsImplementing()) { + var armClosure = arm; // closure hazard in AnimationWithOffset + // Skip armaments that don't define muzzles if (arm.Info.MuzzleSequence == null) continue; @@ -55,7 +57,7 @@ namespace OpenRA.Mods.RA.Render visible.Add(barrel, false); anims.Add(barrel, new AnimationWithOffset(muzzleFlash, - () => info.IgnoreOffset ? WVec.Zero : arm.MuzzleOffset(self, barrel), + () => info.IgnoreOffset ? WVec.Zero : armClosure.MuzzleOffset(self, barrel), () => !visible[barrel], () => false, p => WithTurret.ZOffsetFromCenter(self, p, 2))); diff --git a/OpenRA.Mods.RA/World/DomainIndex.cs b/OpenRA.Mods.RA/World/DomainIndex.cs index 9b6704cca2..4e27de07c6 100644 --- a/OpenRA.Mods.RA/World/DomainIndex.cs +++ b/OpenRA.Mods.RA/World/DomainIndex.cs @@ -89,7 +89,8 @@ namespace OpenRA.Mods.RA foreach (var cell in dirtyCells) { // Select all neighbors inside the map boundries - var neighbors = CVec.directions.Select(d => d + cell) + var thisCell = cell; // benign closure hazard + var neighbors = CVec.directions.Select(d => d + thisCell) .Where(c => map.Contains(c)); var found = false;