Grupo Host
O "host" é responsável por realmente executar o jogo. Sync Object faz a maioria do trabalho mantendo os clientes atualizados. O "host" lida com a lógica real do jogo, então os eventos do Host são um pouco mais complicados do que para os clientes.
Primeiramente, quando formos o "host", estaremos apenas à espera que outro jogador se junte. Portanto, na primeira vez que On peer connected disparar, podemos começar o jogo. Quando um cliente conecta, primeiro criamos um "paddle" para ele à direita da tela e o associamos ao cliente que está entrando. O jogo deve dizer "Get ready...", aguardar 3 segundos, dizer "Go!" durante 1 segundo, em seguida, mudar para a visualização do resultado (que é o estado do jogo "started"). Quando o jogo começa também habilitamos o movimento de bala da bola e o definimos em um ângulo randômico. Lembre-se que apenas o "host" realmente move o objeto; Sync object acompanha-o e atualiza-o para os clientes, e o comportamento também só deve ser habilitado no "host", pois caso contrário, poderá entrar em conflito com Sync object no cliente.
O "host" utiliza uma função para definir o estado do jogo. Isso ocorre porque mudando simplesmente a variável GameState afetaria apenas o "host", e os cientes nunca descobririam. Esta função permite-nos tanto mudar a variável quanto enviar uma mensagem para o cliente indicando que o estado do jogo mudou. O cliente recebe isto e atualiza sua própria variável GameState. Isso mantém a variável atualizada para todos no jogo.
Cada variável peerid dos "paddles" é definida para o ID do jogador correspondente, e podemos usar isso para separar o objeto dos jogadores individualmente. Uma vez que este é um jogo para dois jogadores, o ID dos clientes ou é MyID e é nosso próprio "paddle", ou é diferente e é o "paddle" do outro jogador. Precisamos avançar o "paddle" do outro jogador para onde eles o posicionam, portanto, escolhemos seu "paddle" e definimos para seu valor "y" de entrada. O valor de entrada mais recente para um cliente é obtido com a expressão PeerState.
Apenas o "host" cuida da lógica do jogo, como lidar com colisões. Neste caso, o "host" é responsável pelo rebate da bola pelos "paddles"; isso acontece automaticamente porque os "paddles" são sólidos e o comportamento Bala está definido para ricochetear em sólidos (lembre-se o cliente tem o comportamento de bala desativado então isso acontece somente no host). Cada vez que ela ricocheteia, nós também aumentamos sua velocidade, assim o jogo fica mais difícil.
Eventos 29 e 30 rastreiam o placar. Se a bola vai para fora do lado esquerdo da tela (X <0), adiciona 1 a pontuação do cliente (o jogador à direita), e repõe a bola. Se a bola vai para fora da direita da tela (X> LayoutWidth), adicionar 1 a pontuação do "host" (o jogador à esquerda), e repõe a bola.
Isso é tudo para os eventos específicos do "host".