RunShootingSM If current state is Aligning Execute During function for Aligning. If an event is active If event is event Aligned2Beacon Next State is Preparing2Shoot Mark that we are taking a transition Consume event Else Return CurrentEvent If current state is Preparing2Shoot Execute During function for Preparing2Shoot. If an event is active If event is event PrepShooterDone Next State is QueryScore Mark that we are taking a transition Consume event Else Return CurrentEvent If current state is QueryScore Execute During function for QueryScore. If an event is active If event is event CommArrayReady Query the LOC Get Game Score if previous score = new score Next State is Preparing2Shoot Mark that we are taking a transition Consume event else if new score greater than previous score Return Shooting Done event Else Return CurrentEvent DuringStateAligning On entry Query LOC Get current game score Save current time Start Rotating Post StartLooking4Beacon event to detect beacon service On exit Stop drive train calculate total align time DuringStatePreparing2Shoot On entry Post PrepShooter event to ShooterService Stop drivetrain On exit Stop drivetrain DuringStateQueryingScore On entry Request status bytes Stop drive train On exit Stop drive train