public void Handle(ICollidable enemy, ICollidable pipe, CollisionDirection.DirectionTag direction)
        {
            if (typeof(IEnemy).IsInstanceOfType(enemy) && typeof(IPipe).IsInstanceOfType(pipe))
            {
                this.enemy = (Enemy)enemy;
                this.pipe  = (AbstractPipe)pipe;
                switch (direction)
                {
                case CollisionDirection.DirectionTag.Top:
                    this.enemy.Physics.yPosition = this.pipe.GetTopSide() - enemy.GetHeight();
                    this.enemy.Ground();
                    break;

                case CollisionDirection.DirectionTag.Bottom:
                    break;

                case CollisionDirection.DirectionTag.Left:
                    this.enemy.Physics.xPosition = this.pipe.GetLeftSide() - enemy.GetWidth();
                    this.enemy.ChangeDirection();
                    break;

                case CollisionDirection.DirectionTag.Right:
                    this.enemy.Physics.xPosition = this.pipe.GetRightSide() + 1;
                    this.enemy.ChangeDirection();
                    break;

                default:
                    Console.WriteLine(Config.GetCollisionResolutionException() + GetType().ToString());
                    break;
                }
            }
        }
 public void Handle(ICollidable object1, ICollidable object2, CollisionDirection.DirectionTag direction)
 {
     if (typeof(Fireball).IsInstanceOfType(object1) && typeof(AbstractPipe).IsInstanceOfType(object2))
     {
         fireball = (Fireball)object1;
         pipe     = (AbstractPipe)object2;
         fireball.Explode();
         GameManager.Instance.Remove(fireball);
     }
 }
예제 #3
0
        public void Handle(ICollidable player, ICollidable pipe, CollisionDirection.DirectionTag direction)
        {
            if (typeof(IMario).IsInstanceOfType(player) && typeof(AbstractPipe).IsInstanceOfType(pipe))
            {
                this.player = (IMario)player;
                this.pipe   = (AbstractPipe)pipe;

                switch (direction)
                {
                case CollisionDirection.DirectionTag.Top:
                    this.player.SetYPosition(this.pipe.GetTopSide() - player.GetHeight());
                    if (typeof(TeleportationPipe).IsInstanceOfType(pipe) && this.player.IsCrouching())
                    {
                        ((TeleportationPipe)pipe).Teleport();
                    }
                    else
                    {
                        this.player.Ground();
                    }
                    break;

                case CollisionDirection.DirectionTag.Bottom:
                    this.player.SetYPosition(this.pipe.GetBottomSide() + 1);
                    break;

                case CollisionDirection.DirectionTag.Left:
                    this.player.SetXPosition(this.pipe.GetLeftSide() - player.GetWidth());
                    if (typeof(LeftFacingPipe).IsInstanceOfType(this.pipe) && this.player.IsCrouching())
                    {
                        //IsCrouching need to be changed to IsMovingRight
                        ((LeftFacingPipe)pipe).Teleport();
                    }
                    break;

                case CollisionDirection.DirectionTag.Right:
                    this.player.SetXPosition(this.pipe.GetRightSide() + 1);
                    break;

                default:
                    Console.WriteLine(Config.GetCollisionResolutionException() + GetType().ToString());
                    break;
                }
            }
        }
예제 #4
0
        public void Handle(ICollidable player, ICollidable pipe, CollisionDirection.DirectionTag direction)
        {
            if (typeof(IMario).IsInstanceOfType(player) && typeof(AbstractPipe).IsInstanceOfType(pipe))
            {
                this.player = (IMario)player;
                this.pipe   = (AbstractPipe)pipe;

                switch (direction)
                {
                case CollisionDirection.DirectionTag.Top:
                    this.player.SetYPosition(this.pipe.GetTopSide() - player.GetHeight());
                    if (typeof(TeleportationPipe).IsInstanceOfType(pipe) && this.player.IsCrouching())
                    {
                        ((TeleportationPipe)pipe).Teleport();
                    }
                    else
                    {
                        this.player.Ground();
                    }
                    break;

                case CollisionDirection.DirectionTag.Bottom:
                    this.player.SetYPosition(this.pipe.GetBottomSide() + 1);
                    break;

                case CollisionDirection.DirectionTag.Left:
                    this.player.SetXPosition(this.pipe.GetLeftSide() - player.GetWidth());
                    break;

                case CollisionDirection.DirectionTag.Right:
                    this.player.SetXPosition(this.pipe.GetRightSide() + 1);
                    break;

                default:
                    Console.WriteLine("Unexpected Direction Received in Collision.PlayerPipeCollisionResolution");
                    break;
                }
            }
        }
예제 #5
0
        protected override async Task PushToPipeAsync(CancellationToken cancellationToken, TConsumerValue entity, PipelineMetadata pipelineMetadata, AbstractPipe <TConsumerValue> pipe)
        {
            await pipe.Head.PushAsync(cancellationToken, entity, pipelineMetadata).ConfigureAwait(false);

            await _stats.Metric().PipelineLatency(pipelineMetadata).ConfigureAwait(false);
        }