Skip to content

Commit 49da7ed

Browse files
committed
Merging projects part 4
1 parent 060d0d0 commit 49da7ed

22 files changed

+194
-196
lines changed

NUnitTests/FluentSyntaxTest1.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,8 @@ private enum Trigger
9999
MOUSE_LEAVE
100100
}
101101

102-
private readonly Dictionary<Button, Fsm<State, Trigger, float>> buttonMachines =
103-
new Dictionary<Button, Fsm<State, Trigger, float>>();
102+
private readonly Dictionary<Button, Fsm<State, Trigger>> buttonMachines =
103+
new Dictionary<Button, Fsm<State, Trigger>>();
104104

105105
private void Main()
106106
{
@@ -109,7 +109,7 @@ private void Main()
109109
CreateMachineFor(Fsm<State, Trigger>.Builder(State.IDLE), new Button(), hero);
110110
}
111111

112-
private void CreateMachineFor(BuilderFluent<State, Trigger, float> builder, Button button, Hero hero)
112+
private void CreateMachineFor(BuilderFluent<State, Trigger> builder, Button button, Hero hero)
113113
{
114114
buttonMachines.Add(button, builder
115115
.State(State.IDLE)

NUnitTests/FluentTests.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,13 @@ private class Button
5454
public bool IsActivated { get; set; }
5555
public State BtnState { get; set; }
5656
public State OldState { get; set; } = State.IDLE;
57-
public float RefreshTimer { get; set; } = 1F;
57+
public float RefreshTimer { get; set; } = 2F;
5858

5959
public int UpdateCounter { get; set; }
6060
}
6161

6262
[Test]
63-
[Category("StateMachine.FluentTests.OnMethods")]
63+
[Category("FluentTests.OnMethods")]
6464
public void WhenStateChangesOnEnterAndOnExitHooksShouldTrigger()
6565
{
6666
var button = new Button();
@@ -86,7 +86,7 @@ public void WhenStateChangesOnEnterAndOnExitHooksShouldTrigger()
8686
.OnExit(t => button.OldState = button.BtnState)
8787
.Update(a =>
8888
{
89-
button.RefreshTimer -= a.Data;
89+
button.RefreshTimer -= (float)a.ElapsedTimeSpan.TotalMilliseconds;
9090
if (button.RefreshTimer <= 0F)
9191
{
9292
button.RefreshTimer = 0F;
@@ -96,7 +96,7 @@ public void WhenStateChangesOnEnterAndOnExitHooksShouldTrigger()
9696
})
9797
.Build();
9898

99-
m.Update(TimeSpan.FromMilliseconds(2f)); // Should do nothing.
99+
m.Update(TimeSpan.FromMilliseconds(2)); // Should do nothing.
100100
Assert.That(m.Current.Identifier, Is.EqualTo(State.IDLE));
101101
m.Trigger(Trigger.MOUSE_CLICKED);
102102
Assert.That(m.Current.Identifier, Is.EqualTo(State.IDLE));
@@ -109,7 +109,7 @@ public void WhenStateChangesOnEnterAndOnExitHooksShouldTrigger()
109109
Assert.That(button.BtnState, Is.EqualTo(State.OVER));
110110
Assert.That(button.OldState, Is.EqualTo(State.IDLE));
111111
m.Trigger(Trigger.MOUSE_CLICKED);
112-
Assert.That(m.Current.Identifier, Is.EqualTo(State.PRESSED));
112+
Assert.That(m.Current.Identifier, Is.EqualTo(State.PRESSED));
113113
Assert.That(button.BtnState, Is.EqualTo(State.PRESSED));
114114
Assert.That(button.OldState, Is.EqualTo(State.OVER));
115115
m.Trigger(Trigger.MOUSE_RELEASED); // Button is deactivated.
@@ -121,11 +121,11 @@ public void WhenStateChangesOnEnterAndOnExitHooksShouldTrigger()
121121
Assert.That(m.Current.Identifier, Is.EqualTo(State.REFRESHING));
122122
Assert.That(button.BtnState, Is.EqualTo(State.REFRESHING));
123123
Assert.That(button.OldState, Is.EqualTo(State.PRESSED));
124-
m.Update(TimeSpan.FromMilliseconds(0.5f)); // No transition yet...
124+
m.Update(TimeSpan.FromMilliseconds(1)); // No transition yet...
125125
Assert.That(m.Current.Identifier, Is.EqualTo(State.REFRESHING));
126126
Assert.That(button.BtnState, Is.EqualTo(State.REFRESHING));
127127
Assert.That(button.OldState, Is.EqualTo(State.PRESSED));
128-
m.Update(TimeSpan.FromMilliseconds(0.5f)); // But now.
128+
m.Update(TimeSpan.FromMilliseconds(1)); // But now.
129129
Assert.That(m.Current.Identifier, Is.EqualTo(State.OVER));
130130
Assert.That(button.BtnState, Is.EqualTo(State.OVER));
131131
Assert.That(button.OldState, Is.EqualTo(State.REFRESHING));

NUnitTests/GameProgrammingPatterns1.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
namespace NUnitTests
3232
{
3333
[TestFixture]
34-
[Category("StateMachine.GamingProgrammingPatterns")]
34+
[Category("GamingProgrammingPatterns")]
3535
public class GameProgrammingPatterns1
3636
{
3737
private enum State
@@ -49,7 +49,7 @@ private enum Trigger
4949
}
5050

5151
[Test]
52-
[Category("StateMachine.GamingProgrammingPatterns.1")]
52+
[Category("GamingProgrammingPatterns.1")]
5353
public void StateChangesStandingDuckingJumpingDiving()
5454
{
5555
var m = Fsm<State, Trigger>.Builder(State.STANDING)
@@ -93,7 +93,7 @@ private enum WTrigger
9393
}
9494

9595
[Test]
96-
[Category("StateMachine.GamingProgrammingPatterns.2")]
96+
[Category("GamingProgrammingPatterns.2")]
9797
public void StateChangesGunRotation()
9898
{
9999
// Now for the weapons-machine with basic forward- and backward-rotation.

NUnitTests/MonoGame/FluentTests.cs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,8 @@ public void WhenAfterConditionFiresOnEnterAndOnExitHooksShouldTrigger()
8383
.State(State.REFRESHING)
8484
.OnEnter(t => button.BtnState = State.REFRESHING)
8585
.OnExit(t => button.OldState = button.BtnState)
86-
.TransitionTo(State.OVER).After(1, TimeUnit.SECONDS)
87-
.GlobalTransitionTo(State.IDLE).AfterGlobal(10, TimeUnit.SECONDS)
86+
.TransitionTo(State.OVER).After(TimeSpan.FromSeconds(1))
87+
.GlobalTransitionTo(State.IDLE).AfterGlobal(TimeSpan.FromSeconds(10))
8888
.Build();
8989

9090
m.Update(TimeSpan.FromMilliseconds(16)); // Should do nothing.
@@ -137,13 +137,13 @@ public void WhenMultipleAfterConditionsFireOnASingleUpdateAdvanceStateCorrectly(
137137
{
138138
var m = Fsm<State, Trigger>.Builder(State.IDLE)
139139
.State(State.IDLE)
140-
.TransitionTo(State.OVER).After(10, TimeUnit.MILLISECONDS)
140+
.TransitionTo(State.OVER).After(TimeSpan.FromMilliseconds(10))
141141
.State(State.OVER)
142-
.TransitionTo(State.PRESSED).After(10, TimeUnit.MILLISECONDS)
142+
.TransitionTo(State.PRESSED).After(TimeSpan.FromMilliseconds(10))
143143
.State(State.PRESSED)
144-
.TransitionTo(State.REFRESHING).After(10, TimeUnit.MILLISECONDS)
144+
.TransitionTo(State.REFRESHING).After(TimeSpan.FromMilliseconds(10))
145145
.State(State.REFRESHING)
146-
.TransitionTo(State.IDLE).After(10, TimeUnit.MILLISECONDS)
146+
.TransitionTo(State.IDLE).After(TimeSpan.FromMilliseconds(10))
147147
.Build();
148148

149149
Assert.That(m.Current.Identifier, Is.EqualTo(State.IDLE));
@@ -161,19 +161,19 @@ public void WhenMultipleAfterConditionsFireOnASingleUpdateOnEnterAndOnExitShoudF
161161
.State(State.IDLE)
162162
.OnEnter(t => enterCount++)
163163
.OnExit(t => exitCount++)
164-
.TransitionTo(State.OVER).After(10, TimeUnit.MILLISECONDS)
164+
.TransitionTo(State.OVER).After(TimeSpan.FromMilliseconds(10))
165165
.State(State.OVER)
166166
.OnEnter(t => enterCount++)
167167
.OnExit(t => exitCount++)
168-
.TransitionTo(State.PRESSED).After(10, TimeUnit.MILLISECONDS)
168+
.TransitionTo(State.PRESSED).After(TimeSpan.FromMilliseconds(10))
169169
.State(State.PRESSED)
170170
.OnEnter(t => enterCount++)
171171
.OnExit(t => exitCount++)
172-
.TransitionTo(State.REFRESHING).After(10, TimeUnit.MILLISECONDS)
172+
.TransitionTo(State.REFRESHING).After(TimeSpan.FromMilliseconds(10))
173173
.State(State.REFRESHING)
174174
.OnEnter(t => enterCount++)
175175
.OnExit(t => exitCount++)
176-
.TransitionTo(State.IDLE).After(10, TimeUnit.MILLISECONDS)
176+
.TransitionTo(State.IDLE).After(TimeSpan.FromMilliseconds(10))
177177
.Build();
178178

179179
Assert.That(m.Current.Identifier, Is.EqualTo(State.IDLE));
@@ -188,7 +188,7 @@ public void WhenAnAfterConditionDoesNotFiresAndATransitionHappensTheTimerIsReset
188188
{
189189
var m = Fsm<State, Trigger>.Builder(State.IDLE)
190190
.State(State.IDLE)
191-
.TransitionTo(State.OVER).After(10, TimeUnit.MILLISECONDS)
191+
.TransitionTo(State.OVER).After(TimeSpan.FromMilliseconds(10))
192192
.TransitionTo(State.OVER).On(Trigger.MOUSE_CLICKED)
193193
.State(State.OVER)
194194
.TransitionTo(State.IDLE).On(Trigger.MOUSE_CLICKED)

NUnitTests/SimpleTests.cs

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
namespace NUnitTests
3333
{
3434
[TestFixture]
35-
[Category("StateMachine.Simple")]
35+
[Category("Simple")]
3636
public class SimpleTests
3737
{
3838
private enum State
@@ -50,19 +50,18 @@ private enum Trigger
5050
}
5151

5252
[Test]
53-
[Category("StateMachine.Simple")]
5453
public void WhenBuiltManuallyStackMachineShouldWork()
5554
{
56-
var opened = new State<State, Trigger, float>(State.OPENED);
57-
var closed = new State<State, Trigger, float>(State.CLOSED)
55+
var opened = new State<State, Trigger>(State.OPENED);
56+
var closed = new State<State, Trigger>(State.CLOSED)
5857
{
5958
ClearStack = true
6059
};
6160
opened.AddTransisionOn(Trigger.CLOSE, State.CLOSED).AddTransisionOn(Trigger.OPEN, State.OPENED);
6261
closed.AddTransisionOn(Trigger.OPEN, State.OPENED).AddTransisionOn(Trigger.CLOSE, State.CLOSED);
6362

6463
var m =
65-
new Fsm<State, Trigger, float>(opened, true)
64+
new Fsm<State, Trigger>(opened, true)
6665
.AddStateChangeHandler(TestTools.ConsoleOut)
6766
.Add(opened)
6867
.Add(closed);
@@ -71,7 +70,6 @@ public void WhenBuiltManuallyStackMachineShouldWork()
7170
}
7271

7372
[Test]
74-
[Category("StateMachine.Simple")]
7573
public void WhenBuiltWithBuilderStackMachineShouldWork()
7674
{
7775
var m = Fsm<State, Trigger>.Builder(State.OPENED)
@@ -87,7 +85,7 @@ public void WhenBuiltWithBuilderStackMachineShouldWork()
8785
AssertSimpleTest(m);
8886
}
8987

90-
private void AssertSimpleTest(Fsm<State, Trigger, float> m)
88+
private void AssertSimpleTest(Fsm<State, Trigger> m)
9189
{
9290
Assert.That(m.Current.Identifier, Is.EqualTo(State.OPENED));
9391
m.Trigger(Trigger.OPEN);
@@ -96,19 +94,18 @@ private void AssertSimpleTest(Fsm<State, Trigger, float> m)
9694

9795
m.Trigger(Trigger.CLOSE);
9896
Assert.That(m.Current.Identifier, Is.EqualTo(State.CLOSED));
99-
Assert.That(m.Stack.ToArray(), Is.EquivalentTo(new State<State, Trigger, float>[] {}));
97+
Assert.That(m.Stack.ToArray(), Is.EquivalentTo(new State<State, Trigger>[] {}));
10098

10199
m.Trigger(Trigger.CLOSE);
102100
Assert.That(m.Current.Identifier, Is.EqualTo(State.CLOSED));
103-
Assert.That(m.Stack.ToArray(), Is.EquivalentTo(new State<State, Trigger, float>[] {}));
101+
Assert.That(m.Stack.ToArray(), Is.EquivalentTo(new State<State, Trigger>[] {}));
104102

105103
m.Trigger(Trigger.OPEN);
106104
Assert.That(m.Current.Identifier, Is.EqualTo(State.OPENED));
107105
Assert.That(m.Stack.Select(x => x.Identifier).ToArray(), Is.EquivalentTo(new[] {State.OPENED}));
108106
}
109107

110108
[Test]
111-
[Category("StateMachine.Simple")]
112109
public void WhenBuiltWithBuilderAndStringsStackMachineShouldWork()
113110
{
114111
var m = Fsm<string, string>.Builder("OPENED")
@@ -127,27 +124,26 @@ public void WhenBuiltWithBuilderAndStringsStackMachineShouldWork()
127124

128125
m.Trigger("CLOSE");
129126
Assert.That(m.Current.Identifier, Is.EqualTo("CLOSED"));
130-
Assert.That(m.Stack.ToArray(), Is.EquivalentTo(new State<State, Trigger, float>[] { }));
127+
Assert.That(m.Stack.ToArray(), Is.EquivalentTo(new State<State, Trigger>[] { }));
131128

132129
m.Trigger("CLOSE");
133130
Assert.That(m.Current.Identifier, Is.EqualTo("CLOSED"));
134-
Assert.That(m.Stack.ToArray(), Is.EquivalentTo(new State<State, Trigger, float>[] { }));
131+
Assert.That(m.Stack.ToArray(), Is.EquivalentTo(new State<State, Trigger>[] { }));
135132

136133
m.Trigger("OPEN");
137134
Assert.That(m.Current.Identifier, Is.EqualTo("OPENED"));
138135
Assert.That(m.Stack.Select(x => x.Identifier).ToArray(), Is.EquivalentTo(new[] { "OPENED" }));
139136
}
140137

141138
[Test]
142-
[Category("StateMachine.Simple")]
143139
public void WhenCallingPopOnStackMachineBuiltManuallyShouldBehaveCorrectly()
144140
{
145-
var opened = new State<State, Trigger, float>(State.OPENED);
146-
var closed = new State<State, Trigger, float>(State.CLOSED)
141+
var opened = new State<State, Trigger>(State.OPENED);
142+
var closed = new State<State, Trigger>(State.CLOSED)
147143
{
148144
ClearStack = true
149145
};
150-
var pop = new State<State, Trigger, float>(State.POP);
146+
var pop = new State<State, Trigger>(State.POP);
151147
opened.AddTransisionOn(Trigger.CLOSE, State.CLOSED)
152148
.AddTransisionOn(Trigger.OPEN, State.OPENED)
153149
.AddTransisionOn(Trigger.PUSH_POP, State.POP);
@@ -156,7 +152,7 @@ public void WhenCallingPopOnStackMachineBuiltManuallyShouldBehaveCorrectly()
156152
.AddTransisionOn(Trigger.CLOSE, State.CLOSED);
157153

158154
var m =
159-
new Fsm<State, Trigger, float>(opened, true)
155+
new Fsm<State, Trigger>(opened, true)
160156
.AddStateChangeHandler(TestTools.ConsoleOut)
161157
.Add(opened)
162158
.Add(closed)
@@ -166,7 +162,6 @@ public void WhenCallingPopOnStackMachineBuiltManuallyShouldBehaveCorrectly()
166162
}
167163

168164
[Test]
169-
[Category("StateMachine.Simple")]
170165
public void WhenCallingPopOnStackMachineBuiltWithBuilderShouldBehaveCorrectly()
171166
{
172167
var m = Fsm<State, Trigger>.Builder(State.OPENED)
@@ -185,7 +180,7 @@ public void WhenCallingPopOnStackMachineBuiltWithBuilderShouldBehaveCorrectly()
185180
AssertTestWithPop(m);
186181
}
187182

188-
private void AssertTestWithPop(Fsm<State, Trigger, float> m)
183+
private void AssertTestWithPop(Fsm<State, Trigger> m)
189184
{
190185
Assert.That(m.Current.Identifier, Is.EqualTo(State.OPENED));
191186
m.Trigger(Trigger.OPEN);
@@ -202,11 +197,11 @@ private void AssertTestWithPop(Fsm<State, Trigger, float> m)
202197

203198
m.Trigger(Trigger.CLOSE);
204199
Assert.That(m.Current.Identifier, Is.EqualTo(State.CLOSED));
205-
Assert.That(m.Stack.ToArray(), Is.EquivalentTo(new State<State, Trigger, float>[] { }));
200+
Assert.That(m.Stack.ToArray(), Is.EquivalentTo(new State<State, Trigger>[] { }));
206201

207202
m.Trigger(Trigger.CLOSE);
208203
Assert.That(m.Current.Identifier, Is.EqualTo(State.CLOSED));
209-
Assert.That(m.Stack.ToArray(), Is.EquivalentTo(new State<State, Trigger, float>[] { }));
204+
Assert.That(m.Stack.ToArray(), Is.EquivalentTo(new State<State, Trigger>[] { }));
210205

211206
m.Trigger(Trigger.OPEN);
212207
Assert.That(m.Current.Identifier, Is.EqualTo(State.OPENED));

NUnitTests/TestTools.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ namespace NUnitTests
3232
{
3333
public static class TestTools
3434
{
35-
public static void ConsoleOut<TS, TT, TD>(object sender, StateChangeArgs<TS, TT, TD> e)
35+
public static void ConsoleOut<TS, TT>(object sender, StateChangeArgs<TS, TT> e)
3636
{
3737
Console.Out.WriteLine($"From [{e.From}] with [{e.Input}] to [{e.To}]");
3838
}

StateMachine/Events/StateChangeArgs.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,15 @@
2727

2828
namespace StateMachine.Events
2929
{
30-
public struct StateChangeArgs<TState, TTrigger, TData>
30+
public struct StateChangeArgs<TState, TTrigger>
3131
{
32-
public Fsm<TState, TTrigger, TData> Fsm;
33-
public State<TState, TTrigger, TData> From { get; }
34-
public State<TState, TTrigger, TData> To { get; }
32+
public Fsm<TState, TTrigger> Fsm;
33+
public State<TState, TTrigger> From { get; }
34+
public State<TState, TTrigger> To { get; }
3535
public TTrigger Input { get; }
3636

37-
public StateChangeArgs(Fsm<TState, TTrigger, TData> fsm, State<TState, TTrigger, TData> from,
38-
State<TState, TTrigger, TData> to, TTrigger input)
37+
public StateChangeArgs(Fsm<TState, TTrigger> fsm, State<TState, TTrigger> from,
38+
State<TState, TTrigger> to, TTrigger input)
3939
{
4040
Fsm = fsm;
4141
From = from;

StateMachine/Events/UpdateArgs.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,21 @@
2525
// For more information, please refer to <http://unlicense.org>
2626
// ***************************************************************************
2727

28+
using System;
29+
2830
namespace StateMachine.Events
2931
{
30-
public struct UpdateArgs<TState, TTrigger, TData>
32+
public struct UpdateArgs<TState, TTrigger>
3133
{
32-
public Fsm<TState, TTrigger, TData> Machine { get; }
33-
public State<TState, TTrigger, TData> State { get; }
34-
public TData Data { get; }
34+
public Fsm<TState, TTrigger> Machine { get; }
35+
public State<TState, TTrigger> State { get; }
36+
public TimeSpan ElapsedTimeSpan { get; }
3537

36-
public UpdateArgs(Fsm<TState, TTrigger, TData> machine, State<TState, TTrigger, TData> state, TData data)
38+
public UpdateArgs(Fsm<TState, TTrigger> machine, State<TState, TTrigger> state, TimeSpan elapsedTimeSpan)
3739
{
3840
Machine = machine;
3941
State = state;
40-
Data = data;
42+
ElapsedTimeSpan = elapsedTimeSpan;
4143
}
4244
}
4345
}

0 commit comments

Comments
 (0)