Skip to content

Commit

Permalink
Clean up resource definition loading
Browse files Browse the repository at this point in the history
  • Loading branch information
Majiir committed Sep 2, 2014
1 parent 82af687 commit ad80573
Showing 1 changed file with 36 additions and 25 deletions.
61 changes: 36 additions & 25 deletions Plugin/KethaneController.cs
@@ -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));
}
}
}

0 comments on commit ad80573

Please sign in to comment.