Vixen
dd8b0a81
csharp
public record class SystemPlan

The order a set of system types would run in, worked out without building any of them.

Read the guide page for this →

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> Placements

    Every system, in phase order and then in execution order.

  • public IReadOnlyList<string> Unsatisfied

    The 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> Phases

    The 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