From ad80573fa69bf06caa448fa50bbd5abd824d1a13 Mon Sep 17 00:00:00 2001 From: Majiir Paktu Date: Tue, 2 Sep 2014 02:26:20 -0400 Subject: [PATCH] Clean up resource definition loading --- Plugin/KethaneController.cs | 61 ++++++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 25 deletions(-) diff --git a/Plugin/KethaneController.cs b/Plugin/KethaneController.cs index 3102017..a1a15f0 100644 --- a/Plugin/KethaneController.cs +++ b/Plugin/KethaneController.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Linq; using UnityEngine; @@ -7,45 +8,55 @@ namespace Kethane { public class KethaneController { - private static SortedDictionary resourceDefinitions = null; + private static IEnumerable resourceDefinitions = null; - public static ResourceDefinition[] ResourceDefinitions + public static IEnumerable ResourceDefinitions { get { - loadResourceDefinitions(); - return resourceDefinitions.Values.ToArray(); + if (resourceDefinitions == null) + { + resourceDefinitions = loadResourceDefinitions(); + } + return resourceDefinitions; } } - private static void loadResourceDefinitions() + private static IEnumerable loadResourceDefinitions() { - if (resourceDefinitions != null) { return; } - resourceDefinitions = new SortedDictionary(); - foreach (var definitionNode in GameDatabase.Instance.GetConfigNodes("KethaneResource")) + var defs = new SortedDictionary(); + + foreach (var definition in GameDatabase.Instance.GetConfigNodes("KethaneResource").Select(TryLoadResourceDefinition).Where(d => d != null)) { - try + if (!PartResourceLibrary.Instance.resourceDefinitions.Contains(definition.Resource)) { - var definition = new ResourceDefinition(definitionNode); - if (!PartResourceLibrary.Instance.resourceDefinitions.Contains(definition.Resource)) - { - Debug.LogWarning(String.Format("[Kethane] {0} is an unknown resource, ignoring", definition.Resource)); - } - else if (!resourceDefinitions.ContainsKey(definition.Resource)) - { - resourceDefinitions[definition.Resource] = definition; - } - else - { - Debug.LogWarning(String.Format("[Kethane] Duplicate definition for {0}, ignoring", definition.Resource)); - } + Debug.LogWarning(String.Format("[Kethane] {0} is an unknown resource, ignoring", definition.Resource)); } - catch (Exception e) + else if (defs.ContainsKey(definition.Resource)) { - Debug.LogError(String.Format("[Kethane] Error loading resource definition:\n\n{0}", e)); + Debug.LogWarning(String.Format("[Kethane] Duplicate definition for {0}, ignoring", definition.Resource)); } + else + { + defs[definition.Resource] = definition; + } + } + + Debug.Log(String.Format("[Kethane] Loaded {0} resource definitions", defs.Count)); + return new ReadOnlyCollection(defs.Values.ToArray()); + } + + private static ResourceDefinition TryLoadResourceDefinition(ConfigNode node) + { + try + { + return new ResourceDefinition(node); + } + catch (Exception e) + { + Debug.LogError(String.Format("[Kethane] Error loading resource definition:\n\n{0}", e)); + return null; } - Debug.Log(String.Format("[Kethane] Loaded {0} resource definitions", resourceDefinitions.Count)); } } }