using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerSkillHandler: MonoBehaviour { [Header("Dash stats")] [SerializeField] private float dashCooldown; [SerializeField] private float dashSpeed; [SerializeField] private float dashDuration; private bool isDashing = false; private Dictionary cooldowns; private Dictionary cooldownsActivated; public bool IsDashing() { return isDashing; } public void Start() { cooldowns = new Dictionary(); cooldownsActivated = new Dictionary(); AssignCooldowns(); } public IEnumerator DashCoroutine(CharacterController controller, Vector3 direction) { Physics.IgnoreLayerCollision(6, 7, true); // disable collisions between player and enemies float startTime = Time.time; isDashing = true; // just for now. maybe will be removed while (Time.time - startTime < dashDuration) { controller.Move(dashSpeed * Time.deltaTime * direction); yield return null; // wait one frame } handleCooldownTimer(PlayerSkillTree.Skills.Dash); isDashing = false; // just for now. maybe will be removed Physics.IgnoreLayerCollision(6, 7, false); // enable collisions between player and enemies } private void handleCooldownTimer(PlayerSkillTree.Skills skill) { if(!cooldownsActivated.ContainsKey(skill)) { cooldownsActivated.Add(skill, Time.time); } else { cooldownsActivated[skill] = Time.time; } } private void AssignCooldowns() { // handle Dash stats cooldowns.Add(PlayerSkillTree.Skills.Dash, dashCooldown); cooldownsActivated.Add(PlayerSkillTree.Skills.Dash, Time.time - dashCooldown); } public bool IsOnCooldown(PlayerSkillTree.Skills skill) { Debug.Log("cooldown time: " + (Time.time - cooldownsActivated[skill])); Debug.Log("skill cooldown: " + cooldowns[skill]); return !cooldowns.ContainsKey(skill) || !cooldownsActivated.ContainsKey(skill) ? false : Time.time - cooldownsActivated[skill] < cooldowns[skill]; } }