void OnCollisionEnter(Collision other)
    {
        if (other.gameObject.CompareTag("Ground") ||
            other.gameObject.CompareTag("Ball") ||
            other.gameObject.CompareTag("Sphere"))
        {
            isJumping = false;

            UpdateCollider();

            playerAnim.SetBool("Jumping_b", false);
        }
        else if (other.gameObject.CompareTag("Stage"))
        {
            isJumping     = false;
            isHoldingRope = false;

            UpdateCollider();

            playerAnim.SetBool("Jumping_b", false);
            playerAnim.SetBool("Running_b", false);
            playerAnim.SetBool("Waving_b", true);

            // Turn the player's face to the audiences in background
            transform.Rotate(Vector3.up, -80.0f);
            transform.Translate(Vector3.right * (stage.transform.position - transform.position).x);

            gameManager.LevelComplete();
        }
        else if (other.gameObject.CompareTag("Trampoline"))
        {
            currentRope = null;

            if (horse != null)
            {
                UpdateSpeedForBouncing();
            }
            else
            {
                UpdateDirectionForBouncing();
            }

            if (isJumping == false)
            {
                isJumping        = true;
                jumpingDirection = JumpingDirection.Up;

                playerAnim.SetBool("Jumping_b", true);
            }
        }
        else
        {
            rbPlayer.isKinematic = true;
            playerAnim.speed     = 0;

            sfxController.PlayCrashedSfx();

            gameManager.LevelFailed();
        }
    }
Example #2
0
    public void Motion(Vector2 inputAxis)
    {
        this.sideAxis = inputAxis.x;

        switch (this.state)
        {
        case MovementState.Disabled:
            this.state = MovementState.Disabled;
            break;

        case MovementState.Jumping:
            this.state = MovementState.Jumping;
            break;

        case MovementState.Landing:
            this.state = MovementState.Landing;
            break;

        case MovementState.Walking:
        case MovementState.Reversing:
        case MovementState.Stationary:
            if (inputAxis.y > 0.1f)
            {
                if (this.sideAxis > 0.1f)
                {
                    this.direction = JumpingDirection.Right;
                }
                else if (this.sideAxis < -0.1f)
                {
                    this.direction = JumpingDirection.Left;
                }
                else
                {
                    this.direction = JumpingDirection.None;
                }

                airMovementController.Jump(MovementState.Stationary, jumpingSpeed, gravity, horizontalAirSpeed, direction);

                this.state = MovementState.Jumping;
            }
            else if (inputAxis.x > 0.1f)
            {
                this.state = MovementState.Walking;
            }
            else if (inputAxis.x < -0.1f)
            {
                this.state = MovementState.Reversing;
            }
            else
            {
                this.state = MovementState.Stationary;
            }
            break;

        default:
            this.state = MovementState.Stationary;
            break;
        }
    }
Example #3
0
    public void JumpBackwards(float horizontalAirSpeed, float gravity, float jumpingSpeed)
    {
        JumpingDirection backwardDirection = this.side == Side.Left ? JumpingDirection.Left : JumpingDirection.Right;

        airMovementController.Jump(MovementState.Disabled, jumpingSpeed, gravity, horizontalAirSpeed, backwardDirection);

        this.state = MovementState.Jumping;
    }
Example #4
0
 public Jump(MovementState behaviorOnLanding, float jumpingSpeed, float gravity, float horizontalAirSpeed,
             JumpingDirection direction)
 {
     this.behaviorOnLanding  = behaviorOnLanding;
     this.jumpingSpeed       = jumpingSpeed;
     this.gravity            = gravity;
     this.horizontalAirSpeed = horizontalAirSpeed;
     this.direction          = direction;
 }
Example #5
0
    private static int Sign(JumpingDirection direction)
    {
        switch (direction)
        {
        case JumpingDirection.Left: return(-1);

        case JumpingDirection.None: return(0);

        case JumpingDirection.Right: return(+1);
        }

        return(0);
    }
    public void JumpToStage()
    {
        UseUserInput     = true;
        isJumpToStage    = true;
        isJumping        = true;
        jumpingDirection = JumpingDirection.Up;

        playerAnim.SetBool("Jumping_b", true);

        // A fixed number for calculate collider when player jump up
        playerCollider.height -= 0.2f;

        rbPlayer.constraints |= RigidbodyConstraints.FreezePositionX;
        rbPlayer.AddForce(Vector3.up * jumpForce * 1.8f, ForceMode.Impulse);
    }
    void UpdateDirectionForBouncing()
    {
        UserAction action = GetUserActionByTouch();

        if (Input.GetKey(KeyCode.RightArrow) || action == UserAction.TouchRight)
        {
            jumpingDirection = JumpingDirection.Forward;
        }
        else if (Input.GetKey(KeyCode.LeftArrow) || action == UserAction.TouchLeft)
        {
            jumpingDirection = JumpingDirection.Backward;
        }
        else
        {
            jumpingDirection = JumpingDirection.Up;
        }
    }
    void UpdateInputDebug()
    {
        // Prevent user's input
        if (UseUserInput == false)
        {
            return;
        }

        // If game is over
        if (gameManager.IsGameOver)
        {
            // Do nothing
        }
        else
        {
            // UserAction action = GetUserActionByMouse();
            UserAction action = GetUserActionByTouch();

            if (Input.GetKeyDown(KeyCode.Escape))
            {
                gameManager.PauseResumeGame();
            }

            // If game is paused
            if (gameManager.IsGamePaused)
            {
                // Do nothing
            }
            // If game continue
            else if (gameManager.IsLevelComplete == false)
            {
                // If jump to stage in Level 4
                if (isJumpToStage)
                {
                    MoveToStage();

                    return;
                }

                // If holding rope in Level 5
                if (isHoldingRope)
                {
                    transform.position = ropeCs.GetLooseEndPosition() - animationHoldingRopeOffset;

                    if (Input.GetKey(KeyCode.Space) ||
                        action == UserAction.Tap ||
                        action == UserAction.SwipeLeft ||
                        action == UserAction.SwipeRight)
                    {
                        isHoldingRope = false;
                        isJumping     = true;

                        transform.rotation  = Quaternion.Euler(0, 90, 0);
                        transform.position += (Vector3.forward * animationHoldingRopeOffset.z);

                        jumpingDirection = JumpingDirection.Up;

                        if (action == UserAction.SwipeRight)
                        {
                            jumpingDirection = JumpingDirection.Forward;
                        }
                        else if (action == UserAction.SwipeLeft)
                        {
                            jumpingDirection = JumpingDirection.Backward;
                        }

                        rbPlayer.isKinematic = false;
                        rbPlayer.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);

                        sfxController.PlayJumpSfx();
                    }

                    if (Input.GetKey(KeyCode.RightArrow) || action == UserAction.TouchRight)
                    {
                        jumpingDirection = JumpingDirection.Forward;
                    }
                    else if (Input.GetKey(KeyCode.LeftArrow) || action == UserAction.TouchLeft)
                    {
                        if (isJumping)
                        {
                            transform.rotation = Quaternion.Euler(0, -90, 0);
                        }

                        jumpingDirection = JumpingDirection.Backward;
                    }
                }
                // If jumping
                else if (isJumping)
                {
                    if (horse != null)
                    {
                        if (Input.GetKey(KeyCode.LeftArrow) || action == UserAction.TouchLeft)
                        {
                            KeepLowBounce = true;
                        }
                        else
                        {
                            KeepLowBounce = false;
                        }

                        transform.position = new Vector3(horse.transform.position.x, transform.position.y, transform.position.z);
                    }
                    else
                    {
                        if (jumpingDirection == JumpingDirection.Forward)
                        {
                            MoveForward();
                        }
                        else if (jumpingDirection == JumpingDirection.Backward)
                        {
                            MoveBackward();
                        }
                    }
                }
                // If walk/run normally
                else
                {
                    if (Input.GetKeyDown(KeyCode.Space) ||
                        action == UserAction.Tap ||
                        action == UserAction.SwipeLeft ||
                        action == UserAction.SwipeRight)
                    {
                        isJumping        = true;
                        jumpingDirection = JumpingDirection.Up;

                        if (action == UserAction.SwipeRight)
                        {
                            jumpingDirection = JumpingDirection.Forward;
                        }
                        else if (action == UserAction.SwipeLeft)
                        {
                            jumpingDirection = JumpingDirection.Backward;
                        }

                        playerAnim.SetBool("Jumping_b", true);

                        UpdateCollider();

                        rbPlayer.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);

                        sfxController.PlayJumpSfx();
                    }

                    if (Input.GetKey(KeyCode.RightArrow) || action == UserAction.TouchRight)
                    {
                        if (horse != null)
                        {
                            // Do nothing
                        }
                        else
                        {
                            if (isJumping)
                            {
                                jumpingDirection = JumpingDirection.Forward;
                            }
                            else
                            {
                                playerAnim.SetBool("Running_b", true);
                                playerAnim.SetInteger("Direction_i", 1);

                                MoveForward();
                            }
                        }
                    }
                    else if (Input.GetKey(KeyCode.LeftArrow) || action == UserAction.TouchLeft)
                    {
                        if (horse != null)
                        {
                            horseCs.ChangeSpeed(false);
                        }
                        else
                        {
                            if (isJumping)
                            {
                                jumpingDirection = JumpingDirection.Backward;
                            }
                            else
                            {
                                playerAnim.SetBool("Running_b", true);
                                playerAnim.SetInteger("Direction_i", -1);

                                MoveBackward();
                            }
                        }
                    }
                    else
                    {
                        playerAnim.SetBool("Running_b", false);
                        playerAnim.SetInteger("Direction_i", 0);

                        if (horse != null)
                        {
                            horseCs.ChangeSpeed(true);
                        }
                    }
                }
            }
        }
    }
Example #9
0
 public void Jump(MovementState behaviorOnLanding, float jumpingSpeed, float gravity, float horizontalAirSpeed,
                  JumpingDirection direction)
 {
     this.jump = new Jump(behaviorOnLanding, jumpingSpeed, gravity, horizontalAirSpeed, direction);
 }