void HandleSpells() { if (currentSpell.IsLooping()) { if (playerInput.GetButtonInput(PlayerInput.CAST_BUTTON) && !playerInput.GetButtonInput(PlayerInput.SPRINT_BUTTON) && !isVenting) { if (!isCasting) { currentSpell.Cast(this); fpsController.enableRunning = false; isCasting = true; } } else { currentSpell.Stop(this); fpsController.enableRunning = true; isCasting = false; } if (isCasting) { AddHeat(currentSpell.GetHeat() * Time.deltaTime); } } else { // reset isCasting on next frame so the animator can catch it in the last frame isCasting = false; if (playerInput.GetButtonInput(PlayerInput.CAST_BUTTON_DOWN) && !playerInput.GetButtonInput(PlayerInput.SPRINT_BUTTON) && castTimerElapsed && !isVenting) { castTimerElapsed = false; currentSpell.Cast(this); AddHeat(currentSpell.GetHeat()); isCasting = true; } } if (!currentSpell.IsLooping() && !castTimerElapsed) { recoveryTimer += Time.deltaTime; if (recoveryTimer >= recoveryTime) { castTimerElapsed = true; recoveryTimer = 0; } } }