示例#1
0
        private void HandlePowerupObtain(PowerupRecievedPacket obj)
        {
            var playerToPowerup = ServiceManager.RetrieveEntityByID(obj.EntityID);
            var recievType      = obj.Powerup.GetType();

            // Check if the player is null
            if (playerToPowerup != null)
            {
                var toPoweurp =
                    (MovementModifierComponent)playerToPowerup.GetComponent(typeof(MovementModifierComponent));

                if (recievType == typeof(MovementModifierComponent))
                {
                    toPoweurp.Strength += obj.Powerup.Strength;
                }
            }
        }
示例#2
0
        /// <summary>
        /// Handles movement for a particular instance
        /// </summary>
        public void HandleMovement(NotifyMovementPacket notifyMovementPacket)
        {
            var sender = RetrieveSender(notifyMovementPacket);

            if (sender == null)
            {
                return;
            }

            var transformComponent = (TransformComponent)sender.GetComponent(typeof(TransformComponent));


            transformComponent.LastLocalPosition = transformComponent.LocalPosition;
            transformComponent.LocalPosition     = notifyMovementPacket.Location;
            transformComponent.ServerPosition    = notifyMovementPacket.Location;

            foreach (var player in _simulationState.Entities)
            {
                // Grab the connection
                var playerComponent = (PlayerComponent)player.GetComponent(typeof(PlayerComponent));

                if (playerComponent == null)
                {
                    continue;
                }


                var connection = playerComponent.Connection;

                if (connection != notifyMovementPacket.Sender)
                {
                    var broadcastPacket = new MovementRecievedPacket(notifyMovementPacket.Velocity,
                                                                     notifyMovementPacket.Location, sender.ID);

                    if (connection != null)
                    {
                        ClientNetworkManager.Instance.SendPacket(broadcastPacket, connection);
                    }
                }


                foreach (var powerup in _simulationState.Entities)
                {
                    if (powerup.HasComponent(typeof(PowerUpCollectionComponent)))
                    {
                        var transformPoweurp = (TransformComponent)powerup.GetComponent(typeof(TransformComponent));

                        Rectangle playerBox  = new Rectangle((int)(transformComponent.LocalPosition.X + 13), (int)(transformComponent.LocalPosition.Y + 45), 24, 20);
                        Rectangle powerupBox = new Rectangle((int)transformPoweurp.LocalPosition.X, (int)transformPoweurp.LocalPosition.Y, 32, 32);


                        if (playerBox.Intersects(powerupBox))
                        {
                            // Kill thy entity
                            _serviceContainer.RemoveEntity(powerup);

                            // Increase bombs
                            var power      = (PowerUpCollectionComponent)powerup.GetComponent(typeof(PowerUpCollectionComponent));
                            var powerType  = power.PowerUps[0];
                            var powerValue = power.PowerUps[0].Strength;

                            var playerPower = (PowerUpComponent)player.GetComponent(powerType.GetType());
                            playerPower.Strength += powerValue;

                            // Notify the player of their new powerup
                            var packet = new PowerupRecievedPacket(powerType, player.ID);
                            ClientNetworkManager.Instance.SendPacket(packet, notifyMovementPacket.Sender);
                        }
                    }
                }
            }



            // Now that you've moved, should check to see if any poweurps need to be awarded
        }