Unify junction props
This commit is contained in:
@@ -27,8 +27,7 @@ public sealed class SimulationEngine
|
||||
|
||||
var next = prop.Type switch {
|
||||
EPropType.Flow or EPropType.Consumer => ToggleProp(level, position, prop),
|
||||
EPropType.TJunction => level.SetProp(position, prop with { TJunctionMode = NextTJunctionMode(prop.TJunctionMode) }),
|
||||
EPropType.CrossJunction => level.SetProp(position, prop with { CrossJunctionMode = NextCrossJunctionMode(prop.CrossJunctionMode) }),
|
||||
EPropType.Junction => CycleJunctionMode(level, position, prop),
|
||||
EPropType.Door => ToggleDoor(level, position),
|
||||
EPropType.AllSeeingEyeTerminal => level with { Global = level.Global with { AllSeeingEyeUnlocked = true, Status = "ALL-SEEING-EYE ONLINE" } },
|
||||
EPropType.RemedySupply => PickUpRemedy(level, position, prop),
|
||||
@@ -631,14 +630,15 @@ public sealed class SimulationEngine
|
||||
return level with { Global = level.Global with { Status = message } };
|
||||
}
|
||||
|
||||
private static ETJunctionMode NextTJunctionMode(ETJunctionMode mode)
|
||||
private static LevelState CycleJunctionMode(LevelState level, GridPosition position, PropState prop)
|
||||
{
|
||||
return mode == ETJunctionMode.FourZero ? ETJunctionMode.ZeroFour : mode + 1;
|
||||
}
|
||||
var flow = JunctionFlowAnalyzer.Analyze(level).FirstOrDefault(junction => junction.Position == position);
|
||||
var outflowCount = flow?.OutgoingBranches.Count ?? 2;
|
||||
var ratios = Balancing.Current.JunctionRatios(outflowCount);
|
||||
if (ratios.Count == 0)
|
||||
return level;
|
||||
|
||||
private static ECrossJunctionMode NextCrossJunctionMode(ECrossJunctionMode mode)
|
||||
{
|
||||
return mode == ECrossJunctionMode.TwoTwoTwo ? ECrossJunctionMode.ZeroThreeThree : mode + 1;
|
||||
return level.SetProp(position, prop with { JunctionMode = (prop.JunctionMode + 1) % ratios.Count });
|
||||
}
|
||||
|
||||
private static EBand SurfaceBand(SurfaceState surface, ECarrierType carrier)
|
||||
@@ -746,4 +746,4 @@ public sealed class SimulationEngine
|
||||
}
|
||||
|
||||
private readonly LevelValidator m_Validator = new();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user