コード例 #1
0
 /// <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");
                 }
             }
         }
     }
 }
コード例 #2
0
ファイル: Manager.cs プロジェクト: earok/pipedreams
    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);
    }