Aetheria/Assets/Scripts/ServerShared/RuntimeProjection/RuntimeCatalogEntry.cs

59 lines
1.5 KiB
C#
Raw Normal View History

2026-06-13 04:56:50 +01:00
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
using System;
using Unity.Mathematics;
public interface INamedEntry
{
string EntryName { get; set; }
}
2026-06-13 17:22:03 +01:00
public abstract class RuntimeCatalogEntry
{
2020-05-14 02:47:07 +01:00
public Guid ID = Guid.NewGuid();
public override int GetHashCode()
{
return ID.GetHashCode();
}
public override bool Equals(object obj)
{
2026-06-13 17:22:03 +01:00
if (obj is RuntimeCatalogEntry entry) return entry.ID == ID;
return false;
}
}
2026-06-13 17:22:03 +01:00
public class RuntimeCatalogLink<T> : RuntimeCatalogLinkBase where T : ItemData
{
2026-06-13 14:36:54 +01:00
public T Value => ResolveRuntimeItemCatalog<T>(LinkID);
}
2026-06-13 17:22:03 +01:00
public class RuntimeCatalogLinkBase
{
public Guid LinkID;
2026-06-13 04:56:50 +01:00
2026-06-13 14:36:54 +01:00
private static IRuntimeItemCatalogReader Catalog { get; set; }
2026-06-13 14:36:54 +01:00
protected static T ResolveRuntimeItemCatalog<T>(Guid linkId) where T : ItemData
{
2026-06-13 07:41:21 +01:00
if (Catalog == null)
2026-06-13 14:36:54 +01:00
throw new InvalidOperationException("Runtime item catalog resolution is not bound. Open typed Aetheria runtime state before reading item object graphs.");
2026-06-13 07:41:21 +01:00
return Catalog.Get<T>(linkId);
}
2026-06-13 14:36:54 +01:00
public static void BindRuntimeItemCatalog(IRuntimeItemCatalogReader catalog)
{
2026-06-13 07:41:21 +01:00
if (catalog == null) throw new ArgumentNullException(nameof(catalog));
2026-06-13 07:41:21 +01:00
Catalog = catalog;
}
}
public interface ITintInspector
{
float3 TintColor { get; }
}