예제 #1
0
        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);
        }