ModernUO/Projects/UOContent/Gumps/Go/GoLocations.cs
2024-06-08 19:59:31 -07:00

73 lines
1.9 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Text.Json;
using Server.Json;
using Server.Logging;
namespace Server.Gumps;
public static class GoLocations
{
private static readonly ILogger logger = LogFactory.GetLogger(typeof(GoLocations));
private static LocationTree _felucca;
private static LocationTree _trammel;
private static LocationTree _ilshenar;
private static LocationTree _malas;
private static LocationTree _tokuno;
private static LocationTree _terMur;
public static LocationTree GetLocations(Map map)
{
if (map == Map.Ilshenar)
{
return _ilshenar ??= LoadLocations("ilshenar", Map.Ilshenar);
}
if (map == Map.TerMur)
{
return _terMur ??= LoadLocations("termur", Map.TerMur);
}
if (map == Map.Trammel)
{
return _trammel ??= LoadLocations("trammel", Map.Trammel);
}
if (map == Map.Malas)
{
return _malas ??= LoadLocations("malas", Map.Malas);
}
if (map == Map.Tokuno)
{
return _tokuno ??= LoadLocations("tokuno", Map.Tokuno);
}
return _felucca ??= LoadLocations("felucca", Map.Felucca);
}
private static LocationTree LoadLocations(string fileName, Map map)
{
var lastBranch = new Dictionary<Mobile, GoCategory>();
var path = Path.Combine($"Data/Locations/{fileName}.json");
try
{
var root = JsonConfig.Deserialize<GoCategory>(path);
if (root == null)
{
throw new JsonException($"Failed to deserialize {path}.");
}
return new LocationTree(map, lastBranch, root);
}
catch (Exception e)
{
logger.Error(e, "Failed to load file {Path}.", path);
return new LocationTree(map, [], null);
}
}
}