Aetheria/Aetheria.State.Daemon/AetheriaDaemonRunFactory.cs
2026-07-17 10:03:10 +01:00

39 lines
1.4 KiB
C#

using Aetheria.State;
using Aetheria.State.Documents;
using GameCult.Aetheria.State.Verse;
public static class AetheriaDaemonRunFactory
{
public static async Task<AetheriaDaemonWrittenRun> WriteAsync(
AetheriaStateNode node,
AetheriaRuntimeCatalogSnapshot catalog,
string now,
string generationIdentity,
AetheriaDaemonRegularTopologySettings? regularTopologySettings = null)
{
if (node == null) throw new ArgumentNullException(nameof(node));
if (catalog == null) throw new ArgumentNullException(nameof(catalog));
var settings = await node.MutableDocument<AetheriaPlayerSettings>(AetheriaStateNode.PlayerSettingsKey)
.ReadAsync().ConfigureAwait(false) ?? new AetheriaPlayerSettings();
if (!settings.TutorialPassed)
return await AetheriaDaemonTutorialRunWriter.WriteAsync(node, catalog, now).ConfigureAwait(false);
return await AetheriaDaemonRegularRunWriter.WriteAsync(
node,
catalog,
now,
StableSeed(generationIdentity),
regularTopologySettings).ConfigureAwait(false);
}
public static uint StableSeed(string value)
{
var hash = 2166136261u;
foreach (var character in value ?? "")
{
hash ^= character;
hash *= 16777619u;
}
return hash == 0 ? 1u : hash;
}
}