From cecc163e524f8cf0e82eec23bc496837a40c9a48 Mon Sep 17 00:00:00 2001 From: Bob Date: Tue, 12 Jan 2010 22:32:27 +1300 Subject: [PATCH] ... and the rest. --- OpenRa.Game/Chrome.cs | 8 +- OpenRa.Game/GameRules/ArmorType.cs | 16 ++++ OpenRa.Game/GameRules/Rules.cs | 9 -- OpenRa.Game/GameRules/TechTree.cs | 6 +- OpenRa.Game/GameRules/UnitInfo.cs | 117 -------------------------- OpenRa.Game/OpenRa.Game.csproj | 2 +- OpenRa.Game/SupportPower.cs | 3 +- OpenRa.Game/Traits/ProductionQueue.cs | 2 +- 8 files changed, 27 insertions(+), 136 deletions(-) create mode 100755 OpenRa.Game/GameRules/ArmorType.cs delete mode 100755 OpenRa.Game/GameRules/UnitInfo.cs diff --git a/OpenRa.Game/Chrome.cs b/OpenRa.Game/Chrome.cs index e4d231bba9..52ac6de270 100644 --- a/OpenRa.Game/Chrome.cs +++ b/OpenRa.Game/Chrome.cs @@ -112,10 +112,10 @@ namespace OpenRa.Game tabSprites = groups .SelectMany(g => Rules.Categories[g]) - .Where(u => Rules.UnitInfo[u].TechLevel != -1) + .Where(u => Rules.NewUnitInfo[u].Traits.Contains()) .ToDictionary( u => u, - u => SpriteSheetBuilder.LoadAllSprites(Rules.UnitInfo[u].Icon ?? (u + "icon"))[0]); + u => SpriteSheetBuilder.LoadAllSprites(Rules.NewUnitInfo[u].Traits.Get().Icon ?? (u + "icon"))[0]); spsprites = Rules.SupportPowerInfo .ToDictionary( @@ -531,8 +531,8 @@ namespace OpenRa.Game var buildableItems = Rules.TechTree.BuildableItems(Game.LocalPlayer, queueName).ToArray(); var allItems = Rules.TechTree.AllItems(Game.LocalPlayer, queueName) - .Where(a => Rules.UnitInfo[a].TechLevel != -1) - .OrderBy(a => Rules.UnitInfo[a].TechLevel); + .Where(a => Rules.NewUnitInfo[a].Traits.Contains()) + .OrderBy(a => Rules.NewUnitInfo[a].Traits.Get().TechLevel); var queue = Game.LocalPlayer.PlayerActor.traits.Get(); diff --git a/OpenRa.Game/GameRules/ArmorType.cs b/OpenRa.Game/GameRules/ArmorType.cs new file mode 100755 index 0000000000..bc2ac7e51b --- /dev/null +++ b/OpenRa.Game/GameRules/ArmorType.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace OpenRa.Game.GameRules +{ + public enum ArmorType + { + none = 0, + wood = 1, + light = 2, + heavy = 3, + concrete = 4, + } +} diff --git a/OpenRa.Game/GameRules/Rules.cs b/OpenRa.Game/GameRules/Rules.cs index a1ba05b290..7571ac1dc2 100755 --- a/OpenRa.Game/GameRules/Rules.cs +++ b/OpenRa.Game/GameRules/Rules.cs @@ -13,7 +13,6 @@ namespace OpenRa.Game public static IniFile AllRules; public static Dictionary> Categories = new Dictionary>(); public static Dictionary UnitCategory; - [Obsolete] public static InfoLoader UnitInfo; public static InfoLoader WeaponInfo; public static InfoLoader WarheadInfo; public static InfoLoader ProjectileInfo; @@ -64,14 +63,6 @@ namespace OpenRa.Game "Plane"); UnitCategory = Categories.SelectMany(x => x.Value.Select(y => new KeyValuePair(y, x.Key))).ToDictionary(x => x.Key, x => x.Value); - UnitInfo = new InfoLoader( - Pair.New>("Building", s => new LegacyBuildingInfo(s)), - Pair.New>("Defense", s => new LegacyBuildingInfo(s)), - Pair.New>("Infantry", s => new InfantryInfo(s)), - Pair.New>("Vehicle", s => new VehicleInfo(s)), - Pair.New>("Ship", s => new VehicleInfo(s)), - Pair.New>("Plane", s => new VehicleInfo(s))); - LoadCategories( "Weapon", "Warhead", diff --git a/OpenRa.Game/GameRules/TechTree.cs b/OpenRa.Game/GameRules/TechTree.cs index d2fcc9aafb..706fb7f953 100755 --- a/OpenRa.Game/GameRules/TechTree.cs +++ b/OpenRa.Game/GameRules/TechTree.cs @@ -38,7 +38,7 @@ namespace OpenRa.Game.GameRules return false; foreach( var p in bi.Prerequisites ) - if (Rules.UnitInfo[p.ToLowerInvariant()].Owner.Any(x => x == player.Race)) + if (Rules.NewUnitInfo[p.ToLowerInvariant()].Traits.Get().Owner.Any(x => x == player.Race)) if( playerBuildings[ p ].Count == 0 ) return false; @@ -58,8 +58,8 @@ namespace OpenRa.Game.GameRules public IEnumerable AllItems(Player player, params string[] categories) { - return categories.SelectMany(x => Rules.Categories[x]).Select(x => Rules.UnitInfo[x].Name) - .Where(x => Rules.UnitInfo[x].Owner.Contains(player.Race)); /* todo: fix for dual-race scenarios (captured buildings) */ + return categories.SelectMany(x => Rules.Categories[x]).Select(x => Rules.NewUnitInfo[x].Name) + .Where(x => Rules.NewUnitInfo[x].Traits.Get().Owner.Contains(player.Race)); /* todo: fix for dual-race scenarios (captured buildings) */ } public IEnumerable UnitBuiltAt( NewUnitInfo info ) diff --git a/OpenRa.Game/GameRules/UnitInfo.cs b/OpenRa.Game/GameRules/UnitInfo.cs deleted file mode 100755 index e3daf1eb12..0000000000 --- a/OpenRa.Game/GameRules/UnitInfo.cs +++ /dev/null @@ -1,117 +0,0 @@ - -using System; -namespace OpenRa.Game.GameRules -{ - public enum ArmorType - { - none = 0, - wood = 1, - light = 2, - heavy = 3, - concrete = 4, - } - - public class LegacyUnitInfo : ActorInfo - { - public readonly string Name; - - public readonly string Description = ""; - public readonly string[] Traits; - - public readonly int Ammo = -1; - public readonly ArmorType Armor = ArmorType.none; - [Obsolete] public readonly bool DoubleOwned = false; - [Obsolete] public readonly bool Cloakable = false; - public readonly int Cost = 0; - public readonly bool Crewed = false; - public readonly bool Explodes = false; - public readonly int GuardRange = -1; // -1 = use weapon's range - public readonly string Image = null; // sprite-set to use when rendering - public readonly bool Invisible = false; - public readonly Race[] Owner = { Race.Allies, Race.Soviet }; - public readonly int Points = 0; - public readonly string[] Prerequisite = { }; - public readonly string Primary = null; - public readonly string Secondary = null; - public readonly int ROT = 255; - public readonly int Reload = 0; - public readonly bool SelfHealing = false; - [Obsolete] public readonly bool Sensors = false; // no idea what this does - public readonly int Sight = 1; - public readonly int Strength = 1; - public readonly int TechLevel = -1; - public readonly bool WaterBound = false; - public readonly string[] BuiltAt = { }; - public readonly int[] PrimaryOffset = { 0, 0 }; - public readonly int[] SecondaryOffset = null; - public readonly int[] RotorOffset = { 0, 0 }; - public readonly int[] RotorOffset2 = null; - public readonly int Recoil = 0; - public readonly bool MuzzleFlash = false; - public readonly int SelectionPriority = 10; - public readonly int InitialFacing = 128; - public readonly bool Selectable = true; - public readonly int FireDelay = 0; - public readonly string LongDesc = null; - public readonly int OrePips = 0; - public readonly string Icon = null; - public readonly int[] SelectionSize = null; - public readonly int Passengers = 0; - public readonly int UnloadFacing = 0; - public readonly UnitMovementType[] PassengerTypes = null; - - // weapon origins and firing angles within the turrets. 3 values per position. - public readonly int[] PrimaryLocalOffset = { }; - public readonly int[] SecondaryLocalOffset = { }; - - public LegacyUnitInfo(string name) { Name = name; } - } - - public class LegacyMobileInfo : LegacyUnitInfo - { - public readonly int Speed = 0; - public readonly bool NoMovingFire = false; - public readonly string Voice = "GenericVoice"; - - public LegacyMobileInfo(string name) : base(name) { } - } - - public class InfantryInfo : LegacyMobileInfo - { - public readonly bool C4 = false; - public readonly bool FraidyCat = false; - public readonly bool Infiltrate = false; - public readonly bool IsCanine = false; - public readonly int SquadSize = 1; - - public InfantryInfo(string name) : base(name) { } - } - - public class VehicleInfo : LegacyMobileInfo - { - public readonly bool Tracked = false; - - public VehicleInfo(string name) : base(name) { } - } - - public class LegacyBuildingInfo : LegacyUnitInfo - { - public readonly int2 Dimensions = new int2(1, 1); - public readonly string Footprint = "x"; - public readonly string[] Produces = { }; - - public readonly bool BaseNormal = true; - public readonly int Adjacent = 1; - public readonly bool Bib = false; - public readonly bool Capturable = false; - public readonly int Power = 0; - public readonly bool Powered = false; - public readonly bool Repairable = true; - public readonly int Storage = 0; - public readonly bool Unsellable = false; - public readonly int[] RallyPoint = { 1, 3 }; - public readonly float[] SpawnOffset = null; - - public LegacyBuildingInfo(string name) : base(name) { } - } -} diff --git a/OpenRa.Game/OpenRa.Game.csproj b/OpenRa.Game/OpenRa.Game.csproj index d3e2003bae..4bf279b6a5 100644 --- a/OpenRa.Game/OpenRa.Game.csproj +++ b/OpenRa.Game/OpenRa.Game.csproj @@ -94,6 +94,7 @@ + @@ -157,7 +158,6 @@ - diff --git a/OpenRa.Game/SupportPower.cs b/OpenRa.Game/SupportPower.cs index 0c54dd6718..074c36c7fc 100644 --- a/OpenRa.Game/SupportPower.cs +++ b/OpenRa.Game/SupportPower.cs @@ -2,6 +2,7 @@ using System.Linq; using OpenRa.Game.GameRules; using OpenRa.Game.SupportPowers; +using OpenRa.Game.Traits; namespace OpenRa.Game { @@ -49,7 +50,7 @@ namespace OpenRa.Game var buildings = Rules.TechTree.GatherBuildings(Owner); var effectivePrereq = Info.Prerequisite .Select( a => a.ToLowerInvariant() ) - .Where( a => Rules.UnitInfo[a].Owner + .Where( a => Rules.NewUnitInfo[a].Traits.Get().Owner .Any( r => r == Owner.Race )); IsAvailable = Info.TechLevel > -1 diff --git a/OpenRa.Game/Traits/ProductionQueue.cs b/OpenRa.Game/Traits/ProductionQueue.cs index 559f78fc81..edbe3a9a8c 100755 --- a/OpenRa.Game/Traits/ProductionQueue.cs +++ b/OpenRa.Game/Traits/ProductionQueue.cs @@ -34,7 +34,7 @@ namespace OpenRa.Game.Traits case "StartProduction": { string group = Rules.UnitCategory[ order.TargetString ]; - var ui = Rules.UnitInfo[ order.TargetString ]; + var ui = Rules.NewUnitInfo[ order.TargetString ].Traits.Get(); var time = ui.Cost * Rules.General.BuildSpeed /* todo: country-specific build speed bonus */ * ( 25 * 60 ) /* frames per min */ /* todo: build acceleration, if we do that */