diff --git a/OpenRA.Mods.SS/Traits/Conditions/GrantConditionAfterDelay.cs b/OpenRA.Mods.SS/Traits/Conditions/GrantConditionAfterDelay.cs index e3d5c20..0b3c8bd 100644 --- a/OpenRA.Mods.SS/Traits/Conditions/GrantConditionAfterDelay.cs +++ b/OpenRA.Mods.SS/Traits/Conditions/GrantConditionAfterDelay.cs @@ -69,10 +69,10 @@ void ITick.Tick(Actor self) float ISelectionBar.GetValue() { - if (IsTraitDisabled || !Info.ShowSelectionBar || ((1f - (float)Ticks / Info.Delay) > 1f && !info.ShowFullBarAfterGranted)) + if (IsTraitDisabled || !Info.ShowSelectionBar || (1f - (float)Ticks / Info.Delay > 1f && !info.ShowFullBarAfterGranted)) return 0f; - if ((1f - (float)Ticks / Info.Delay) > 1f && info.ShowFullBarAfterGranted) + if (1f - (float)Ticks / Info.Delay > 1f && info.ShowFullBarAfterGranted) return 1f; return 1f - (float)Ticks / Info.Delay; diff --git a/OpenRA.Mods.SS/Traits/Crates/ArmageddonCrateAction.cs b/OpenRA.Mods.SS/Traits/Crates/ArmageddonCrateAction.cs index 084045a..ee16d08 100644 --- a/OpenRA.Mods.SS/Traits/Crates/ArmageddonCrateAction.cs +++ b/OpenRA.Mods.SS/Traits/Crates/ArmageddonCrateAction.cs @@ -17,7 +17,7 @@ namespace OpenRA.Mods.SS.Traits { [Desc("Kills all player owned units on the map.")] - class ArmageddonCrateActionInfo : CrateActionInfo + sealed class ArmageddonCrateActionInfo : CrateActionInfo { [Desc("The deathtypes used to kill the units.")] public readonly BitSet DeathTypes = default; @@ -25,7 +25,7 @@ class ArmageddonCrateActionInfo : CrateActionInfo public override object Create(ActorInitializer init) { return new ArmageddonCrateAction(init.Self, this); } } - class ArmageddonCrateAction : CrateAction + sealed class ArmageddonCrateAction : CrateAction { readonly Actor self; readonly ArmageddonCrateActionInfo info; diff --git a/OpenRA.Mods.SS/Traits/Crates/HideMapToAllCrateAction.cs b/OpenRA.Mods.SS/Traits/Crates/HideMapToAllCrateAction.cs index cca1b0d..b492d60 100644 --- a/OpenRA.Mods.SS/Traits/Crates/HideMapToAllCrateAction.cs +++ b/OpenRA.Mods.SS/Traits/Crates/HideMapToAllCrateAction.cs @@ -14,12 +14,12 @@ namespace OpenRA.Mods.Common.Traits { [Desc("Hides the entire map in shroud for all players.")] - class HideMapToAllCrateActionInfo : CrateActionInfo + sealed class HideMapToAllCrateActionInfo : CrateActionInfo { public override object Create(ActorInitializer init) { return new HideMapToAllCrateAction(init.Self, this); } } - class HideMapToAllCrateAction : CrateAction + sealed class HideMapToAllCrateAction : CrateAction { public HideMapToAllCrateAction(Actor self, HideMapToAllCrateActionInfo info) : base(self, info) { } diff --git a/OpenRA.Mods.SS/Traits/Crates/PlayerExperienceCrateAction.cs b/OpenRA.Mods.SS/Traits/Crates/PlayerExperienceCrateAction.cs index aeac959..5387f3b 100644 --- a/OpenRA.Mods.SS/Traits/Crates/PlayerExperienceCrateAction.cs +++ b/OpenRA.Mods.SS/Traits/Crates/PlayerExperienceCrateAction.cs @@ -12,7 +12,7 @@ namespace OpenRA.Mods.Common.Traits { [Desc("Gives collector's owner experience.")] - class PlayerExperienceCrateActionInfo : CrateActionInfo + sealed class PlayerExperienceCrateActionInfo : CrateActionInfo { [Desc("How much player experience this crate action gives.")] public int Experience = 0; @@ -20,7 +20,7 @@ class PlayerExperienceCrateActionInfo : CrateActionInfo public override object Create(ActorInitializer init) { return new PlayerExperienceCrateAction(init.Self, this); } } - class PlayerExperienceCrateAction : CrateAction + sealed class PlayerExperienceCrateAction : CrateAction { readonly PlayerExperienceCrateActionInfo info; diff --git a/OpenRA.Mods.SS/Traits/Crates/SSHealCrateAction.cs b/OpenRA.Mods.SS/Traits/Crates/SSHealCrateAction.cs index b6fac6b..2bf7fe9 100644 --- a/OpenRA.Mods.SS/Traits/Crates/SSHealCrateAction.cs +++ b/OpenRA.Mods.SS/Traits/Crates/SSHealCrateAction.cs @@ -14,7 +14,7 @@ namespace OpenRA.Mods.Common.Traits { [Desc("Heals the collector if it is damaged, fires a weapon otherwise.")] - class SSHealCrateActionInfo : CrateActionInfo + sealed class SSHealCrateActionInfo : CrateActionInfo { [WeaponReference] [FieldLoader.Require] @@ -32,7 +32,7 @@ class SSHealCrateActionInfo : CrateActionInfo public override object Create(ActorInitializer init) { return new SSHealCrateAction(init.Self, this); } } - class SSHealCrateAction : CrateAction + sealed class SSHealCrateAction : CrateAction { readonly Actor self; readonly SSHealCrateActionInfo info; diff --git a/OpenRA.Mods.SS/Traits/Crates/SwitchConditionCrateAction.cs b/OpenRA.Mods.SS/Traits/Crates/SwitchConditionCrateAction.cs index bc687e0..a27d3ff 100644 --- a/OpenRA.Mods.SS/Traits/Crates/SwitchConditionCrateAction.cs +++ b/OpenRA.Mods.SS/Traits/Crates/SwitchConditionCrateAction.cs @@ -16,7 +16,7 @@ namespace OpenRA.Mods.SS.Traits { [Desc("Grants a condition on the collector if it is not, revokes it if it is.")] - class SwitchConditionCrateActionInfo : CrateActionInfo + sealed class SwitchConditionCrateActionInfo : CrateActionInfo { [FieldLoader.Require] [Desc("The condition to grant or revoke. Must be included in the target actor's ExternalConditions list.")] @@ -42,7 +42,7 @@ class SwitchConditionCrateActionInfo : CrateActionInfo public override object Create(ActorInitializer init) { return new SwitchConditionCrateAction(init.Self, this); } } - class SwitchConditionCrateAction : CrateAction + sealed class SwitchConditionCrateAction : CrateAction { readonly Actor self; readonly SwitchConditionCrateActionInfo info; diff --git a/OpenRA.Mods.SS/Traits/Crates/TeleportCrateAction.cs b/OpenRA.Mods.SS/Traits/Crates/TeleportCrateAction.cs index 19124b2..e98c846 100644 --- a/OpenRA.Mods.SS/Traits/Crates/TeleportCrateAction.cs +++ b/OpenRA.Mods.SS/Traits/Crates/TeleportCrateAction.cs @@ -19,7 +19,7 @@ namespace OpenRA.Mods.SS.Traits { [Desc("Teleports the unit to a random location.")] - class TeleportCrateActionInfo : CrateActionInfo + sealed class TeleportCrateActionInfo : CrateActionInfo { [Desc("The maxiumum distance unit can be teleported to.")] public readonly int MaxDistance = 50; @@ -39,7 +39,7 @@ class TeleportCrateActionInfo : CrateActionInfo public override object Create(ActorInitializer init) { return new TeleportCrateAction(init.Self, this); } } - class TeleportCrateAction : CrateAction, IRender + sealed class TeleportCrateAction : CrateAction, IRender { readonly Actor self; readonly TeleportCrateActionInfo info; diff --git a/OpenRA.Mods.SS/Traits/World/SpawnSSUnit.cs b/OpenRA.Mods.SS/Traits/World/SpawnSSUnit.cs index 94184e7..b03c708 100644 --- a/OpenRA.Mods.SS/Traits/World/SpawnSSUnit.cs +++ b/OpenRA.Mods.SS/Traits/World/SpawnSSUnit.cs @@ -242,17 +242,17 @@ void SpawnUnitForPlayer(World w, Player p, CPos sp) void SpawnBuildingsForPlayer(World w, Player p, CPos sp) { - foreach (var b in bases) + foreach (var (actors, amount, inner, outer) in bases) { - var buildings = b.Actors; - var buildingSpawnCells = w.Map.FindTilesInAnnulus(sp, b.Inner + 1, b.Outer).ToArray(); - for (var i = 0; i < b.Amount - (b.Amount % buildings.Length); i++) + var buildings = actors; + var buildingSpawnCells = w.Map.FindTilesInAnnulus(sp, inner + 1, outer).ToArray(); + for (var i = 0; i < amount - amount % buildings.Length; i++) { var actor = buildings[i % buildings.Length]; SpawnBuildingForPlayer(w, p, buildingSpawnCells, actor); } - for (var i = 0; i < b.Amount % buildings.Length; i++) + for (var i = 0; i < amount % buildings.Length; i++) { var actor = buildings.Random(w.SharedRandom); SpawnBuildingForPlayer(w, p, buildingSpawnCells, actor); diff --git a/OpenRA.Mods.SS/Widgets/Logic/Ingame/IngameClassSelectorLogic.cs b/OpenRA.Mods.SS/Widgets/Logic/Ingame/IngameClassSelectorLogic.cs index e427ebd..1422220 100644 --- a/OpenRA.Mods.SS/Widgets/Logic/Ingame/IngameClassSelectorLogic.cs +++ b/OpenRA.Mods.SS/Widgets/Logic/Ingame/IngameClassSelectorLogic.cs @@ -9,7 +9,6 @@ */ #endregion -using System; using System.Collections.Generic; using System.Linq; using OpenRA.Mods.SS.Traits; @@ -18,19 +17,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic { - class IngameClassSelectorLogic : ChromeLogic + sealed class IngameClassSelectorLogic : ChromeLogic { - public static (string First, string Second) SplitOnFirstToken(string input, string token = "\\n") - { - if (string.IsNullOrEmpty(input)) - return (null, null); - - var split = input.IndexOf(token, StringComparison.Ordinal); - var first = split > 0 ? input[..split] : input; - var second = split > 0 ? input[(split + token.Length)..] : null; - return (first, second); - } - public void ShowFactionDropDown(World world, SpawnSSUnit spawner, DropDownButtonWidget dropdown, Dictionary factions) { var player = world.LocalPlayer; @@ -54,14 +42,15 @@ ScrollItemWidget SetupItem(string factionId, ScrollItemWidget itemTemplate) } }); var faction = factions[factionId]; - item.Get("LABEL").GetText = () => faction.Name; + item.Get("LABEL").GetText = () => FluentProvider.GetMessage(faction.Name); var flag = item.Get("FLAG"); flag.GetImageCollection = () => "flags"; flag.GetImageName = () => factionId; - var tooltip = SplitOnFirstToken(faction.Description); - item.GetTooltipText = () => tooltip.First; - item.GetTooltipDesc = () => tooltip.Second; + var description = faction.Description != null ? FluentProvider.GetMessage(faction.Description) : null; + var (text, desc) = LobbyUtils.SplitOnFirstToken(description); + item.GetTooltipText = () => text; + item.GetTooltipDesc = () => desc; return item; } @@ -103,11 +92,11 @@ public IngameClassSelectorLogic(Widget widget, World world) classDropdown.IsDisabled = () => !spawner.ClassChanging || spawner.ClassChangingPaused; classDropdown.OnMouseDown = _ => ShowFactionDropDown(world, spawner, classDropdown, factions); - classDropdown.GetTooltipText = () => SplitOnFirstToken(factions[spawner.Classes[player]].Description).First; - classDropdown.GetTooltipDesc = () => SplitOnFirstToken(factions[spawner.Classes[player]].Description).Second; + classDropdown.GetTooltipText = () => LobbyUtils.SplitOnFirstToken(FluentProvider.GetMessage(factions[spawner.Classes[player]].Description)).First; + classDropdown.GetTooltipDesc = () => LobbyUtils.SplitOnFirstToken(FluentProvider.GetMessage(factions[spawner.Classes[player]].Description)).Second; var factionName = classDropdown.Get("FACTIONNAME"); - factionName.GetText = () => factions[spawner.Classes[player]].Name; + factionName.GetText = () => FluentProvider.GetMessage(factions[spawner.Classes[player]].Name); var factionFlag = classDropdown.Get("FACTIONFLAG"); factionFlag.GetImageName = () => spawner.Classes[player]; factionFlag.GetImageCollection = () => "flags"; diff --git a/OpenRA.Mods.SS/Widgets/Logic/Ingame/IngameUnitStatsLogic.cs b/OpenRA.Mods.SS/Widgets/Logic/Ingame/IngameUnitStatsLogic.cs index a107706..de57134 100644 --- a/OpenRA.Mods.SS/Widgets/Logic/Ingame/IngameUnitStatsLogic.cs +++ b/OpenRA.Mods.SS/Widgets/Logic/Ingame/IngameUnitStatsLogic.cs @@ -105,7 +105,7 @@ public IngameUnitStatsLogic(Widget widget, World world) foreach (var dm in unit.TraitsImplementing().Select(dm => dm.GetDamageModifier(unit, new Damage(usv.Health))).Where(d => d != 0)) healthValue = healthValue / dm * 100; - return (int)(((float)(healthValue - usv.Health) / (float)usv.Health) * 100 * max); + return (int)((float)(healthValue - usv.Health) / usv.Health * 100 * max); } else if (usv.Health < 0) { @@ -120,7 +120,7 @@ public IngameUnitStatsLogic(Widget widget, World world) foreach (var dm in unit.TraitsImplementing().Select(dm => dm.GetDamageModifier(unit, new Damage(healthTrait.MaxHP))).Where(d => d != 0)) healthValue = healthValue / dm * 100; - return (int)(((float)(healthValue - healthTrait.MaxHP) / (float)healthTrait.MaxHP) * 100 * max); + return (int)((float)(healthValue - healthTrait.MaxHP) / healthTrait.MaxHP * 100 * max); } } @@ -178,7 +178,7 @@ public IngameUnitStatsLogic(Widget widget, World world) foreach (var rsm in unit.TraitsImplementing().Select(rsm => rsm.GetRevealsShroudModifier())) revealsShroudValue = revealsShroudValue * rsm / 100; - return (int)(((float)(revealsShroudValue.Length - usv.Sight.Length) / (float)usv.Sight.Length) * 100 * max); + return (int)((float)(revealsShroudValue.Length - usv.Sight.Length) / usv.Sight.Length * 100 * max); } else if (usv.Sight < WDist.Zero) { @@ -193,7 +193,7 @@ public IngameUnitStatsLogic(Widget widget, World world) foreach (var rsm in unit.TraitsImplementing().Select(rsm => rsm.GetRevealsShroudModifier())) revealsShroudValue = revealsShroudValue * rsm / 100; - return (int)(((float)(revealsShroudValue.Length - revealsShroudTrait.Info.Range.Length) / (float)revealsShroudTrait.Info.Range.Length) * 100 * max); + return (int)((float)(revealsShroudValue.Length - revealsShroudTrait.Info.Range.Length) / revealsShroudTrait.Info.Range.Length * 100 * max); } } @@ -238,7 +238,7 @@ public IngameUnitStatsLogic(Widget widget, World world) foreach (var dm in unit.TraitsImplementing().Select(fm => fm.GetFirepowerModifier())) damageValue = damageValue * dm / 100; - return (int)(((float)(damageValue - usv.Damage) / (float)usv.Damage) * 100 * max); + return (int)((float)(damageValue - usv.Damage) / usv.Damage * 100 * max); } } @@ -296,7 +296,7 @@ public IngameUnitStatsLogic(Widget widget, World world) foreach (var rm in unit.TraitsImplementing().Select(sm => sm.GetReloadModifier())) rofValue = rofValue * rm / 100; - return (int)(((float)(usv.ReloadDelay - rofValue) / (float)usv.ReloadDelay) * 100 * (max + 1)); + return (int)((float)(usv.ReloadDelay - rofValue) / usv.ReloadDelay * 100 * (max + 1)); } else if (usv.ReloadDelay < 0) { @@ -311,7 +311,7 @@ public IngameUnitStatsLogic(Widget widget, World world) foreach (var rm in unit.TraitsImplementing().Select(sm => sm.GetReloadModifier())) rofValue = rofValue * rm / 100; - return (int)(((float)(armamanets.Max(ar => ar.Weapon.ReloadDelay - rofValue)) / (float)armamanets.Max(ar => ar.Weapon.ReloadDelay)) * 100 * (max + 1)); + return (int)((float)armamanets.Max(ar => ar.Weapon.ReloadDelay - rofValue) / armamanets.Max(ar => ar.Weapon.ReloadDelay) * 100 * (max + 1)); } } @@ -366,7 +366,7 @@ public IngameUnitStatsLogic(Widget widget, World world) foreach (var rm in unit.TraitsImplementing().Select(rm => rm.GetRangeModifier())) rangeValue = rangeValue * rm / 100; - return (int)(((float)(rangeValue.Length - usv.Range.Length) / (float)usv.Range.Length) * 100 * max); + return (int)((float)(rangeValue.Length - usv.Range.Length) / usv.Range.Length * 100 * max); } else if (usv.Range < WDist.Zero) { @@ -381,7 +381,7 @@ public IngameUnitStatsLogic(Widget widget, World world) foreach (var rm in unit.TraitsImplementing().Select(rm => rm.GetRangeModifier())) rangeValue = rangeValue * rm / 100; - return (int)(((float)(rangeValue.Length - armamanets.Max(ar => ar.Weapon.Range.Length)) / (float)armamanets.Max(ar => ar.Weapon.Range.Length)) * 100 * max); + return (int)((float)(rangeValue.Length - armamanets.Max(ar => ar.Weapon.Range.Length)) / armamanets.Max(ar => ar.Weapon.Range.Length) * 100 * max); } } @@ -449,7 +449,7 @@ public IngameUnitStatsLogic(Widget widget, World world) foreach (var sm in unit.TraitsImplementing().Select(sm => sm.GetSpeedModifier())) speedValue = speedValue * sm / 100; - return (int)(((float)(speedValue - usv.Speed) / (float)usv.Speed) * 100 * max); + return (int)((float)(speedValue - usv.Speed) / usv.Speed * 100 * max); } else if (usv.Speed < 0) { @@ -464,7 +464,7 @@ public IngameUnitStatsLogic(Widget widget, World world) foreach (var sm in unit.TraitsImplementing().Select(sm => sm.GetSpeedModifier())) speedValue = speedValue * sm / 100; - return (int)(((float)(speedValue - mobile.Speed) / (float)mobile.Speed) * 100 * max); + return (int)((float)(speedValue - mobile.Speed) / mobile.Speed * 100 * max); } var aircraft = unit.Info.TraitInfoOrDefault(); @@ -474,7 +474,7 @@ public IngameUnitStatsLogic(Widget widget, World world) foreach (var sm in unit.TraitsImplementing().Select(sm => sm.GetSpeedModifier())) speedValue = speedValue * sm / 100; - return (int)(((float)(speedValue - aircraft.Speed) / (float)aircraft.Speed) * 100 * max); + return (int)((float)(speedValue - aircraft.Speed) / aircraft.Speed * 100 * max); } }