private void Sprint() { if (!HasEnergy) { return; } //Si on détecte le firstTap et que dans la durée autorisée (SprintWaitForSecondPress) on détecte un appui de la touche "avancer" alors on sprint //Le second press après le tap (OnSprint) est géré avec une coroutine qui donne au joueur une certaines durée pour réappuyer sur la touche "avancer" //qui sera détectée dans le OnMove car l'input manager ne gère pas des séries d'action qui permettrait de détecter le tap puis le press if (sprintFirstTap) { if (Vertical > 0 && !IsSprinting) { IsSprinting = true; moveSpeed = sprintSpeed; OnSprint?.Invoke(this, new OnSprintEventArgs { IsSprinting = IsSprinting }); } //Si la touche avancé est relaché ou que l'énergie est vide on arrête de sprinter } else if (((Vertical <= 0)) && IsSprinting) { CancelSprint(); } }
public void RegenSprintCharge() { if (stamina < staminaMax) { stamina += 1; OnSprint.Invoke(stamina); } }
//Cancel sprint movement private void CancelSprint() { if (IsSprinting) { IsSprinting = false; moveSpeed = walkSpeed; OnSprint?.Invoke(this, new OnSprintEventArgs { IsSprinting = IsSprinting }); } }
private void ToggleSprint() { switch (sprintToggle) { case true: if (Input.GetButtonDown("Run")) { if (m_IsWalking) { m_IsWalking = false; OnSprint?.Invoke(true); } else { m_IsWalking = true; OnSprint?.Invoke(false); } } break; case false: if (Input.GetButton("Run")) { if (m_IsWalking) { m_IsWalking = false; OnSprint?.Invoke(true); } } else { m_IsWalking = true; OnSprint?.Invoke(false); } break; } if (!m_IsWalking && Input.GetAxisRaw("Vertical") < 1) // If player is not holding down forward { m_IsWalking = true; OnSprint?.Invoke(false); } }
public void SpendSprintResource() { sprintT = sprintTMax; stamina -= 1; OnSprint.Invoke(stamina); }