Controller A - Balance State Machine
This state machine controls the state of the balance system for the whole game and posts events depending on the change of state. Events from both Controller A and B affect the state of the balance state machine.
InitBalanceFSM
CurrentState = FirstBInit
RunBalanceFSM
switch(CurrentState)
case(FirstBInit)
if ThisEvent = ES_Init
NextState = InitBState
case(InitBState)
if ThisEvent = Begin
if A is Off Balance
NextState = AOffBalWait
else
NextState = AOnBalWait
case(AOffBalWait)
if ThisEvent = BRebalanced
NextState = BOnBalance
else if ThisEvent = BUnbalanced
NextState = BothOffBalance
else if ThseEvent = WentOnBalance
NextState = AOnBalWait
case(AOnBalWait)
if ThisEvent = BUnbalanced
NextState = AOnBalance
else if ThisEvent = BRebalanced
NextState = BothOnBalance
else if ThisEvent = WentOffBalance
NextState = AOffBalWait
case (BothOffBalance)
if ThisEvent = ARebalanced
NextState = AOnBalance
MainState = QueryAMainState
if MainState = WaitingTargetSynchro or OffBalanceSynchro
vibration off else if ThisEvent = BRebalanced
NextState = BOnBalance
else if ThisEvent is AccessCardRemoved or GameTimeout
NextState = InitBState
case (AOnBalance)
if ThisEvent is AUnBalanced
NextState = BothOFfBalance
MainState = QueryAMainState
if MainState = WaitingTargetSynchro or OffBalanceSynchro
vibration on
else if ThisEvent is BRebalanced
Post BothRebalanced to AMainSM
NextState = BothOnBalance
else if ThisEvent is AccessCardRemoved or GameTimeout
NextState = InitBState
case (BothOnBalance)
if ThisEvent is BUnbalanced
NextState = AOnBalance
Post Unbalanced event to AMainSM
else if ThisEvent is AUnBalanced
NextState = BOnBalance
Post Unbalanced event to AMainSM
MainState = QueryAMainState
if MainState = WaitingTargetSynchro or OffBalanceSynchro
vibration on
else if ThisEvent is AccessCardRemoved or GameTimeout
NextState = InitBState
case (BOnBalance)
if ThisEvent is BUnbalanced
NextState = BothOffBalance
else if ThisEvent is ARebalanced
NextState = BothOnBalance
MainState = QueryAMainState
if MainState = WaitingTargetSynchro or OffBalanceSynchro
vibration off
else if ThisEvent is AccessCardRemoved or GameTimeout
NextState = InitBState
CurrentState = NextState
CurrentState = FirstBInit
RunBalanceFSM
switch(CurrentState)
case(FirstBInit)
if ThisEvent = ES_Init
NextState = InitBState
case(InitBState)
if ThisEvent = Begin
if A is Off Balance
NextState = AOffBalWait
else
NextState = AOnBalWait
case(AOffBalWait)
if ThisEvent = BRebalanced
NextState = BOnBalance
else if ThisEvent = BUnbalanced
NextState = BothOffBalance
else if ThseEvent = WentOnBalance
NextState = AOnBalWait
case(AOnBalWait)
if ThisEvent = BUnbalanced
NextState = AOnBalance
else if ThisEvent = BRebalanced
NextState = BothOnBalance
else if ThisEvent = WentOffBalance
NextState = AOffBalWait
case (BothOffBalance)
if ThisEvent = ARebalanced
NextState = AOnBalance
MainState = QueryAMainState
if MainState = WaitingTargetSynchro or OffBalanceSynchro
vibration off else if ThisEvent = BRebalanced
NextState = BOnBalance
else if ThisEvent is AccessCardRemoved or GameTimeout
NextState = InitBState
case (AOnBalance)
if ThisEvent is AUnBalanced
NextState = BothOFfBalance
MainState = QueryAMainState
if MainState = WaitingTargetSynchro or OffBalanceSynchro
vibration on
else if ThisEvent is BRebalanced
Post BothRebalanced to AMainSM
NextState = BothOnBalance
else if ThisEvent is AccessCardRemoved or GameTimeout
NextState = InitBState
case (BothOnBalance)
if ThisEvent is BUnbalanced
NextState = AOnBalance
Post Unbalanced event to AMainSM
else if ThisEvent is AUnBalanced
NextState = BOnBalance
Post Unbalanced event to AMainSM
MainState = QueryAMainState
if MainState = WaitingTargetSynchro or OffBalanceSynchro
vibration on
else if ThisEvent is AccessCardRemoved or GameTimeout
NextState = InitBState
case (BOnBalance)
if ThisEvent is BUnbalanced
NextState = BothOffBalance
else if ThisEvent is ARebalanced
NextState = BothOnBalance
MainState = QueryAMainState
if MainState = WaitingTargetSynchro or OffBalanceSynchro
vibration off
else if ThisEvent is AccessCardRemoved or GameTimeout
NextState = InitBState
CurrentState = NextState