Aetheria/Packages/org.gamecult.aetheria.state/Runtime/AetheriaRuntimeAssetDocuments.cs
2026-07-06 02:45:16 +01:00

116 lines
3.3 KiB
C#

using System;
using System.Collections.Generic;
using GameCult.Caching;
using MessagePack;
#nullable enable
namespace GameCult.Aetheria.State.Verse
{
public static class AetheriaRuntimeAssetKinds
{
public const string Texture = "texture";
public const string Sprite = "sprite";
public const string Mesh = "mesh";
public const string Material = "material";
public const string Shader = "shader";
public const string Audio = "audio";
public const string Prefab = "prefab";
}
public static class AetheriaRuntimeAssetTransports
{
public const string CultMesh = "cultmesh";
}
[MessagePackObject]
public sealed class AetheriaRuntimeAssetRef
{
[Key(0)]
public string AssetKey { get; set; } = "";
[Key(1)]
public string Kind { get; set; } = "";
[Key(2)]
public string Uri { get; set; } = "";
[Key(3)]
public string Transport { get; set; } = AetheriaRuntimeAssetTransports.CultMesh;
[Key(4)]
public string ContentHash { get; set; } = "";
[Key(5)]
public string MimeType { get; set; } = "";
[Key(6)]
public IReadOnlyDictionary<string, string> Metadata { get; set; } =
new Dictionary<string, string>();
public static AetheriaRuntimeAssetRef Empty(string kind = "")
{
return new AetheriaRuntimeAssetRef { Kind = kind ?? "" };
}
public static AetheriaRuntimeAssetRef FromKey(
string key,
string kind,
string? uri = null,
string transport = AetheriaRuntimeAssetTransports.CultMesh,
string? mimeType = null)
{
key ??= "";
return new AetheriaRuntimeAssetRef
{
AssetKey = key,
Kind = kind ?? "",
Uri = string.IsNullOrWhiteSpace(uri) ? key : uri ?? "",
Transport = string.IsNullOrWhiteSpace(transport)
? AetheriaRuntimeAssetTransports.CultMesh
: transport,
MimeType = mimeType ?? ""
};
}
}
[CultDocument("gamecult.aetheria.asset_manifest", "gamecult.aetheria.asset_manifest.v1")]
[MessagePackObject]
public sealed class AetheriaRuntimeAssetManifestDocument
{
[Key(0)]
public string Schema { get; set; } = AetheriaRuntimeDaemonSchemas.AssetManifest;
[Key(1)]
public string PublishedAtUtc { get; set; } = "";
[Key(2)]
public string RunId { get; set; } = "";
[Key(3)]
public string BaseUri { get; set; } = "cultmesh://aetheria.local/assets";
[Key(4)]
public IReadOnlyList<AetheriaRuntimeAssetManifestEntry> Assets { get; set; } =
Array.Empty<AetheriaRuntimeAssetManifestEntry>();
}
[MessagePackObject]
public sealed class AetheriaRuntimeAssetManifestEntry
{
[Key(0)]
public AetheriaRuntimeAssetRef Ref { get; set; } = new AetheriaRuntimeAssetRef();
[Key(1)]
public long SizeBytes { get; set; } = -1;
[Key(2)]
public int Width { get; set; }
[Key(3)]
public int Height { get; set; }
[Key(4)]
public IReadOnlyList<string> Tags { get; set; } = Array.Empty<string>();
}
}