public record class SystemPlanThe order a set of system types would run in, worked out without building any of them.
Remarks
Why a second shape rather than a SystemGraph. Everything the topological sort reads — the phase, the UpdateBeforeAttribute and UpdateAfterAttribute edges — is metadata on the type. Only the access is not: IDeclaredAccess is an instance property, for systems whose component set is not known until construction. So the order is answerable about types alone and the parallel schedule is not, and a tool that has a project's assembly but not its services — vixen doctor systems is the one — can have the first without pretending to the second.
⚠ There are no DependsOn edges here and that is not an omission to be fixed later. Those come from ConflictsWith, and an undeclared access conflicts with everything — so guessing at it would not produce a cautious answer, it would produce a confident wrong one.
Fields and properties (3)
public IReadOnlyList<SystemPlacement> PlacementsEvery system, in phase order and then in execution order.
public IReadOnlyList<string> UnsatisfiedThe ordering attributes that do nothing, one readable line each. ⚠ Read this out. An UpdateBeforeAttribute naming a system that is not in the set is silently dropped by Build — deliberately, see Link — so a typo in one is a system that runs in the wrong place and never says so.
public IEnumerable<SystemPhase> PhasesThe phases that have systems in them, in execution order.
Methods (2)
public SystemPlan(IReadOnlyList<SystemPlacement> Placements, IReadOnlyList<string> Unsatisfied)The order a set of system types would run in, worked out without building any of them.
public IReadOnlyList<SystemPlacement> InPhase(SystemPhase phase)The systems in a phase, in execution order.
Used by (4)
- SyncStateSweepOrderTestsVixen.Net.Engine.Tests
- SystemGraphVixen.Ecs
- DoctorSystemsTestsVixen.Cli.Tests
- SystemsRunnerVixen.Cli