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; } }
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); } }
// 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); } } } }