using System.Diagnostics.CodeAnalysis;
namespace NeonSprawl.Server.Game.Gathering;
/// Adapter over (NEO-59).
public sealed class ResourceNodeDefinitionRegistry(ResourceNodeCatalog catalog) : IResourceNodeDefinitionRegistry
{
///
public bool TryGetDefinition(string? nodeDefId, [NotNullWhen(true)] out ResourceNodeDefRow? definition)
{
if (nodeDefId is null)
{
definition = null;
return false;
}
if (catalog.NodesById.TryGetValue(nodeDefId, out var row))
{
definition = row;
return true;
}
definition = null;
return false;
}
///
public bool TryGetYield(string? nodeDefId, [NotNullWhen(true)] out ResourceYieldRow? yield)
{
if (nodeDefId is null)
{
yield = null;
return false;
}
if (catalog.YieldsByNodeDefId.TryGetValue(nodeDefId, out var row))
{
yield = row;
return true;
}
yield = null;
return false;
}
///
public IReadOnlyList GetDefinitionsInIdOrder()
{
var ids = catalog.NodesById.Keys.OrderBy(k => k, StringComparer.Ordinal).ToArray();
var list = new List(ids.Length);
foreach (var id in ids)
{
list.Add(catalog.NodesById[id]);
}
return list;
}
}