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(); } } }
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); }
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; } }