From 3cf09e656f41a5ebb39e41b2a59e263347696fbe Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Sat, 11 Feb 2012 11:13:39 +1300 Subject: [PATCH] Add support for negative prerequisites (#1323) --- .../Lint/LintBuildablePrerequisites.cs | 2 +- OpenRA.Mods.RA/Player/TechTree.cs | 17 ++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/OpenRA.Mods.RA/Lint/LintBuildablePrerequisites.cs b/OpenRA.Mods.RA/Lint/LintBuildablePrerequisites.cs index 7ce5ffc4bd..c615167fd3 100644 --- a/OpenRA.Mods.RA/Lint/LintBuildablePrerequisites.cs +++ b/OpenRA.Mods.RA/Lint/LintBuildablePrerequisites.cs @@ -29,7 +29,7 @@ namespace OpenRA.Mods.RA var bi = i.Value.Traits.GetOrDefault(); if (bi != null) foreach( var prereq in bi.Prerequisites ) - if ( !providedPrereqs.Contains(prereq) ) + if ( !providedPrereqs.Contains(prereq.Replace("!","")) ) emitError( "Buildable actor {0} has prereq {1} not provided by anything.".F( i.Key, prereq ) ); } } diff --git a/OpenRA.Mods.RA/Player/TechTree.cs b/OpenRA.Mods.RA/Player/TechTree.cs index 92f897b90a..cfd4ba225e 100755 --- a/OpenRA.Mods.RA/Player/TechTree.cs +++ b/OpenRA.Mods.RA/Player/TechTree.cs @@ -86,15 +86,18 @@ namespace OpenRA.Mods.RA this.hasPrerequisites = false; } + bool HasPrerequisites(Cache> buildings) + { + foreach (var p in prerequisites) + if (p.StartsWith("!") ^ + !buildings.Keys.Contains(p.Replace("!",""))) + return false; + return true; + } + public void Update(Cache> buildings) { - var nowHasPrerequisites = true; - foreach (var p in prerequisites) - if (!buildings.Keys.Contains(p)) - { - nowHasPrerequisites = false; - break; - } + var nowHasPrerequisites = HasPrerequisites(buildings); if( nowHasPrerequisites && !hasPrerequisites ) watcher.PrerequisitesAvailable(key);