77 lines
2.9 KiB
C#
77 lines
2.9 KiB
C#
|
|
namespace SpaceGame.Api.Factions.Runtime;
|
|
|
|
public sealed class FactionRuntime
|
|
{
|
|
public required string Id { get; init; }
|
|
public required string Label { get; init; }
|
|
public required string Color { get; init; }
|
|
public float Credits { get; set; }
|
|
public float PopulationTotal { get; set; }
|
|
public float OreMined { get; set; }
|
|
public float GoodsProduced { get; set; }
|
|
public int ShipsBuilt { get; set; }
|
|
public int ShipsLost { get; set; }
|
|
public HashSet<string> CommanderIds { get; } = new(StringComparer.Ordinal);
|
|
public string? DefaultPolicySetId { get; set; }
|
|
public string LastDeltaSignature { get; set; } = string.Empty;
|
|
}
|
|
|
|
public sealed class CommanderRuntime
|
|
{
|
|
public required string Id { get; init; }
|
|
public required string Kind { get; set; }
|
|
public required string FactionId { get; init; }
|
|
public string? ParentCommanderId { get; set; }
|
|
public string? ControlledEntityId { get; set; }
|
|
public string? PolicySetId { get; set; }
|
|
public string? Doctrine { get; set; }
|
|
public List<string> Goals { get; } = [];
|
|
public HashSet<string> ActiveDirectives { get; } = new(StringComparer.Ordinal);
|
|
public string? ActiveGoalName { get; set; }
|
|
public string? ActiveActionName { get; set; }
|
|
public float ReplanTimer { get; set; }
|
|
public bool NeedsReplan { get; set; } = true;
|
|
public CommanderBehaviorRuntime? ActiveBehavior { get; set; }
|
|
public CommanderOrderRuntime? ActiveOrder { get; set; }
|
|
public CommanderTaskRuntime? ActiveTask { get; set; }
|
|
public HashSet<string> SubordinateCommanderIds { get; } = new(StringComparer.Ordinal);
|
|
public bool IsAlive { get; set; } = true;
|
|
public FactionPlanningState? LastPlanningState { get; set; }
|
|
public IReadOnlyList<(string Name, float Priority)>? LastGoalPriorities { get; set; }
|
|
}
|
|
|
|
public sealed class CommanderBehaviorRuntime
|
|
{
|
|
public required string Kind { get; set; }
|
|
public string? Phase { get; set; }
|
|
public string? TargetEntityId { get; set; }
|
|
public string? ItemId { get; set; }
|
|
public string? NodeId { get; set; }
|
|
public string? StationId { get; set; }
|
|
public string? ModuleId { get; set; }
|
|
public string? AreaSystemId { get; set; }
|
|
public int PatrolIndex { get; set; }
|
|
}
|
|
|
|
public sealed class CommanderOrderRuntime
|
|
{
|
|
public required string Kind { get; init; }
|
|
public OrderStatus Status { get; set; } = OrderStatus.Accepted;
|
|
public string? TargetEntityId { get; set; }
|
|
public string? DestinationNodeId { get; set; }
|
|
public required string DestinationSystemId { get; init; }
|
|
public required Vector3 DestinationPosition { get; init; }
|
|
}
|
|
|
|
public sealed class CommanderTaskRuntime
|
|
{
|
|
public required string Kind { get; set; }
|
|
public WorkStatus Status { get; set; } = WorkStatus.Pending;
|
|
public string? TargetEntityId { get; set; }
|
|
public string? TargetSystemId { get; set; }
|
|
public string? TargetNodeId { get; set; }
|
|
public Vector3? TargetPosition { get; set; }
|
|
public float Threshold { get; set; }
|
|
}
|