public TennisRoundRules() { _fsm = new FiniteStateMachine(); _hitLimit = 1; _bounceLimit = 1; _hitCount = 0; _bounceCount = 0; State to1 = new State("To1"); State to2 = new State("To2"); State win1 = new State("Win1"); State win2 = new State("Win2"); ConditionalState bounce1 = new ConditionalState("Bounce1", IsBounceLegal); ConditionalState hit1 = new ConditionalState("Hit1", IsHitLegal); ConditionalState bounce2 = new ConditionalState("Bounce2", IsBounceLegal); ConditionalState hit2 = new ConditionalState("Hit2", IsHitLegal); ConditionalState outside1 = new ConditionalState("Outside1", HasBounced); ConditionalState outside2 = new ConditionalState("Outside2", HasBounced); win1.OnEnter += Winner; win2.OnEnter += Winner; to1.AddEdge("Bounce2", win1); to1.AddEdge("Outside", outside1); to1.AddEdge("Hit2", hit2); to1.AddEdge("Bounce1", bounce1); to1.AddEdge("Hit1", to2); bounce1.AddEdge("true", to1); bounce1.AddEdge("false", win2); hit1.AddEdge("true", to2); hit1.AddEdge("false", win2); outside1.AddEdge("true", win2); outside1.AddEdge("false", win1); to2.AddEdge("Bounce1", win2); to2.AddEdge("Outside", outside2); to2.AddEdge("Hit1", hit1); to2.AddEdge("Bounce2", bounce2); to2.AddEdge("Hit2", to1); bounce2.AddEdge("true", to2); bounce2.AddEdge("false", win1); hit2.AddEdge("true", to1); hit2.AddEdge("false", win1); outside2.AddEdge("true", win1); outside2.AddEdge("false", win2); _fsm.Add(to1); _fsm.Add(to2); _fsm.Add(win1); _fsm.Add(win2); _fsm.Add(bounce1); _fsm.Add(hit1); _fsm.Add(bounce2); _fsm.Add(hit2); _fsm.Add(outside1); _fsm.Add(outside2); }
public static void Test1() { int value = 5; State s1 = new State("s1"); State s2 = new State("s2"); State s3 = new State("s3"); State s4 = new State("s4"); State s5 = new ConditionalState("s5", (state) => value < 10); s1.AddEdge("e1", s2); s1.AddEdge("e2", s3); s1.AddEdge("e3", s5); s2.AddEdge("e5", s4); s3.AddEdge("e3", s2); s3.AddEdge("e4", s4); s4.AddEdge("e1", s1); s5.AddEdge("true", s2); s5.AddEdge("false", s4); verbose = true; result = true; if (verbose) Debug.Log("Start test 1"); State cur = s1; cur = cur.Step("e2"); print("s1 =e2=> s3", cur == s3); cur = cur.Step("e3"); print("s3 =e3=> s2", cur == s2); cur = cur.Step("e5"); print("s2 =e5=> s4", cur == s4); cur = cur.Step("e1"); print("s4 =e1=> s1", cur == s1); cur = cur.Step("e2"); print("s1 =e2=> s3", cur == s3); cur = cur.Step("e4"); print("s3 =e4=> s4", cur == s4); Debug.Log("Result test 1 : " + result); result = true; if (verbose) Debug.Log("Start test 2"); value = 5; cur = s1; cur = cur.Step("e3"); print("s1 =e3/if(5<10)=> s2 ", cur == s2); value = 15; cur = s1; cur = cur.Step("e3"); print("s1 =e3/if(15<10)=> s4", cur == s4); Debug.Log("Result test 2 : " + result); }