/// <summary> /// Check if player enters a pipe. /// </summary> protected void CheckEnterPipe() { if (IsGrounded() && !isEnteringPipe && (controlDown || controlRight)) { int y = (int)Math.Ceiling(Position.Y) + spriteFrame.Rectangle.Height; int leftX = (int)Math.Floor(Position.X - 5) + spriteFrame.Rectangle.Width / 2; int rightX = (int)Math.Ceiling(Position.X + 5) + spriteFrame.Rectangle.Width / 2; foreach (var pipe in pipes) { if (pipe.PipeType == Pipe.PipeTypes.Entrance) { if ((pipe.Orientation == Pipe.PipeOrientation.Horizontal && controlDown && pipe.Contains(leftX, y) && pipe.Contains(rightX, y)) || (pipe.Orientation == Pipe.PipeOrientation.Vertical && controlRight && pipe.Contains(rightX + 1, y - 8))) { pipeType = pipe.PipeType; pipeOrientation = pipe.Orientation; pipeDestination = pipe.Destination; pipeAction = pipe.Action; enteringPipeCount = 0; pipeSlowerCounter = 0; if (pipeOrientation == Pipe.PipeOrientation.Horizontal) { enteringPipeMaxCount = isTiny ? 24 : 32; } else { Position = new Vector2(pipe.BoundingBox.X - 23, Position.Y); enteringPipeMaxCount = 32; } isEnteringPipe = true; SosEngine.Core.PlaySound("PowerDown"); } } } } }
private void ChangeCurrentPipe(Pipe.PipeTypes newPipeType) { var oldPipe = SelectedPipe; var previousPipe = SelectedPipe.PreviousPipe; var nextPipe = SelectedPipe.NextPipe; switch (newPipeType) { case Pipe.PipeTypes.Bend: SelectedPipe = Instantiate(BendPipePrefab); break; case Pipe.PipeTypes.Corner: SelectedPipe = Instantiate(CornerPipePrefab); break; case Pipe.PipeTypes.Short: SelectedPipe = Instantiate(ShortPipePrefab); break; case Pipe.PipeTypes.Long: SelectedPipe = Instantiate(LongPipePrefab); break; case Pipe.PipeTypes.Torus: SelectedPipe = Instantiate(CornerShortPipePrefab); break; } if (nextPipe) { SelectedPipe.NextPipe = nextPipe; nextPipe.PreviousPipe = SelectedPipe; nextPipe.transform.parent = SelectedPipe.EndPivot; nextPipe.transform.localPosition = Vector3.zero; nextPipe.transform.localRotation = Quaternion.identity; } if (previousPipe) { SelectedPipe.PreviousPipe = previousPipe; previousPipe.NextPipe = SelectedPipe; SelectedPipe.transform.parent = previousPipe.EndPivot; SelectedPipe.transform.localPosition = Vector3.zero; SelectedPipe.transform.localRotation = Quaternion.identity; } else { //If is first pipe SelectedPipe.transform.position = oldPipe.transform.position; SelectedPipe.transform.rotation = oldPipe.transform.rotation; SelectedPipe.transform.parent = PipeRoot.transform; } if (StartPipe == oldPipe) { StartPipe = SelectedPipe; } Destroy(oldPipe.gameObject); }