Esempio n. 1
0
 public void DisableVPipes(ArrayList pipePosition)
 {
     if (pipePosition is null)
     {
         throw new ArgumentNullException(nameof(pipePosition));
     }
     foreach (ICharacter character in CharacterList)
     {
         if (pipePosition.Contains(character.GetMinPosition.X) && character.Type == Sprint5Main.CharacterType.Pipe)
         {
             PipeCharacter pipe = (PipeCharacter)character;
             pipe.MarioGetInside();
         }
     }
 }
Esempio n. 2
0
        public void ByPassMario()
        {
            float XPosition = stage.CameraBoundary.X;

            //select the nearest VPipe which are on the right of Mario.
            foreach (ICharacter character in CharacterList)
            {
                if (character.Type == Sprint5Main.CharacterType.Pipe)
                {
                    PipeCharacter pipe = (PipeCharacter)character;
                    if ((pipe.PType == PipeCharacter.PipeType.VPipe) &&
                        (Mario.GetMaxPosition.X < pipe.GetMinPosition.X) && (pipe.GetMinPosition.X < XPosition))
                    {
                        XPosition = pipe.GetMinPosition.X;
                    }
                }
            }
            //Move Mario to the next VPipe
            Mario.Parameters.SetPosition(XPosition + 2, Mario.Parameters.Position.Y);
            //Add this pipe into list to disable later.
            Mario.DivedPipe.Add(XPosition);
        }
Esempio n. 3
0
        public void CollideWithPipe(PipeCharacter pipe, bool upOrDown, bool movingDown)
        {
            if (Parameters.Position.X >= pipe?.GetMinPosition.X + 2 && GetMaxPosition.X <= pipe.GetMaxPosition.X - 2)
            {
                OnPipe = true;
            }
            switch (pipe?.PType)
            {
            case PipeCharacter.PipeType.Pipe: CollideWithBlock(upOrDown, movingDown); break;

            case PipeCharacter.PipeType.VPipe:
                if (upOrDown && OnPipePressDown && OnPipe)
                {
                    Mario.DiveIn(pipe.GetMinPosition.Y); pipe.MarioGetInside();
                    DivedPipe.Add(pipe.GetMinPosition.X); SoundFactory.Instance.GetIntoPipe();
                }
                else
                {
                    CollideWithBlock(upOrDown, movingDown);
                }
                break;

            case PipeCharacter.PipeType.HPipe:
                if (!upOrDown && Parameters.Velocity.X > 0 && GetMinPosition.Y >= pipe.GetMinPosition.Y &&
                    GetMaxPosition.Y <= pipe.GetMaxPosition.X)
                {
                    Mario.DiveInRight(pipe.GetMinPosition.X, pipe.GetMaxPosition.Y);
                    SoundFactory.Instance.GetIntoPipe();
                }
                else
                {
                    CollideWithBlock(upOrDown, movingDown);
                }
                break;

            default: break;
            }
        }