diff --git a/OpenRA.Mods.RA/Buildable.cs b/OpenRA.Mods.RA/Buildable.cs index 044277d306..bdb7c2a1ba 100755 --- a/OpenRA.Mods.RA/Buildable.cs +++ b/OpenRA.Mods.RA/Buildable.cs @@ -14,7 +14,6 @@ namespace OpenRA.Mods.RA { public class BuildableInfo : ITraitInfo { - [ActorReference] public readonly string[] Prerequisites = { }; [ActorReference] public readonly string[] BuiltAt = { }; diff --git a/OpenRA.Mods.RA/Lint/LintBuildablePrerequisites.cs b/OpenRA.Mods.RA/Lint/LintBuildablePrerequisites.cs index 07cbcc7971..c30d274c96 100644 --- a/OpenRA.Mods.RA/Lint/LintBuildablePrerequisites.cs +++ b/OpenRA.Mods.RA/Lint/LintBuildablePrerequisites.cs @@ -13,6 +13,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using OpenRA.Traits; +using OpenRA.Mods.RA.Buildings; namespace OpenRA.Mods.RA { @@ -20,7 +21,19 @@ namespace OpenRA.Mods.RA { public void Run(Action emitError) { - /* do something intelligent here. */ + var providedPrereqs = Rules.Info.Keys.Concat( + Rules.Info.SelectMany( a => a.Value.Traits + .WithInterface() + .Select( p => p.Prerequisite ))).ToArray(); + + foreach( var i in Rules.Info ) + { + var bi = i.Value.Traits.GetOrDefault(); + if (bi != null) + foreach( var prereq in bi.Prerequisites ) + if ( !providedPrereqs.Contains(prereq) ) + emitError( "Buildable actor {0} has prereq {1} not provided by anything.".F( i.Key, prereq ) ); + } } }