Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Clean up resource definition loading
- Loading branch information
Showing
1 changed file
with
36 additions
and
25 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,51 +1,62 @@ | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Collections.ObjectModel; | ||
using System.Linq; | ||
using UnityEngine; | ||
|
||
namespace Kethane | ||
{ | ||
public class KethaneController | ||
{ | ||
private static SortedDictionary<String, ResourceDefinition> resourceDefinitions = null; | ||
private static IEnumerable<ResourceDefinition> resourceDefinitions = null; | ||
|
||
public static ResourceDefinition[] ResourceDefinitions | ||
public static IEnumerable<ResourceDefinition> ResourceDefinitions | ||
{ | ||
get | ||
{ | ||
loadResourceDefinitions(); | ||
return resourceDefinitions.Values.ToArray(); | ||
if (resourceDefinitions == null) | ||
{ | ||
resourceDefinitions = loadResourceDefinitions(); | ||
} | ||
return resourceDefinitions; | ||
} | ||
} | ||
|
||
private static void loadResourceDefinitions() | ||
private static IEnumerable<ResourceDefinition> loadResourceDefinitions() | ||
{ | ||
if (resourceDefinitions != null) { return; } | ||
resourceDefinitions = new SortedDictionary<String, ResourceDefinition>(); | ||
foreach (var definitionNode in GameDatabase.Instance.GetConfigNodes("KethaneResource")) | ||
var defs = new SortedDictionary<String, ResourceDefinition>(); | ||
|
||
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<ResourceDefinition>(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)); | ||
} | ||
} | ||
} |