-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathGameController.StateMachine.cs
More file actions
94 lines (82 loc) · 3.26 KB
/
GameController.StateMachine.cs
File metadata and controls
94 lines (82 loc) · 3.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
using Stateless;
namespace Microsoft.Samples.Kinect.InfraredBasics
{
public enum State
{
Startup,
Waiting,
Raised,
Raised_Failed,
Level_One,
Level_Two,
Level_Three,
Level_One_Failed,
Level_Two_Failed,
Level_Three_Failed,
Obtainit
};
public enum Trigger
{
Wingardium_Leviosa = Spell.Wingardium_Leviosa,
Smallo_Munchio = Spell.Smallo_Munchio,
Funsizarth = Spell.Funsizarth,
Bigcandius = Spell.Bigcandius,
Obtainit = Spell.Obtainit,
Dud = Spell.Dud,
Reparo = Spell.Reparo,
Times_Up = -1,
Startup_Complete = -2,
Obtainit_Complete = -3
}
public partial class GameController
{
public StateMachine<State, Trigger> InitMachine()
{
var machine = new StateMachine<State, Trigger>(State.Startup);
machine.Configure(State.Startup)
.Permit(Trigger.Startup_Complete, State.Waiting);
machine.Configure(State.Waiting)
.OnEntryAsync(onEnterWaiting)
.PermitIf(Trigger.Wingardium_Leviosa, State.Raised, () => !manual_override)
.Ignore(Trigger.Times_Up);
machine.Configure(State.Raised)
.OnEntryAsync(onEnterRaised)
.Permit(Trigger.Smallo_Munchio, State.Level_One)
.Permit(Trigger.Dud, State.Raised_Failed)
.Permit(Trigger.Times_Up, State.Raised_Failed);
machine.Configure(State.Raised_Failed)
.OnEntryAsync(onEnterReparo)
.Permit(Trigger.Reparo, State.Raised)
.Permit(Trigger.Times_Up, State.Waiting);
machine.Configure(State.Level_One)
.OnEntryAsync(onEnterLevelOne)
.Permit(Trigger.Funsizarth, State.Level_Two)
.Permit(Trigger.Dud, State.Level_One_Failed)
.Permit(Trigger.Times_Up, State.Level_One_Failed)
.Permit(Trigger.Obtainit, State.Obtainit);
machine.Configure(State.Level_One_Failed)
.OnEntryAsync(onEnterReparo)
.Permit(Trigger.Reparo, State.Level_One)
.Permit(Trigger.Times_Up, State.Waiting);
machine.Configure(State.Level_Two)
.OnEntryAsync(onEnterLevelTwo)
.Permit(Trigger.Bigcandius, State.Level_Three)
.Permit(Trigger.Dud, State.Level_Two_Failed)
.Permit(Trigger.Times_Up, State.Level_Two_Failed)
.Permit(Trigger.Obtainit, State.Obtainit);
machine.Configure(State.Level_Two_Failed)
.OnEntryAsync(onEnterReparo)
.Permit(Trigger.Reparo, State.Level_Two)
.Permit(Trigger.Times_Up, State.Waiting);
machine.Configure(State.Level_Three)
.OnEntryAsync(onEnterLevelThree)
.Permit(Trigger.Dud, State.Waiting)
.Permit(Trigger.Times_Up, State.Waiting)
.Permit(Trigger.Obtainit, State.Obtainit);
machine.Configure(State.Obtainit)
.OnEntryAsync(onEnterObtainit)
.Permit(Trigger.Obtainit_Complete, State.Waiting);
return machine;
}
}
}