示例#1
0
    public IEnumerator Dash(DirectionsEnum.Direction direction)
    {
        if (!isDashing)
        {
            isDashing = true;
            dashSpeed = dashDistance / dashDuration;

            switch (direction)
            {
            case DirectionsEnum.Direction.Left:
                dashSpeed *= -1;
                break;

            case DirectionsEnum.Direction.Right:
                break;

            default:
                dashSpeed = 0;
                break;
            }

            yield return(new WaitForSeconds(dashDuration));

            isDashing = false;
        }
    }
示例#2
0
    private void Update()
    {
        Vector2 newTranslation = Vector2.zero;

        if (!ignoreGravity && PhysicsManager.Instance != null)
        {
            // Calculing Gravity Effet
            newTranslation -= new Vector2(0, PhysicsManager.Instance.GravityValue * PercentageOfGravity) * Time.deltaTime;
        }

        if (isJumping)
        {
            PercentageOfGravity = Mathf.Min(1.0f, PercentageOfGravity + heightOfJump * Time.deltaTime);
        }

        // Adding the player's movement on right/left and the sprint
        newTranslation += Speed * maxSpeed * Time.deltaTime *
                          ((isSprinting && !isJumping) ? SprintingSpeedMultiplier : 1);
        // Adding the dash effect
        newTranslation += Vector2.right * ((isDashing) ? dashSpeed : 0) * Time.deltaTime;

        // Adding the WallJump Effect;
        // newTranslation += Vector2.right * ((isWallJumping) ? wallJumpSpeed : 0) * Time.deltaTime;

        Position += newTranslation;

        // Restarting the walljump opportunity.
        canWallJump = false;

        // Clamping Position
        // Top Collider
        if (clampYBelowPosition && Position.y < clampYBelowValue)
        {
            ResetJumpCount();
            isJumping = false;
            lastWallJumpPerformedID = -1;   // Touching the ground restart all ability to walljump
            if (topCollisionAction != null)
            {
                Position += topCollisionAction.OnCollisionDo();
            }
            Position = new Vector2(Position.x, clampYBelowValue);
        }
        // Bottom Collider
        if (clampYAbovePosition && Position.y > clampYAboveValue)
        {
            percentageOfGravity = Mathf.Max(0, percentageOfGravity);
            if (bottomCollisionAction != null)
            {
                Position += bottomCollisionAction.OnCollisionDo();
            }
            Position = new Vector2(Position.x, clampYAboveValue);
        }
        // Right Collider
        if (clampXBelowPosition && Position.x < clampXBelowValue)
        {
            lastClampedXDirection = DirectionsEnum.Direction.Left;
            if (rightCollisionAction != null)
            {
                Position += rightCollisionAction.OnCollisionDo();
            }
            Position = new Vector2(clampXBelowValue, Position.y);
        }
        // Left Collider
        if (clampXAbovePosition && Position.x > clampXAboveValue)
        {
            lastClampedXDirection = DirectionsEnum.Direction.Right;
            if (leftCollisionAction != null)
            {
                Position += leftCollisionAction.OnCollisionDo();
            }
            Position = new Vector2(clampXAboveValue, Position.y);
        }
    }
示例#3
0
    // Update is called once per frame
    void Update()
    {
        if (this.engine != null)
        {
            // Left / Right movements
            float horizontalSpeedPercent = Input.GetAxis("Horizontal");
            if (horizontalSpeedPercent == 0)
            {
                horizontalSpeedPercent = Input.GetAxis("CrossJoystickX");
            }

            if (Mathf.Abs(horizontalSpeedPercent) - absLastSpeedRecorded < 0.0f)
            {
                horizontalSpeedPercent = 0;
            }

            this.engine.Speed    = new Vector2(horizontalSpeedPercent, 0);
            absLastSpeedRecorded = Mathf.Abs(horizontalSpeedPercent);

            // Recording the direction the player is facing according to the Dash Threshold.
            if (horizontalSpeedPercent >= dashThreshold)
            {
                recordedDirection = DirectionsEnum.Direction.Right;
            }
            if (horizontalSpeedPercent <= -dashThreshold)
            {
                recordedDirection = DirectionsEnum.Direction.Left;
            }

            // Sprint
            engine.isSprinting = (Input.GetButton("X") || Input.GetKeyDown(KeyCode.LeftShift));

            // Jump
            if (Input.GetButtonDown("A") || Input.GetKeyDown("space"))
            {
                this.engine.Jump();
            }

            // Dash
            if (Input.GetButtonDown("B") || Input.GetKeyDown(KeyCode.A))
            {
                StartCoroutine(this.engine.Dash(recordedDirection));
            }

            // Debug
            if (Input.GetKeyDown(KeyCode.Escape))
            {
                if (debugMenu != null)
                {
                    debugMenu.SetActive(!debugMenu.activeSelf);
                }
            }

            // Controls
            if (Input.GetButtonDown("Start") || Input.GetKeyDown(KeyCode.Tab))
            {
                if (controlMenu != null)
                {
                    controlMenu.SetActive(!controlMenu.activeSelf);
                }
            }

            // Restart
            if (Input.GetButtonDown("Back") || Input.GetKeyDown(KeyCode.R))
            {
                int sceneIndex = SceneManager.GetActiveScene().buildIndex;
                if (SceneManager.GetSceneByBuildIndex(sceneIndex) != null)
                {
                    SceneManager.LoadScene(sceneIndex, LoadSceneMode.Single);
                }
            }
        }
    }