From 08b25d10c18e93f76b03460476064fa4b0a6c3a8 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Fri, 17 Sep 2010 23:36:56 +1200 Subject: [PATCH] Remove dead TechTree code --- OpenRA.Game/GameRules/Rules.cs | 4 - OpenRA.Game/GameRules/TechTree.cs | 100 ------------------- OpenRA.Game/Traits/Player/ProductionQueue.cs | 14 ++- OpenRA.Game/Traits/Player/TechTreeCache.cs | 19 +++- OpenRA.Game/Traits/SupportPower.cs | 2 +- 5 files changed, 30 insertions(+), 109 deletions(-) delete mode 100755 OpenRA.Game/GameRules/TechTree.cs diff --git a/OpenRA.Game/GameRules/Rules.cs b/OpenRA.Game/GameRules/Rules.cs index c8881563aa..94686e8693 100755 --- a/OpenRA.Game/GameRules/Rules.cs +++ b/OpenRA.Game/GameRules/Rules.cs @@ -18,8 +18,6 @@ namespace OpenRA { public static class Rules { - public static TechTree TechTree; - public static Dictionary Info; public static Dictionary Weapons; public static Dictionary Voices; @@ -41,8 +39,6 @@ namespace OpenRA var t = new TileSet(file); TileSets.Add(t.Id,t); } - - TechTree = new TechTree(); } static Dictionary LoadYamlRules(string[] files, List dict, Func, T> f) diff --git a/OpenRA.Game/GameRules/TechTree.cs b/OpenRA.Game/GameRules/TechTree.cs deleted file mode 100755 index 7e4aa1bd84..0000000000 --- a/OpenRA.Game/GameRules/TechTree.cs +++ /dev/null @@ -1,100 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2010 The OpenRA Developers (see AUTHORS) - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation. For more information, - * see LICENSE. - */ -#endregion - -using System.Collections.Generic; -using System.Linq; -using OpenRA.FileFormats; -using OpenRA.Traits; - -namespace OpenRA.GameRules -{ - public class TechTree - { - readonly Cache> producesIndex = new Cache>(x => new List()); - - public TechTree() - { - foreach( var info in Rules.Info.Values ) - { - var pi = info.Traits.GetOrDefault(); - if (pi != null) - foreach( var p in pi.Produces ) - producesIndex[ p ].Add( info ); - } - } - - public Cache> GatherBuildings( Player player ) - { - var ret = new Cache>( x => new List() ); - if (player == null) - return ret; - - foreach( var b in player.World.Queries.OwnedBy[player].Where( x=>x.Info.Traits.Contains() ) ) - { - ret[ b.Info.Name ].Add( b ); - var tt = b.Info.Traits.GetOrDefault(); - if( tt != null ) - foreach( var alt in tt.AlternateName ) - ret[ alt ].Add( b ); - } - return ret; - } - - public bool CanBuild( ActorInfo info, Player player, Cache> playerBuildings ) - { - if (player == null) - return false; - - var bi = info.Traits.GetOrDefault(); - if( bi == null ) return false; - - if( !bi.Owner.Contains( player.Country.Race ) ) - return false; - - foreach( var p in bi.Prerequisites ) - if( playerBuildings[ p ].Count == 0 ) - return false; - - if( producesIndex[ bi.Queue ].All( x => playerBuildings[ x.Name ].Count == 0 ) ) - return false; - - return true; - } - - public IEnumerable BuildableItems( Player player, params string[] categories ) - { - if (player == null) - yield break; - - var playerBuildings = GatherBuildings( player ); - foreach (var unit in AllBuildables(categories)) - if( CanBuild( unit, player, playerBuildings ) ) - yield return unit.Name; - } - - public IEnumerable AllBuildables(params string[] categories) - { - return Rules.Info.Values - .Where( x => x.Name[ 0 ] != '^' ) - .Where( x => x.Traits.Contains() ) - .Where( x => categories.Contains(x.Traits.Get().Queue) ); - } - - public IEnumerable UnitBuiltAt( ActorInfo info ) - { - var bi = info.Traits.Get(); - var builtAt = bi.BuiltAt; - if( builtAt.Length != 0 ) - return builtAt.Select( x => Rules.Info[ x.ToLowerInvariant() ] ); - else - return producesIndex[ bi.Queue ]; - } - } -} diff --git a/OpenRA.Game/Traits/Player/ProductionQueue.cs b/OpenRA.Game/Traits/Player/ProductionQueue.cs index 988d007506..0a746aa8fa 100644 --- a/OpenRA.Game/Traits/Player/ProductionQueue.cs +++ b/OpenRA.Game/Traits/Player/ProductionQueue.cs @@ -41,7 +41,8 @@ namespace OpenRA.Traits this.Info = info; var ttc = playerActor.Trait(); - foreach (var a in Rules.TechTree.AllBuildables(Info.Type)) + + foreach (var a in AllBuildables(Info.Type)) { var bi = a.Traits.Get(); // Can our race build this by satisfying normal prereqs? @@ -52,6 +53,14 @@ namespace OpenRA.Traits } } + IEnumerable AllBuildables(string category) + { + return Rules.Info.Values + .Where( x => x.Name[ 0 ] != '^' ) + .Where( x => x.Traits.Contains() ) + .Where( x => x.Traits.Get().Queue == category ); + } + public void OverrideProduction(ActorInfo type, bool buildable) { Produceable[type].Buildable = buildable; @@ -100,8 +109,7 @@ namespace OpenRA.Traits public bool CanBuild(ActorInfo actor) { - var buildings = Rules.TechTree.GatherBuildings( self.Owner ); - return Rules.TechTree.CanBuild(actor, self.Owner, buildings); + return Produceable.ContainsKey(actor) && Produceable[actor].Buildable; } public virtual void Tick( Actor self ) diff --git a/OpenRA.Game/Traits/Player/TechTreeCache.cs b/OpenRA.Game/Traits/Player/TechTreeCache.cs index 30575f579a..88b7e2bb12 100755 --- a/OpenRA.Game/Traits/Player/TechTreeCache.cs +++ b/OpenRA.Game/Traits/Player/TechTreeCache.cs @@ -39,7 +39,7 @@ namespace OpenRA.Traits public void Update() { - var buildings = Rules.TechTree.GatherBuildings(player); + var buildings = GatherBuildings(player); foreach(var w in watchers) w.Update(buildings); } @@ -54,6 +54,23 @@ namespace OpenRA.Traits watchers.RemoveAll(x => x.key == key); } + public static Cache> GatherBuildings( Player player ) + { + var ret = new Cache>( x => new List() ); + if (player == null) + return ret; + + foreach( var b in player.World.Queries.OwnedBy[player].Where( x=>x.Info.Traits.Contains() ) ) + { + ret[ b.Info.Name ].Add( b ); + var tt = b.Info.Traits.GetOrDefault(); + if( tt != null ) + foreach( var alt in tt.AlternateName ) + ret[ alt ].Add( b ); + } + return ret; + } + class Watcher { public readonly string key; diff --git a/OpenRA.Game/Traits/SupportPower.cs b/OpenRA.Game/Traits/SupportPower.cs index d561851df5..55713142a9 100644 --- a/OpenRA.Game/Traits/SupportPower.cs +++ b/OpenRA.Game/Traits/SupportPower.cs @@ -101,7 +101,7 @@ namespace OpenRA.Traits return Owner.PlayerActor.Trait().GetPowerState() == PowerState.Normal; // Takes 0.3ms on pchote's machine -- calling it every tick for every active special power is retarded - var buildings = Rules.TechTree.GatherBuildings(Owner); + var buildings = TechTreeCache.GatherBuildings(Owner); return effectivePrereq.All(a => buildings[a].Any(b => !b.Trait().Disabled)); }