Controller A - Target State Machine
This state machine controls the state of the target 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 target state machine.
InitTargetFSM
CurrentState = FirstTInit
RunTargetFSM
switch(CurrentState)
case(FirstTInit)
if ThisEvent = ES_INIT
NextState = InitTState
case(InitTState)
if ThisEvent = ES_Begin
NextState = BothNotActive
case (BothNotActive)
if ThisEvent = AccessCardRemoved or GameTimeout
NextState = InitTState
else if ThisEvent = ACovered
Brighten A LEDs
NextState = AHit
else if ThisEvent = BCovered
NextState = BHit
case (AHit)
if ThisEvent = BCovered
Post BothCovered to AMainSM
NextState = BothHit
else if ThisEvent = AUncovered
NextState = BothNotActive
Dim A LEDs
else if ThisEvent = AccessCardRemoved or GameTimeout
NextState = InitTState
case (BHit)
if ThisEvent = ACovered
Post BothCovered to AMainSM
NextState = BothHit
Brighten A LEDs
else if ThisEvent = BUncovered
NextState = BothNotActive
else if ThisEvent = AccessCardRemoved or GameTimeout
NextState = InitTState
case (BothHit)
if ThisEvent = BUncovered
NextState = AHit
else if ThisEvent = AUncovered
NextState = BHit
Dim A LEDs
else if ThisEvent = AccessCardRemoved or GameTimeout
NextState = InitTState
CurrentState = NextState
CurrentState = FirstTInit
RunTargetFSM
switch(CurrentState)
case(FirstTInit)
if ThisEvent = ES_INIT
NextState = InitTState
case(InitTState)
if ThisEvent = ES_Begin
NextState = BothNotActive
case (BothNotActive)
if ThisEvent = AccessCardRemoved or GameTimeout
NextState = InitTState
else if ThisEvent = ACovered
Brighten A LEDs
NextState = AHit
else if ThisEvent = BCovered
NextState = BHit
case (AHit)
if ThisEvent = BCovered
Post BothCovered to AMainSM
NextState = BothHit
else if ThisEvent = AUncovered
NextState = BothNotActive
Dim A LEDs
else if ThisEvent = AccessCardRemoved or GameTimeout
NextState = InitTState
case (BHit)
if ThisEvent = ACovered
Post BothCovered to AMainSM
NextState = BothHit
Brighten A LEDs
else if ThisEvent = BUncovered
NextState = BothNotActive
else if ThisEvent = AccessCardRemoved or GameTimeout
NextState = InitTState
case (BothHit)
if ThisEvent = BUncovered
NextState = AHit
else if ThisEvent = AUncovered
NextState = BHit
Dim A LEDs
else if ThisEvent = AccessCardRemoved or GameTimeout
NextState = InitTState
CurrentState = NextState