using Craftimizer.Simulator; using Craftimizer.Simulator.Actions; namespace Craftimizer.Solver; public readonly record struct SolverSolution { private readonly List actions = null!; public readonly IReadOnlyList Actions { get => actions; init => ActionEnumerable = value; } public readonly IEnumerable ActionEnumerable { init => actions = value.ToList(); } public readonly SimulationState State { get; init; } public SolverSolution(IEnumerable actions, in SimulationState state) { ActionEnumerable = actions; State = state; } public void Deconstruct(out IReadOnlyList actions, out SimulationState state) { actions = Actions; state = State; } internal static IEnumerable SanitizeCombo(ActionType action) { if (action.Base() is BaseComboAction combo) { foreach (var a in SanitizeCombo(combo.ActionTypeA)) yield return a; foreach (var b in SanitizeCombo(combo.ActionTypeB)) yield return b; } else yield return action; } }