void StateMachine_OnTransition(VMEODPaperChaseState from, VMEODPaperChaseState to) { Lobby.Broadcast("paperchase_state", ((byte)to).ToString()); if (Controller == null) { return; } switch (to) { case VMEODPaperChaseState.Lobby: ResetGame(); BroadcastPlayerLetters(); break; case VMEODPaperChaseState.StartRound: ResetGame(); CurrentCombination = Combinations[Random.Next(0, Combinations.Length)]; StateMachine.TransitionTo(VMEODPaperChaseState.WaitingForThreeLetters); break; case VMEODPaperChaseState.WaitingForThreeLetters: PreviousMatches = Matches; BroadcastPlayerLetters(); Controller.SendOBJEvent(new VMEODEvent((short)VMEODPaperChaseObjEvent.Idle)); break; case VMEODPaperChaseState.ThreeLettersProvided: Matches = 0; for (var i = 0; i < 3; i++) { var playerData = Lobby.GetSlotData(i); if (playerData.Letter == CurrentCombination[i]) { Matches++; } Controller.SendOBJEvent(new VMEODEvent((short)VMEODPaperChaseObjEvent.SetLetter, (short)(playerData.Letter | (short)((i + 1) << 8)))); //lo: letter, hi: FREESO player id playerData.PreviousLetter = playerData.Letter; playerData.Letter = null; } Controller.SendOBJEvent(new VMEODEvent((short)VMEODPaperChaseObjEvent.SetResult, Matches)); StateMachine.TransitionTo(VMEODPaperChaseState.CheckingResult); break; case VMEODPaperChaseState.CheckingResult: Ticks = 0; break; case VMEODPaperChaseState.CheckResult: Ticks = 0; Controller.SendOBJEvent(new VMEODEvent((short)VMEODPaperChaseObjEvent.ShowResult)); Lobby.Broadcast("paperchase_result", Matches.ToString()); break; } }
private void InitEOD() { State = VMEODPaperChaseState.Lobby; DigestState(); PlaintextHandlers["paperchase_show"] = Show; PlaintextHandlers["paperchase_players"] = Lobby.UpdatePlayers; PlaintextHandlers["paperchase_state"] = SetState; PlaintextHandlers["paperchase_letters"] = SetLetters; PlaintextHandlers["paperchase_result"] = SetResult; }
private void SetState(string evt, string body) { State = (VMEODPaperChaseState)int.Parse(body); DigestState(); }