private void ReviveShip(Ship ship) { var clock = _scene.GetComponent<IEnvironment>().Clock; ship.x = X_MIN + (float)(_rand.NextDouble() * (X_MAX - X_MIN)); ship.y = Y_MIN + (float)(_rand.NextDouble() * (Y_MAX - Y_MIN)); ship.PositionUpdatedOn = clock; _scene.GetComponent<ILogger>().Info("logic.respawn", "Trying to find peer for {0}", ship.player.Id); var peer = _scene.RemotePeers.FirstOrDefault(p => p.Id == ship.player.Id); if (peer != null) { _scene.GetComponent<ILogger>().Info("logic.respawn", "Sending respawn position to {0}", peer.Id); _scene.Send(new MatchPeerFilter(peer), "ship.forcePositionUpdate", (s) => { using (var writer = new BinaryWriter(s, Encoding.UTF8, true)) { writer.Write(ship.id); writer.Write(ship.x); writer.Write(ship.y); writer.Write(ship.rot); writer.Write(ship.PositionUpdatedOn); } }, PacketPriority.MEDIUM_PRIORITY, PacketReliability.RELIABLE); } ship.ChangePv(ship.maxPv - ship.currentPv); }