protected override void Update() { if (!GameRunning) { return; } if (clockRunning) { clock -= Time.deltaTime; if (authoritative) { BallUpdateMessage ballUpdate = new BallUpdateMessage(); ballUpdate.Position = ball.Position; ballUpdate.Velocity = ball.Velocity; Manager.Network.Engine.Send(ballUpdate, LiteNetLib.SendOptions.Sequenced); } } PaddleUpdateMessage paddleUpdate = new PaddleUpdateMessage(); paddleUpdate.Position = localPaddle.Position; paddleUpdate.Velocity = localPaddle.Velocity; paddleUpdate.Input = localPaddle.MoveDir; Manager.Network.Engine.Send(paddleUpdate, LiteNetLib.SendOptions.Sequenced); if (clock <= 0f) { if (authoritative) { if (localScore == remoteScore) { EndGame(Player.None); } else if (localScore > remoteScore) { EndGame(Player.Server); } else if (remoteScore > localScore) { EndGame(Player.Client); } } } else { int time = Mathf.Max(Mathf.RoundToInt(clock), 0); Manager.UI.Clock.text = string.Format("{0}:{1:00}", time / 60, time % 60); } }
public void HandlePaddleUpdate(PaddleUpdateMessage update) { float input = -update.Input; float position = -update.Position; float velocity = -update.Velocity; remotePaddle.Move(input); if (!authoritative) { remotePaddle.Velocity = -velocity; if (Mathf.Abs(remotePaddle.Position - position) > 0.25f) { remotePaddle.Position = position; } } }