Пример #1
0
        private static void OnReserveAreaRequest(ref ReserveAreaMsg msg, MyNetworkClient sender)
        {
            if (!Sync.IsServer)
            {
                return;
            }

            if (!m_reservedAreas.ContainsKey(msg.ReservationName))
            {
                m_reservedAreas.Add(msg.ReservationName, new Dictionary <long, ReservedAreaData>());
            }

            var  reservations      = m_reservedAreas[msg.ReservationName];
            bool reservedBySomeone = false;

            MyPlayer.PlayerId requestId = new MyPlayer.PlayerId(sender.SteamUserId, msg.SenderSerialId);

            foreach (var r in reservations)
            {
                var  currentReservation = r.Value;
                var  sqDist             = (currentReservation.WorldPosition - msg.Position).LengthSquared();
                bool inRadius           = sqDist <= currentReservation.Radius * currentReservation.Radius;

                if (inRadius)
                {
                    reservedBySomeone = true;
                    break;
                }
            }

            if (!reservedBySomeone)
            {
                reservations[AreaReservationCounter++] = new ReservedAreaData()
                {
                    WorldPosition    = msg.Position,
                    Radius           = msg.Radius,
                    ReservationTimer = MySandboxGame.Static.UpdateTime + MyTimeSpan.FromMiliseconds(msg.ReservationTimeMs),
                    ReserverId       = requestId,
                };

                var allMsg = new ReserveAreaAllMsg()
                {
                    Id              = AreaReservationCounter,
                    Position        = msg.Position,
                    Radius          = msg.Radius,
                    ReservationName = msg.ReservationName,
                };

                Sync.Layer.SendMessageToAll(ref allMsg, MyTransportMessageEnum.Success);
                Sync.Layer.SendMessage(ref msg, sender.SteamUserId, MyTransportMessageEnum.Success);
            }
            else
            {
                Sync.Layer.SendMessage(ref msg, sender.SteamUserId, MyTransportMessageEnum.Failure);
            }
        }
Пример #2
0
        private static void OnReserveAreaAllSuccess(ref ReserveAreaAllMsg msg, MyNetworkClient sender)
        {
            if (!m_reservedAreas.ContainsKey(msg.ReservationName))
            {
                m_reservedAreas[msg.ReservationName] = new Dictionary <long, ReservedAreaData>();
            }
            var reservations = m_reservedAreas[msg.ReservationName];

            reservations.Add(msg.Id, new ReservedAreaData()
            {
                WorldPosition = msg.Position, Radius = msg.Radius
            });
        }
 private static void OnReserveAreaAllSuccess(ref ReserveAreaAllMsg msg, MyNetworkClient sender)
 {
     if (!m_reservedAreas.ContainsKey(msg.ReservationName))
         m_reservedAreas[msg.ReservationName] = new Dictionary<long, ReservedAreaData>();
     var reservations = m_reservedAreas[msg.ReservationName];
     reservations.Add(msg.Id, new ReservedAreaData() { WorldPosition = msg.Position, Radius = msg.Radius });
 }
        private static void OnReserveAreaRequest(ref ReserveAreaMsg msg, MyNetworkClient sender)
        {
            if (!Sync.IsServer)
                return;

            if (!m_reservedAreas.ContainsKey(msg.ReservationName))
                m_reservedAreas.Add(msg.ReservationName, new Dictionary<long, ReservedAreaData>());

            var reservations = m_reservedAreas[msg.ReservationName];
            bool reservedBySomeone = false;
            MyPlayer.PlayerId requestId = new MyPlayer.PlayerId(sender.SteamUserId, msg.SenderSerialId);

            foreach (var r in reservations)
            {
                var currentReservation = r.Value;
                var sqDist = (currentReservation.WorldPosition - msg.Position).LengthSquared();
                bool inRadius = sqDist <= currentReservation.Radius * currentReservation.Radius; 
                
                if (inRadius)
                {
                    reservedBySomeone = true;
                    break;
                }
            }

            if (!reservedBySomeone)
            {
                reservations[AreaReservationCounter++] = new ReservedAreaData()
                {
                    WorldPosition = msg.Position,
                    Radius = msg.Radius,
                    ReservationTimer = MySandboxGame.Static.UpdateTime + MyTimeSpan.FromMiliseconds(msg.ReservationTimeMs),
                    ReserverId = requestId,
                };

                var allMsg = new ReserveAreaAllMsg()
                {
                    Id = AreaReservationCounter,
                    Position = msg.Position,
                    Radius = msg.Radius,
                    ReservationName = msg.ReservationName,
                };

                Sync.Layer.SendMessageToAll(ref allMsg, MyTransportMessageEnum.Success);
                Sync.Layer.SendMessage(ref msg, sender.SteamUserId, MyTransportMessageEnum.Success);
            }
            else
            {
                Sync.Layer.SendMessage(ref msg, sender.SteamUserId, MyTransportMessageEnum.Failure);
            }

            
        }