Keep orbit task targets on typed keys

This commit is contained in:
Meta Vens 2026-06-16 15:54:18 +01:00
commit cfc1ddac6d
8 changed files with 137 additions and 10 deletions

View file

@ -100,7 +100,11 @@ public class Zone
{
var agent = new Minion(ship);
var task = new PatrolOrbitsTask();
task.Circuit = Orbits.OrderBy(_ => _itemManager.Random.NextFloat()).Take(4).Select(x => x.Key).ToArray();
task.Circuit = Orbits.Values
.OrderBy(_ => _itemManager.Random.NextFloat())
.Take(4)
.Select(orbit => orbit.OrbitKey)
.ToArray();
agent.Task = task;
return agent;
}
@ -115,6 +119,17 @@ public class Zone
return id == Guid.Empty ? "" : $"{BodyKeyPrefix}{id:D}";
}
public static Guid ParseOrbitGuid(string orbitKey)
{
if (string.IsNullOrWhiteSpace(orbitKey))
return Guid.Empty;
var runtimeOrbitId = orbitKey.StartsWith(OrbitKeyPrefix, StringComparison.OrdinalIgnoreCase)
? orbitKey.Substring(OrbitKeyPrefix.Length)
: orbitKey;
return Guid.TryParse(runtimeOrbitId, out var id) ? id : Guid.Empty;
}
public string GetBodyKey(Guid bodyId)
{
if (bodyId == Guid.Empty)
@ -147,6 +162,11 @@ public class Zone
return AsteroidBelts.TryGetValue(ParseBodyGuid(bodyKey), out belt);
}
public bool TryGetOrbit(string orbitKey, out Orbit orbit)
{
return Orbits.TryGetValue(ParseOrbitGuid(orbitKey), out orbit);
}
public void Update(float deltaTime)
{
_time += deltaTime;
@ -212,6 +232,11 @@ public class Zone
return Orbits[orbitID].Position;
}
public float2 GetOrbitPosition(string orbitKey)
{
return GetOrbitPosition(ParseOrbitGuid(orbitKey));
}
public float2 GetOrbitVelocity(Guid orbit)
{
if (Orbits.ContainsKey(orbit))