private void Lean(float x)
    {
        if (stateManager.currentState == PlayerStateManager.PlayerState.Pushing)
        {
            if (x > .1f)
            {
                stateManager.ActiveState(PlayerStateManager.PlayerState.Lean_Right);
            }

            if (x < -.1f)
            {
                stateManager.ActiveState(PlayerStateManager.PlayerState.Lean_Left);
            }
        }
        else if (stateManager.currentState == PlayerStateManager.PlayerState.Primed)
        {
            if (x > .1f)
            {
                stateManager.ActiveState(PlayerStateManager.PlayerState.Primed_Right);
            }

            if (x < -.1f)
            {
                stateManager.ActiveState(PlayerStateManager.PlayerState.Primed_Left);
            }
        }
    }
예제 #2
0
    private void Crouch()
    {
        if (jumpHeight < maxJumpHeight)
        {
            jumpHeight += Time.deltaTime * buildUpSpeed;
        }

        if (stateManager.currentState != PlayerStateManager.PlayerState.Primed && stateManager.currentState != PlayerStateManager.PlayerState.Airborne && stateManager.currentState != PlayerStateManager.PlayerState.Primed_Right && stateManager.currentState != PlayerStateManager.PlayerState.Primed_Left)
        {
            stateManager.ActiveState(PlayerStateManager.PlayerState.Primed);
        }
    }
예제 #3
0
    //void update()
    //{
    //    //Shoot a raycast down from the groundcheck transform.
    //    isGrounded = Physics.Raycast(groundCheck.position, Vector3.down, out hit, groundDistance);
    //    print(isGrounded);
    //    //if (isGrounded)
    //    //{
    //    //
    //    //    //Store the normal of the surface we are on.
    //    //    groundNormal = hit.normal;
    //    //
    //    //    if (playerGravity.velocity.y == -2 && stateManager.currentState != PlayerStateManager.PlayerState.Pushing && stateManager.currentState != PlayerStateManager.PlayerState.Primed && stateManager.currentState != PlayerStateManager.PlayerState.Grinding)
    //    //    {
    //    //        if (stateManager.doingTrick == true) //If they are doing a trick
    //    //        {
    //    //            //TODO DEATH/FAILURE/RAGDOLL METHOD HERE
    //    //            Debug.Log("The player failed to complete their trick before landing.");
    //    //            stateManager.ActiveState(PlayerStateManager.PlayerState.Ragdoll);
    //    //            death.KillPlayer();
    //    //            death.End();
    //    //        }
    //    //        else if (!horizontalMovement.leaning && !Input.GetKey("down"))
    //    //            stateManager.ActiveState(PlayerStateManager.PlayerState.Pushing);
    //    //        //And tell the state manager that the player is on the ground, pushing their scooter.
    //    //    }
    //    //    else if (!horizontalMovement.leaning && Input.GetKey("down") && playerGravity.velocity.y == -2 && stateManager.currentState == PlayerStateManager.PlayerState.Pushing && stateManager.currentState != PlayerStateManager.PlayerState.Primed && stateManager.currentState != PlayerStateManager.PlayerState.Grinding)
    //    //    {
    //    //        stateManager.ActiveState(PlayerStateManager.PlayerState.Manual);
    //    //    }
    //    //
    //    //    if (hit.transform.tag == "Ramp")
    //    //    {
    //    //        audioSource.clip = audioManager.clips[5];
    //    //        audioSource.Play();
    //    //    }
    //    //}
    //    //else if (stateManager.currentState == PlayerStateManager.PlayerState.Grinding)
    //    //    stateManager.currentState = PlayerStateManager.PlayerState.Airborne;
    //}

    private void OnTriggerEnter(Collider other)
    {
        //print(other.tag);
        if (other.tag == "Mountain" || other.tag == "Ramp" || other.tag == "Untagged" && !death.dead)
        {
            isGrounded = true;
            if (stateManager.currentState != PlayerStateManager.PlayerState.Pushing && stateManager.currentState != PlayerStateManager.PlayerState.Lean_Left && stateManager.currentState != PlayerStateManager.PlayerState.Lean_Right && stateManager.currentState != PlayerStateManager.PlayerState.Primed &&
                stateManager.currentState != PlayerStateManager.PlayerState.Primed_Left && stateManager.currentState != PlayerStateManager.PlayerState.Primed_Right && stateManager.currentState != PlayerStateManager.PlayerState.Manual)
            {
                stateManager.ActiveState(PlayerStateManager.PlayerState.Pushing);
            }
            if (other.tag == "Ramp")
            {
                audioSource.clip = audioManager.clips[5];
                audioSource.Play();
            }
            if (jumpSuccess)
            {
                comboManager.newComboValue = 1;
                comboManager.AddToCombo();
                jumpSuccess = false;
            }
        }
        if (other.tag == "Obstacle")
        {
            isOnObstacle = true;
            if (stateManager.currentState != PlayerStateManager.PlayerState.Pushing && stateManager.currentState != PlayerStateManager.PlayerState.Lean_Left && stateManager.currentState != PlayerStateManager.PlayerState.Lean_Right && stateManager.currentState != PlayerStateManager.PlayerState.Primed &&
                stateManager.currentState != PlayerStateManager.PlayerState.Primed_Left && stateManager.currentState != PlayerStateManager.PlayerState.Primed_Right && stateManager.currentState != PlayerStateManager.PlayerState.Manual)
            {
                stateManager.ActiveState(PlayerStateManager.PlayerState.Pushing);
            }
        }

        if (stateManager.doingTrick == true && isGrounded) //If they are doing a trick
        {
            //TODO DEATH/FAILURE/RAGDOLL METHOD HERE
            Debug.Log("The player failed to complete their trick before landing.");
            stateManager.ActiveState(PlayerStateManager.PlayerState.Ragdoll);
            death.KillPlayer();
            death.End();
            stateManager.doingTrick = false;
        }
    }
    public void Play()
    {
        movement.enabled = false;
        //horizontalMovement.enabled = false;

        if (stateManager.currentState != PlayerStateManager.PlayerState.Grinding)
        {
            stateManager.ActiveState(PlayerStateManager.PlayerState.Grinding);
        }

        speed = movement.speed / railBraking;

        float magnitude       = (rail.nodes[currentSegment + 1].position - rail.nodes[currentSegment].position).magnitude;
        float normalizedSpeed = (Time.deltaTime * 1 / magnitude) * speed;

        transition += normalizedSpeed;
        if (transition > 1)
        {
            transition = 0;
            currentSegment++;
            if (currentSegment == rail.nodes.Length - 1)
            {
                isCompleted      = true;
                movement.enabled = true;
                //horizontalMovement.enabled = true;
                stateManager.ActiveState(PlayerStateManager.PlayerState.Airborne);
                transform.rotation = initialRotation;
                start                      = false;
                currentSegment             = 0;
                comboManager.newComboValue = 1;
                comboManager.AddToCombo();
                return;
            }
        }
        else if (transition < 0)
        {
            transition = 1;
            currentSegment--;
        }

        transform.position = rail.PositionOnRail(currentSegment, transition, mode);
        //transform.rotation = rail.Orientation(currentSegment, transition);
    }
예제 #5
0
    private void CheckPlayerState()
    {
        //This is used to see if the player is currently jumping or falling.
        //It is not currently feasible to set the jumping state in Jump.cs due to our ground detection.

        //If velocity, the player should be jumping.
        if (!stateManager.doingTrick && (velocity.y != -2 && stateManager.currentState == PlayerStateManager.PlayerState.Primed) || (velocity.y != -2 && stateManager.currentState == PlayerStateManager.PlayerState.Pushing))
        {
            //print("Oi");
            stateManager.ActiveState(PlayerStateManager.PlayerState.Airborne);
        }
    }
예제 #6
0
    private void Lean(float x)
    {
        if (stateManager.currentState != PlayerStateManager.PlayerState.Airborne && x != 0)
        {
            if (stateManager.currentState == PlayerStateManager.PlayerState.Pushing)
            {
                if (x > 0)
                {
                    leaning = true;
                    stateManager.ActiveState(PlayerStateManager.PlayerState.Lean_Right);
                }

                if (x < 0)
                {
                    leaning = true;
                    stateManager.ActiveState(PlayerStateManager.PlayerState.Lean_Left);
                }
            }
            else if (stateManager.currentState == PlayerStateManager.PlayerState.Primed)
            {
                if (x > 0)
                {
                    leaning = true;
                    stateManager.ActiveState(PlayerStateManager.PlayerState.Primed_Right);
                }

                if (x < 0)
                {
                    leaning = true;
                    stateManager.ActiveState(PlayerStateManager.PlayerState.Primed_Left);
                }
            }
        }
        else if (x == 0)
        {
            leaning = false;
        }
    }
예제 #7
0
 private void OnCollisionEnter(Collision other)
 {
     //print(groundCheck.isOnObstacle + " " + dead + " " + canDie + " " + other.gameObject.name + " " + other.gameObject.tag);
     if (other.gameObject.CompareTag("Obstacle") && (!groundCheck.isOnObstacle || obsInFront) && !dead && canDie)
     {
         Debug.Log("The player hit an obstacle.");
         Rigidbody rb = other.gameObject.GetComponent <Rigidbody>();
         if (rb != null)
         {
             rb.useGravity  = true;
             rb.isKinematic = false;
         }
         stateManager.ActiveState(PlayerStateManager.PlayerState.Ragdoll);
         KillPlayer();
         //GetComponentInChildren<TrailRenderer>().enabled = false;
         End();
     }
 }
예제 #8
0
    //A method that activates a given trick
    public void TrickStep(TrickStep trickStep)
    {
        currentTrickStep = trickStep;

        if (currentTrickStep.state != PlayerStateManager.PlayerState.Idle && !doingTrick)
        {
            //Change the player's state to that trick.
            stateManager.ActiveState(currentTrickStep.state);
            doingTrick = true;
        }

        if (currentTrickStep.comboMultiplier != 0)
        {
            //Add to the player's multiplier.
            comboManager.newComboValue = currentTrickStep.comboMultiplier;
            comboManager.AddToCombo();
        }
    }
예제 #9
0
    //private void OnCollisionEnter(Collision collision)
    //{
    //    if (collision.gameObject.tag == "Mountain")
    //    {
    //        isGrounded = true;
    //        stateManager.ActiveState(PlayerStateManager.PlayerState.Pushing);
    //    }
    //}
    //private void OnCollisionExit(Collision collision)
    //{
    //    isGrounded = false;
    //    stateManager.ActiveState(PlayerStateManager.PlayerState.Airborne);
    //}

    void Rotate()
    {
        if (stateManager.currentState != PlayerStateManager.PlayerState.Airborne && groundCheck.isGrounded)
        {
            rotationSpeed = 75;
            if (Input.GetKey(KeyCode.D) && !yMaxReached)
            {
                transform.Rotate(0, Time.deltaTime * rotationSpeed, 0);
                yMinReached = false;
                if (transform.eulerAngles.y > 45 && transform.eulerAngles.y < 50)
                {
                    yMaxReached = true;
                }
                if (stateManager.currentState == PlayerStateManager.PlayerState.Pushing || stateManager.currentState == PlayerStateManager.PlayerState.Lean_Left)
                {
                    stateManager.ActiveState(PlayerStateManager.PlayerState.Lean_Right);
                }
                else if (stateManager.currentState == PlayerStateManager.PlayerState.Primed || stateManager.currentState == PlayerStateManager.PlayerState.Primed_Left)
                {
                    stateManager.ActiveState(PlayerStateManager.PlayerState.Primed_Right);
                }
            }
            else if (Input.GetKey(KeyCode.A) && !yMinReached)
            {
                transform.Rotate(0, -Time.deltaTime * rotationSpeed, 0);
                yMaxReached = false;
                if (transform.eulerAngles.y < 315 && transform.eulerAngles.y > 310)
                {
                    yMinReached = true;
                }
                if (stateManager.currentState == PlayerStateManager.PlayerState.Pushing || stateManager.currentState == PlayerStateManager.PlayerState.Lean_Right)
                {
                    stateManager.ActiveState(PlayerStateManager.PlayerState.Lean_Left);
                }
                else if (stateManager.currentState == PlayerStateManager.PlayerState.Primed || stateManager.currentState == PlayerStateManager.PlayerState.Primed_Right)
                {
                    stateManager.ActiveState(PlayerStateManager.PlayerState.Primed_Left);
                }
            }
            else
            {
                rb.angularVelocity = new Vector3(0, 0, 0);
                if (stateManager.currentState != PlayerStateManager.PlayerState.Primed && stateManager.currentState != PlayerStateManager.PlayerState.Manual)
                {
                    stateManager.ActiveState(PlayerStateManager.PlayerState.Pushing);
                }
            }
        }
        else
        {
            rotationSpeed = 25;
            if (Input.GetKey(KeyCode.D) && !yMaxReached)
            {
                transform.Rotate(0, Time.deltaTime * rotationSpeed, 0);
                yMinReached = false;
                if (transform.eulerAngles.y > 45 && transform.eulerAngles.y < 50)
                {
                    yMaxReached = true;
                }
            }
            else if (Input.GetKey(KeyCode.A) && !yMinReached)
            {
                transform.Rotate(0, -Time.deltaTime * rotationSpeed, 0);
                yMaxReached = false;
                if (transform.eulerAngles.y < 315 && transform.eulerAngles.y > 310)
                {
                    yMinReached = true;
                }
            }
            else
            {
                rb.angularVelocity = new Vector3(0, 0, 0);
            }
        }
    }