Rework simulation rules
This commit is contained in:
@@ -3,18 +3,27 @@
|
||||
public sealed class LevelEditorTests
|
||||
{
|
||||
[Fact]
|
||||
public void DoorToolRequiresExplicitAdjacentEdgeSelection()
|
||||
public void DoorToolPlacesSingleFloorDoorProp()
|
||||
{
|
||||
var level = LevelState.Create("Door editor", 6, 6);
|
||||
|
||||
var withDoorProp = LevelEditor.Apply(level, new(2, 2), new() { Tool = EEditorTool.Door });
|
||||
var withDoorEdge = LevelEditor.SetDoorEdge(withDoorProp, new(2, 2), new(3, 2));
|
||||
var rejected = LevelEditor.SetDoorEdge(withDoorEdge, new(2, 2), new(4, 2));
|
||||
var next = LevelEditor.Apply(level, new(2, 2), new() { Tool = EEditorTool.Door });
|
||||
|
||||
Assert.Equal(EPropType.Door, withDoorProp.GetProp(new(2, 2)).Type);
|
||||
Assert.Empty(withDoorProp.Doors);
|
||||
Assert.Single(withDoorEdge.Doors);
|
||||
Assert.Equal(withDoorEdge.Doors, rejected.Doors);
|
||||
Assert.Equal(EPropType.Door, next.GetProp(new(2, 2)).Type);
|
||||
Assert.Equal(EDoorState.Closed, next.GetProp(new(2, 2)).DoorState);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ConsumerToolPlacesCarrierAgnosticConsumer()
|
||||
{
|
||||
var level = LevelState.Create("Consumer editor", 6, 6);
|
||||
|
||||
var next = LevelEditor.Apply(level, new(2, 2), new() { Tool = EEditorTool.Consumer, Carrier = ECarrierType.Fuel });
|
||||
|
||||
Assert.Equal(EPropType.Consumer, next.GetProp(new(2, 2)).Type);
|
||||
Assert.Equal(EConsumerServiceState.Unknown, next.GetProp(new(2, 2)).FuelServiceState);
|
||||
Assert.Equal(EConsumerServiceState.Unknown, next.GetProp(new(2, 2)).CoolantServiceState);
|
||||
Assert.Equal(EConsumerServiceState.Unknown, next.GetProp(new(2, 2)).ElectricityServiceState);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -33,44 +42,14 @@ public sealed class LevelEditorTests
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ReactorBindingUpdatesOnlyMatchingCarrierConsumer()
|
||||
public void ReactorControlToolCreatesUnboundReactorState()
|
||||
{
|
||||
var level = LevelState.Create("Binding editor", 8, 6);
|
||||
level = level.SetProp(new(1, 1), new() { Type = EPropType.ReactorControl, ReactorId = 1 });
|
||||
level = level.SetProp(new(2, 1), new() { Type = EPropType.Consumer, Carrier = ECarrierType.Fuel });
|
||||
level = level.SetProp(new(3, 1), new() { Type = EPropType.Consumer, Carrier = ECarrierType.Coolant }) with {
|
||||
Reactors = [
|
||||
new() {
|
||||
ReactorId = 1,
|
||||
ControlPosition = new(1, 1),
|
||||
FuelConsumerPosition = new(1, 1),
|
||||
CoolantConsumerPosition = new(1, 1),
|
||||
ElectricityConsumerPosition = new(1, 1)
|
||||
}
|
||||
]
|
||||
};
|
||||
var level = LevelState.Create("Reactor editor", 6, 6);
|
||||
|
||||
var bound = LevelEditor.BindReactorConsumer(level, 1, ECarrierType.Fuel, new(2, 1));
|
||||
var rejected = LevelEditor.BindReactorConsumer(bound, 1, ECarrierType.Fuel, new(3, 1));
|
||||
var next = LevelEditor.Apply(level, new(2, 2), new() { Tool = EEditorTool.ReactorControl });
|
||||
|
||||
Assert.Equal(new(2, 1), bound.Reactors[0].FuelConsumerPosition);
|
||||
Assert.Equal(bound.Reactors[0].FuelConsumerPosition, rejected.Reactors[0].FuelConsumerPosition);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RuleEventEditorAssignsStableIdsAndCanRemoveEvents()
|
||||
{
|
||||
var level = LevelState.Create("Rule editor", 6, 6);
|
||||
|
||||
var withRule = LevelEditor.AddRuleEvent(level, new() {
|
||||
Phase = ERuleEventPhase.EndOfTurn,
|
||||
Predicates = [new() { Kind = ERulePredicateKind.TurnAtLeast, Turn = 1 }],
|
||||
Effects = [new() { Kind = ERuleEffectKind.EmitWarning, Message = "authored" }]
|
||||
});
|
||||
var removed = LevelEditor.RemoveRuleEvent(withRule, "rule-1");
|
||||
|
||||
Assert.Single(withRule.RuleEvents);
|
||||
Assert.Equal("rule-1", withRule.RuleEvents[0].Id);
|
||||
Assert.Empty(removed.RuleEvents);
|
||||
Assert.Single(next.Reactors);
|
||||
Assert.Equal(new(2, 2), next.Reactors[0].ControlPosition);
|
||||
Assert.Equal(1, next.Reactors[0].ReactorId);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user