Skip to content

Commit 4a7ef42

Browse files
committed
Updates README.md and docs
1 parent c096ebe commit 4a7ef42

File tree

9 files changed

+170
-20
lines changed

9 files changed

+170
-20
lines changed

NUnitTests/Examples.cs

Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
// ***************************************************************************
2+
// This is free and unencumbered software released into the public domain.
3+
//
4+
// Anyone is free to copy, modify, publish, use, compile, sell, or
5+
// distribute this software, either in source code form or as a compiled
6+
// binary, for any purpose, commercial or non-commercial, and by any
7+
// means.
8+
//
9+
// In jurisdictions that recognize copyright laws, the author or authors
10+
// of this software dedicate any and all copyright interest in the
11+
// software to the public domain. We make this dedication for the benefit
12+
// of the public at large and to the detriment of our heirs and
13+
// successors. We intend this dedication to be an overt act of
14+
// relinquishment in perpetuity of all present and future rights to this
15+
// software under copyright law.
16+
//
17+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18+
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19+
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20+
// IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21+
// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22+
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23+
// OTHER DEALINGS IN THE SOFTWARE.
24+
//
25+
// For more information, please refer to <http://unlicense.org>
26+
// ***************************************************************************
27+
28+
using NUnit.Framework;
29+
using StateMachine;
30+
31+
namespace NUnitTests
32+
{
33+
public class Examples
34+
{
35+
private enum VState
36+
{
37+
DUCKING,
38+
STANDING,
39+
JUMPING,
40+
DESCENDING,
41+
DIVING
42+
};
43+
44+
private enum VTrigger
45+
{
46+
DOWN_RELEASED,
47+
DOWN_PRESSED,
48+
UP_PRESSED,
49+
SPACE_PRESSED
50+
};
51+
52+
private enum HState
53+
{
54+
STANDING,
55+
RUNNING_LEFT,
56+
RUNNING_RIGHT,
57+
WALKING_LEFT,
58+
WALKING_RIGHT,
59+
WALKING_DELAY_LEFT,
60+
WALKING_DELAY_RIGHT
61+
};
62+
63+
private enum HTrigger
64+
{
65+
LEFT_PRESSED,
66+
LEFT_RELEASED,
67+
RIGHT_PRESSED,
68+
RIGHT_RELEASED,
69+
SPACE_PRESSED
70+
};
71+
72+
private Fsm<VState, VTrigger> verticalMachine;
73+
private Fsm<HState, HTrigger> horizontalMachine;
74+
75+
private Hero hero;
76+
77+
[Test]
78+
[Ignore("Is output to PlantUML only.")]
79+
public void HorizontalMachine()
80+
{
81+
horizontalMachine = Fsm<HState, HTrigger>.Builder(HState.STANDING)
82+
.State(HState.STANDING)
83+
.TransitionTo(HState.WALKING_LEFT)
84+
.On(HTrigger.LEFT_PRESSED)
85+
.TransitionTo(HState.WALKING_RIGHT)
86+
.On(HTrigger.RIGHT_PRESSED)
87+
.State(HState.WALKING_LEFT)
88+
.TransitionTo(HState.WALKING_DELAY_LEFT)
89+
.On(HTrigger.LEFT_RELEASED)
90+
.State(HState.WALKING_RIGHT)
91+
.TransitionTo(HState.WALKING_DELAY_RIGHT)
92+
.On(HTrigger.RIGHT_RELEASED)
93+
.State(HState.WALKING_DELAY_LEFT)
94+
.TransitionTo(HState.WALKING_RIGHT)
95+
.On(HTrigger.RIGHT_PRESSED)
96+
.TransitionTo(HState.RUNNING_LEFT)
97+
.On(HTrigger.LEFT_PRESSED)
98+
.State(HState.WALKING_DELAY_RIGHT)
99+
.TransitionTo(HState.WALKING_LEFT)
100+
.On(HTrigger.LEFT_PRESSED)
101+
.TransitionTo(HState.RUNNING_RIGHT)
102+
.On(HTrigger.RIGHT_PRESSED)
103+
.State(HState.RUNNING_LEFT)
104+
.TransitionTo(HState.STANDING)
105+
.On(HTrigger.LEFT_RELEASED)
106+
.State(HState.RUNNING_RIGHT)
107+
.TransitionTo(HState.STANDING)
108+
.On(HTrigger.RIGHT_RELEASED)
109+
.GlobalTransitionTo(HState.STANDING)
110+
.OnGlobal(HTrigger.SPACE_PRESSED)
111+
.Build();
112+
113+
string s = horizontalMachine.GetPlantUml();
114+
}
115+
116+
[Test]
117+
[Ignore("Is output to PlantUML only.")]
118+
public void VerticalMachine()
119+
{
120+
verticalMachine = Fsm<VState, VTrigger>.Builder(VState.STANDING)
121+
.State(VState.STANDING)
122+
.TransitionTo(VState.DUCKING)
123+
.On(VTrigger.DOWN_PRESSED)
124+
.TransitionTo(VState.JUMPING)
125+
.On(VTrigger.UP_PRESSED)
126+
.State(VState.DUCKING)
127+
.TransitionTo(VState.STANDING)
128+
.On(VTrigger.DOWN_RELEASED)
129+
.State(VState.JUMPING)
130+
.TransitionTo(VState.DIVING)
131+
.On(VTrigger.DOWN_PRESSED)
132+
.State(VState.DESCENDING)
133+
.TransitionTo(VState.DIVING)
134+
.On(VTrigger.DOWN_PRESSED)
135+
.State(VState.DIVING)
136+
.TransitionTo(VState.DESCENDING)
137+
.On(VTrigger.DOWN_RELEASED)
138+
.GlobalTransitionTo(VState.STANDING)
139+
.OnGlobal(VTrigger.SPACE_PRESSED)
140+
.Build();
141+
142+
string s = verticalMachine.GetPlantUml();
143+
}
144+
}
145+
}

NUnitTests/MonoGame/FluentTests.cs renamed to NUnitTests/FluentAfterTests.cs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,13 @@
2626
// ***************************************************************************
2727

2828
using System;
29-
using StateMachine;
3029
using NUnit.Framework;
30+
using StateMachine;
3131

32-
namespace NUnitTests.MonoGame
32+
namespace NUnitTests
3333
{
34-
public class FluentTests
34+
[Category("FluentAfterTests")]
35+
public class FluentAfterTests
3536
{
3637
private enum State
3738
{
@@ -59,7 +60,6 @@ private class Button
5960
}
6061

6162
[Test]
62-
[Category("MonoGameStateMachine.FluentTests")]
6363
public void WhenAfterConditionFiresOnEnterAndOnExitHooksShouldTrigger()
6464
{
6565
var button = new Button();
@@ -132,7 +132,6 @@ public void WhenAfterConditionFiresOnEnterAndOnExitHooksShouldTrigger()
132132
}
133133

134134
[Test]
135-
[Category("MonoGameStateMachine.FluentTests")]
136135
public void WhenMultipleAfterConditionsFireOnASingleUpdateAdvanceStateCorrectly()
137136
{
138137
var m = Fsm<State, Trigger>.Builder(State.IDLE)
@@ -152,7 +151,6 @@ public void WhenMultipleAfterConditionsFireOnASingleUpdateAdvanceStateCorrectly(
152151
}
153152

154153
[Test]
155-
[Category("MonoGameStateMachine.FluentTests")]
156154
public void WhenMultipleAfterConditionsFireOnASingleUpdateOnEnterAndOnExitShoudFire()
157155
{
158156
var enterCount = 0;
@@ -183,7 +181,6 @@ public void WhenMultipleAfterConditionsFireOnASingleUpdateOnEnterAndOnExitShoudF
183181
}
184182

185183
[Test]
186-
[Category("MonoGameStateMachine.FluentTests")]
187184
public void WhenAnAfterConditionDoesNotFiresAndATransitionHappensTheTimerIsResetOnReentry()
188185
{
189186
var m = Fsm<State, Trigger>.Builder(State.IDLE)

NUnitTests/FluentSyntaxTest1.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
// ***************************************************************************
2727

2828
using System.Collections.Generic;
29+
using NUnit.Framework;
2930
using StateMachine;
3031
using StateMachine.Fluent.Api;
3132

@@ -102,7 +103,8 @@ private enum Trigger
102103
private readonly Dictionary<Button, Fsm<State, Trigger>> buttonMachines =
103104
new Dictionary<Button, Fsm<State, Trigger>>();
104105

105-
private void Main()
106+
[Test]
107+
public void Main()
106108
{
107109
var hero = new Hero();
108110
CreateMachineFor(Fsm<State, Trigger>.Builder(State.IDLE), new Button(), hero);
@@ -141,6 +143,8 @@ private void CreateMachineFor(BuilderFluent<State, Trigger> builder, Button butt
141143
}
142144
})
143145
.Build());
144-
}
146+
147+
string s = buttonMachines[button].GetPlantUml();
148+
}
145149
}
146150
}

NUnitTests/GameProgrammingPatterns1.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,6 @@ public void StateChangesStandingDuckingJumpingDiving()
7676
Assert.That(m.Current.Identifier, Is.EqualTo(State.JUMPING));
7777
m.Trigger(Trigger.DOWN);
7878
Assert.That(m.Current.Identifier, Is.EqualTo(State.DIVING));
79-
80-
var s = m.GetPlantUml();
8179
}
8280

8381
private enum WState

NUnitTests/NUnitTests.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,11 @@
4343
<Reference Include="System.Xml" />
4444
</ItemGroup>
4545
<ItemGroup>
46+
<Compile Include="Examples.cs" />
4647
<Compile Include="FluentSyntaxTest1.cs" />
4748
<Compile Include="FluentTests.cs" />
4849
<Compile Include="GameProgrammingPatterns1.cs" />
49-
<Compile Include="MonoGame\FluentTests.cs" />
50+
<Compile Include="FluentAfterTests.cs" />
5051
<Compile Include="Properties\AssemblyInfo.cs" />
5152
<Compile Include="SimpleTests.cs" />
5253
<Compile Include="TestTools.cs" />

README.md

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ We place those machines in a single class where they could 'talk with each other
5050

5151
### Example
5252

53-
![State-Machine-Image jumping-diving](https://github.com/UnterrainerInformatik/FiniteStateMachine/raw/master/StateMachine/docs/jumping_diving.png)
53+
![State-Machine-Image jumping-diving](https://github.com/UnterrainerInformatik/FiniteStateMachine/raw/master/docs/jumping_diving.png)
5454

5555
```C#
5656
Fsm<State, Trigger>.Builder(State.STANDING)
@@ -104,22 +104,26 @@ So the file ```GameProgrammingPatterns1.cs``` in the test-folder contains that m
104104

105105
This is a short paragraph that is about an example what configuring a state machine actually looks like.
106106

107+
![State-Machine-Image walking_running](https://github.com/UnterrainerInformatik/FiniteStateMachine/raw/master/docs/walking_running.png)
108+
109+
![State-Machine-Image standing_ducking](https://github.com/UnterrainerInformatik/FiniteStateMachine/raw/master/docs/standing_ducking.png)
110+
107111
```c#
108112
private enum VState { DUCKING, STANDING, JUMPING, DESCENDING, DIVING };
109113
private enum VTrigger { DOWN_RELEASED, DOWN_PRESSED, UP_PRESSED, SPACE_PRESSED };
110114

111115
private enum HState { STANDING, RUNNING_LEFT, RUNNING_RIGHT, WALKING_LEFT,
112116
WALKING_RIGHT, WALKING_DELAY_LEFT, WALKING_DELAY_RIGHT};
113-
private enum HTrigger { LEFT_PRESSED, LEFT_RELEASED, RIGHT_PRESSED, RIGHT_RELEASED };
117+
private enum HTrigger { LEFT_PRESSED, LEFT_RELEASED, RIGHT_PRESSED, RIGHT_RELEASED, SPACE_PRESSED };
114118

115-
private Fsm<State, Trigger> verticalMachine;
116-
private Fsm<State, Trigger> horizontalMachine;
119+
private Fsm<HState, VTrigger> verticalMachine;
120+
private Fsm<VState, HTrigger> horizontalMachine;
117121

118122
private Keys[] lastKeysPressed;
119123
private Hero hero;
120124

121125
public void main() {
122-
horizontalMachine = Fsm.Builder<HState, HTrigger>(STANDING)
126+
horizontalMachine = Fsm<HState, HTrigger>.Builder(STANDING)
123127
.State(STANDING)
124128
.TransitionTo(WALKING_LEFT).On(LEFT_PRESSED)
125129
.TransitionTo(WALKING_RIGHT).On(RIGHT_PRESSED)
@@ -183,7 +187,7 @@ public void main() {
183187
.GlobalTransitionTo(STANDING).On(SPACE_PRESSED)
184188
.Build();
185189

186-
verticalMachine = Fsm.Builder<VState, VTrigger>(STANDING)
190+
verticalMachine = Fsm<VState, VTrigger>.Builder(STANDING)
187191
.State(STANDING)
188192
.TransitionTo(DUCKING).On(DOWN_PRESSED)
189193
.TransitionTo(JUMPING).On(UP_PRESSED)
@@ -279,10 +283,10 @@ private void ConsoleOut(TransitioningValueArgs<string> e) {
279283
}
280284
```
281285

282-
283-
284286
Another example with a spell-button that has a refresh-time:
285287

288+
![State-Machine-Image button](https://github.com/UnterrainerInformatik/FiniteStateMachine/raw/master/docs/button.png)
289+
286290
```c#
287291
private enum State { IDLE, OVER, PRESSED, REFRESHING };
288292
private enum Trigger { MOUSE_CLICKED, MOUSE_RELEASED, MOUSE_OVER, MOUSE_LEAVE };
@@ -349,3 +353,4 @@ This functionality is achieved by updating the `After` conditions **before** eva
349353

350354
* [Fluent-State-Machine](https://github.com/Real-Serious-Games/Fluent-State-Machine) - by RoryDungan (MIT License)
351355
* [Nate](https://github.com/mmonteleone/nate) - by mmonteleone (MIT License)
356+
* [PlantUML - PlantText](https://www.planttext.com/) - PlantUML website. You can layout your PlantUML text and generate images out of them there.

docs/button.png

18.7 KB
Loading

docs/standing_ducking.png

20.2 KB
Loading

docs/walking_running.png

38.7 KB
Loading

0 commit comments

Comments
 (0)