private void MovementRecieved(MovementRecievedPacket obj) { Entity player = null; foreach (var entity in ServiceManager.Entities) { if (entity.ID == obj.EntityID) { player = entity; } } if (player != null) { var transformComponent = (TransformComponent)player.GetComponent(typeof(TransformComponent)); transformComponent.Velocity = obj.Velocity; if (transformComponent.Velocity.X != transformComponent.Velocity.Y) { if (obj.Velocity.X < 0) { transformComponent.DirectionalCache = DirectionalCache.Left; } if (obj.Velocity.X > 0) { transformComponent.DirectionalCache = DirectionalCache.Right; } if (obj.Velocity.Y > 0) { transformComponent.DirectionalCache = DirectionalCache.Down; } if (obj.Velocity.Y < 0) { transformComponent.DirectionalCache = DirectionalCache.Up; } } } // Retreieve an interpolator var interpolator = _entityInterpolators[obj.EntityID]; interpolator.ResetProgress(obj.Location); }
/// <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 }