diff --git a/OpenRA.Game/Graphics/ModelRenderer.cs b/OpenRA.Game/Graphics/ModelRenderer.cs index d557f6b786..99528a4e00 100644 --- a/OpenRA.Game/Graphics/ModelRenderer.cs +++ b/OpenRA.Game/Graphics/ModelRenderer.cs @@ -223,8 +223,7 @@ namespace OpenRA.Graphics ShadowAmbient, ShadowDiffuse, shadowPalette.TextureMidIndex, normals.TextureMidIndex); } } - } - )); + })); var screenLightVector = Util.MatrixVectorMultiply(invShadowTransform, ZVector); screenLightVector = Util.MatrixVectorMultiply(cameraTransform, screenLightVector); diff --git a/OpenRA.Game/Graphics/WorldRenderer.cs b/OpenRA.Game/Graphics/WorldRenderer.cs index eecf85c132..97178d84af 100644 --- a/OpenRA.Game/Graphics/WorldRenderer.cs +++ b/OpenRA.Game/Graphics/WorldRenderer.cs @@ -177,8 +177,7 @@ namespace OpenRA.Graphics foreach (var e in World.Effects) { - var ea = e as IEffectAboveShroud; - if (ea == null) + if (!(e is IEffectAboveShroud ea)) continue; foreach (var renderable in ea.RenderAboveShroud(this)) @@ -219,8 +218,7 @@ namespace OpenRA.Graphics foreach (var e in World.Effects) { - var ea = e as IEffectAnnotation; - if (ea == null) + if (!(e is IEffectAnnotation ea)) continue; foreach (var renderAnnotation in ea.RenderAnnotation(this)) diff --git a/OpenRA.Game/Map/ActorReference.cs b/OpenRA.Game/Map/ActorReference.cs index 16982c0ca6..97e6a1d336 100644 --- a/OpenRA.Game/Map/ActorReference.cs +++ b/OpenRA.Game/Map/ActorReference.cs @@ -87,8 +87,7 @@ namespace OpenRA var ret = new MiniYaml(Type); foreach (var o in initDict.Value) { - var init = o as ActorInit; - if (init == null || o is ISuppressInitExport) + if (!(o is ActorInit init) || o is ISuppressInitExport) continue; if (initFilter != null && !initFilter(init)) diff --git a/OpenRA.Game/Primitives/BitSet.cs b/OpenRA.Game/Primitives/BitSet.cs index 6baaba76f9..7072df55bb 100644 --- a/OpenRA.Game/Primitives/BitSet.cs +++ b/OpenRA.Game/Primitives/BitSet.cs @@ -98,7 +98,7 @@ namespace OpenRA.Primitives public static bool operator !=(BitSet me, BitSet other) { return !(me == other); } public bool Equals(BitSet other) { return other == this; } - public override bool Equals(object obj) { return obj is BitSet && Equals((BitSet)obj); } + public override bool Equals(object obj) { return obj is BitSet bitSet && Equals(bitSet); } public override int GetHashCode() { return bits.GetHashCode(); } public bool IsEmpty => bits == 0; diff --git a/OpenRA.Game/Scripting/ScriptMemberWrapper.cs b/OpenRA.Game/Scripting/ScriptMemberWrapper.cs index defb0d2631..ba5cd99b56 100644 --- a/OpenRA.Game/Scripting/ScriptMemberWrapper.cs +++ b/OpenRA.Game/Scripting/ScriptMemberWrapper.cs @@ -86,8 +86,7 @@ namespace OpenRA.Scripting { foreach (var arg in clrArgs) { - var table = arg as LuaValue[]; - if (table == null) + if (!(arg is LuaValue[] table)) continue; foreach (var value in table) diff --git a/OpenRA.Mods.Cnc/Traits/Minelayer.cs b/OpenRA.Mods.Cnc/Traits/Minelayer.cs index 48fa0e00cd..5a6192394c 100644 --- a/OpenRA.Mods.Cnc/Traits/Minelayer.cs +++ b/OpenRA.Mods.Cnc/Traits/Minelayer.cs @@ -104,8 +104,8 @@ namespace OpenRA.Mods.Cnc.Traits { case "BeginMinefield": var start = self.World.Map.CellContaining(target.CenterPosition); - if (self.World.OrderGenerator is MinefieldOrderGenerator) - ((MinefieldOrderGenerator)self.World.OrderGenerator).AddMinelayer(self); + if (self.World.OrderGenerator is MinefieldOrderGenerator generator) + generator.AddMinelayer(self); else self.World.OrderGenerator = new MinefieldOrderGenerator(self, start, queued); @@ -145,6 +145,8 @@ namespace OpenRA.Mods.Cnc.Traits // A different minelayer might have started laying the field without this minelayer knowing the start minefieldStart = order.ExtraLocation; +#pragma warning disable IDE0019 // Use pattern matching + var movement = self.Trait(); var mobile = movement as Mobile; @@ -153,6 +155,8 @@ namespace OpenRA.Mods.Cnc.Traits && movement.CanEnterCell(c, null, BlockedByActor.Immovable) && (mobile != null && mobile.CanStayInCell(c))) .OrderBy(c => (c - minefieldStart).LengthSquared).ToList(); +#pragma warning restore IDE0019 // Use pattern matching + self.QueueActivity(order.Queued, new LayMines(self, minefield)); self.ShowTargetLines(); } @@ -305,6 +309,8 @@ namespace OpenRA.Mods.Cnc.Traits var minefield = GetMinefieldCells(minefieldStart, lastMousePos, minelayers.Max(m => m.Info.TraitInfo().MinefieldDepth)); +#pragma warning disable IDE0019 // Use pattern matching + var movement = minelayer.Trait(); var mobile = movement as Mobile; var pal = wr.Palette(TileSet.TerrainPaletteInternalName); @@ -335,6 +341,8 @@ namespace OpenRA.Mods.Cnc.Traits } yield return new SpriteRenderable(tile, world.Map.CenterOfCell(c), WVec.Zero, -511, pal, 1f, alpha, float3.Ones, TintModifiers.IgnoreWorldTint, true); + +#pragma warning restore IDE0019 // Use pattern matching } } diff --git a/OpenRA.Mods.Common/Activities/Move/Move.cs b/OpenRA.Mods.Common/Activities/Move/Move.cs index 3fb84e10d0..f1720b810b 100644 --- a/OpenRA.Mods.Common/Activities/Move/Move.cs +++ b/OpenRA.Mods.Common/Activities/Move/Move.cs @@ -309,8 +309,7 @@ namespace OpenRA.Mods.Common.Activities { foreach (var actor in self.World.ActorMap.GetActorsAt(cell)) { - var move = actor.OccupiesSpace as Mobile; - if (move == null || !move.IsTraitEnabled() || !move.IsLeaving()) + if (!(actor.OccupiesSpace is Mobile move) || !move.IsTraitEnabled() || !move.IsLeaving()) return false; } diff --git a/OpenRA.Mods.Common/Traits/Attack/AttackBase.cs b/OpenRA.Mods.Common/Traits/Attack/AttackBase.cs index 81b95a68f2..8b4f308f23 100644 --- a/OpenRA.Mods.Common/Traits/Attack/AttackBase.cs +++ b/OpenRA.Mods.Common/Traits/Attack/AttackBase.cs @@ -155,8 +155,7 @@ namespace OpenRA.Mods.Common.Traits return false; // PERF: Mobile implements IPositionable, so we can use 'as' to save a trait look-up here. - var mobile = positionable as Mobile; - if (mobile != null && !mobile.CanInteractWithGroundLayer(self)) + if (positionable is Mobile mobile && !mobile.CanInteractWithGroundLayer(self)) return false; return true; diff --git a/OpenRA.Mods.Common/UtilityCommands/CheckMissingSprites.cs b/OpenRA.Mods.Common/UtilityCommands/CheckMissingSprites.cs index ce04e2cce5..5ac4857742 100644 --- a/OpenRA.Mods.Common/UtilityCommands/CheckMissingSprites.cs +++ b/OpenRA.Mods.Common/UtilityCommands/CheckMissingSprites.cs @@ -55,8 +55,7 @@ namespace OpenRA.Mods.Common.UtilityCommands { foreach (var sequence in kv.Value.Sequences(image)) { - var s = kv.Value.GetSequence(image, sequence) as FileNotFoundSequence; - if (s == null) + if (!(kv.Value.GetSequence(image, sequence) is FileNotFoundSequence s)) continue; Console.WriteLine("\tSequence `{0}.{1}` references sprite `{2}` that does not exist.", image, sequence, s.Filename); diff --git a/OpenRA.Mods.Common/Widgets/Logic/Editor/ActorEditLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Editor/ActorEditLogic.cs index 47d862e05c..6fa9c7e10e 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Editor/ActorEditLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Editor/ActorEditLogic.cs @@ -260,9 +260,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic foreach (var o in options) { - if (o is EditorActorCheckbox) + if (o is EditorActorCheckbox co) { - var co = (EditorActorCheckbox)o; var checkboxContainer = checkboxOptionTemplate.Clone(); checkboxContainer.Bounds.Y = initContainer.Bounds.Height; initContainer.Bounds.Height += checkboxContainer.Bounds.Height; @@ -283,9 +282,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic initContainer.AddChild(checkboxContainer); } - else if (o is EditorActorSlider) + else if (o is EditorActorSlider so) { - var so = (EditorActorSlider)o; var sliderContainer = sliderOptionTemplate.Clone(); sliderContainer.Bounds.Y = initContainer.Bounds.Height; initContainer.Bounds.Height += sliderContainer.Bounds.Height; @@ -319,9 +317,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic initContainer.AddChild(sliderContainer); } - else if (o is EditorActorDropdown) + else if (o is EditorActorDropdown ddo) { - var ddo = (EditorActorDropdown)o; var dropdownContainer = dropdownOptionTemplate.Clone(); dropdownContainer.Bounds.Y = initContainer.Bounds.Height; initContainer.Bounds.Height += dropdownContainer.Bounds.Height; diff --git a/OpenRA.Mods.Common/Widgets/Logic/Editor/SaveMapLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Editor/SaveMapLogic.cs index 6868a14850..261ed15e0c 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Editor/SaveMapLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Editor/SaveMapLogic.cs @@ -92,8 +92,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic foreach (var kv in modData.MapCache.MapLocations) { - var folder = kv.Key as Folder; - if (folder == null) + if (!(kv.Key is Folder folder)) continue; try diff --git a/OpenRA.Mods.Common/Widgets/Logic/GameSaveBrowserLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/GameSaveBrowserLogic.cs index 2b06819c24..708664f6e2 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/GameSaveBrowserLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/GameSaveBrowserLogic.cs @@ -226,8 +226,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic games[games.IndexOf(oldPath)] = newPath; foreach (var c in gameList.Children) { - var item = c as ScrollItemWidget; - if (item == null || item.ItemKey != oldPath) + if (!(c is ScrollItemWidget item) || item.ItemKey != oldPath) continue; item.ItemKey = newPath; diff --git a/OpenRA.Mods.Common/Widgets/Logic/Ingame/ClassicProductionLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Ingame/ClassicProductionLogic.cs index e1057159e0..a93392fbb4 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Ingame/ClassicProductionLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Ingame/ClassicProductionLogic.cs @@ -133,8 +133,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic // Select the first active tab foreach (var b in typesContainer.Children) { - var button = b as ProductionTypeButtonWidget; - if (button == null || button.IsDisabled()) + if (!(b is ProductionTypeButtonWidget button) || button.IsDisabled()) continue; button.OnClick(); diff --git a/OpenRA.Mods.Common/Widgets/Logic/Installation/InstallFromDiscLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Installation/InstallFromDiscLogic.cs index f2a2ec31b6..4d330ff210 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Installation/InstallFromDiscLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Installation/InstallFromDiscLogic.cs @@ -207,74 +207,74 @@ namespace OpenRA.Mods.Common.Widgets.Logic switch (i.Key) { case "copy": - { - var sourceDir = Path.Combine(path, i.Value.Value); - foreach (var node in i.Value.Nodes) { - var sourcePath = Path.Combine(sourceDir, node.Value.Value); - var targetPath = Platform.ResolvePath(node.Key); - if (File.Exists(targetPath)) + var sourceDir = Path.Combine(path, i.Value.Value); + foreach (var node in i.Value.Nodes) { - Log.Write("install", "Ignoring installed file " + targetPath); - continue; + var sourcePath = Path.Combine(sourceDir, node.Value.Value); + var targetPath = Platform.ResolvePath(node.Key); + if (File.Exists(targetPath)) + { + Log.Write("install", "Ignoring installed file " + targetPath); + continue; + } + + Log.Write("install", $"Copying {sourcePath} -> {targetPath}"); + extracted.Add(targetPath); + Directory.CreateDirectory(Path.GetDirectoryName(targetPath)); + + using (var source = File.OpenRead(sourcePath)) + using (var target = File.OpenWrite(targetPath)) + { + var displayFilename = Path.GetFileName(targetPath); + var length = source.Length; + + Action onProgress = null; + if (length < ShowPercentageThreshold) + message = "Copying " + displayFilename; + else + onProgress = b => message = $"Copying {displayFilename} ({100 * b / length}%)"; + + CopyStream(source, target, length, onProgress); + } } - Log.Write("install", $"Copying {sourcePath} -> {targetPath}"); - extracted.Add(targetPath); - Directory.CreateDirectory(Path.GetDirectoryName(targetPath)); - - using (var source = File.OpenRead(sourcePath)) - using (var target = File.OpenWrite(targetPath)) - { - var displayFilename = Path.GetFileName(targetPath); - var length = source.Length; - - Action onProgress = null; - if (length < ShowPercentageThreshold) - message = "Copying " + displayFilename; - else - onProgress = b => message = $"Copying {displayFilename} ({100 * b / length}%)"; - - CopyStream(source, target, length, onProgress); - } + break; } - break; - } - case "extract-raw": - { - ExtractFromPackage(ExtractionType.Raw, path, i.Value, extracted, m => message = m); - break; - } + { + ExtractFromPackage(ExtractionType.Raw, path, i.Value, extracted, m => message = m); + break; + } case "extract-blast": - { - ExtractFromPackage(ExtractionType.Blast, path, i.Value, extracted, m => message = m); - break; - } + { + ExtractFromPackage(ExtractionType.Blast, path, i.Value, extracted, m => message = m); + break; + } case "extract-mscab": - { - ExtractFromMSCab(path, i.Value, extracted, m => message = m); - break; - } + { + ExtractFromMSCab(path, i.Value, extracted, m => message = m); + break; + } case "extract-iscab": - { - ExtractFromISCab(path, i.Value, extracted, m => message = m); - break; - } + { + ExtractFromISCab(path, i.Value, extracted, m => message = m); + break; + } case "delete": - { - // Yaml path may be specified relative to a named directory (e.g. ^SupportDir) or the detected disc path - var sourcePath = i.Value.Value.StartsWith("^") ? Platform.ResolvePath(i.Value.Value) : Path.Combine(path, i.Value.Value); + { + // Yaml path may be specified relative to a named directory (e.g. ^SupportDir) or the detected disc path + var sourcePath = i.Value.Value.StartsWith("^") ? Platform.ResolvePath(i.Value.Value) : Path.Combine(path, i.Value.Value); - Log.Write("debug", "Deleting {0}", sourcePath); - File.Delete(sourcePath); - break; - } + Log.Write("debug", "Deleting {0}", sourcePath); + File.Delete(sourcePath); + break; + } default: Log.Write("debug", "Unknown installation command {0} - ignoring", i.Key); @@ -479,8 +479,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic foreach (var prefix in source.RegistryPrefixes) { - var path = Microsoft.Win32.Registry.GetValue(prefix + source.RegistryKey, source.RegistryValue, null) as string; - if (path == null) + if (!(Microsoft.Win32.Registry.GetValue(prefix + source.RegistryKey, source.RegistryValue, null) is string path)) continue; if (source.Type == ModContent.SourceType.RegistryDirectoryFromFile) @@ -530,7 +529,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic return false; } else if (CryptoUtil.SHA1Hash(fileStream) != kv.Value.Value) - return false; + return false; } } } diff --git a/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyOptionsLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyOptionsLogic.cs index 6193e8f38f..f67d7bfe9f 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyOptionsLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyOptionsLogic.cs @@ -89,8 +89,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic row.Bounds.Y = optionsContainer.Bounds.Height; optionsContainer.Bounds.Height += row.Bounds.Height; foreach (var child in row.Children) - if (child is CheckboxWidget) - checkboxColumns.Enqueue((CheckboxWidget)child); + if (child is CheckboxWidget childCheckbox) + checkboxColumns.Enqueue(childCheckbox); optionsContainer.AddChild(row); } @@ -118,8 +118,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic row.Bounds.Y = optionsContainer.Bounds.Height; optionsContainer.Bounds.Height += row.Bounds.Height; foreach (var child in row.Children) - if (child is DropDownButtonWidget) - dropdownColumns.Enqueue((DropDownButtonWidget)child); + if (child is DropDownButtonWidget dropDown) + dropdownColumns.Enqueue(dropDown); optionsContainer.AddChild(row); }