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 HandleBallUpdate(BallUpdateMessage update) { if (!GameRunning) { return; } //transform into local space Vector2 position = Ball.RotatePoint(update.Position, 180); Vector2 velocity = Ball.RotatePoint(update.Velocity, 180); ball.Position = position; ball.Velocity = velocity; ballGO.SetActive(true); }