using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; public class PlayerSkill : MonoBehaviour { private Animator animator; private PlayerController playerController; public Dictionary skillList = new Dictionary(); public enum SkillKeyType { M_Right, Q, E, R, T } void Start() { playerController = GetComponent(); animator = GetComponentInChildren(); PlayManager.Instance.rightMouve += Skill_Right; PlayManager.Instance.keySdown += Skill_Q; } private void Skill_Right() { BaseSkill(SkillKeyType.M_Right); } private void Skill_Q() { BaseSkill(SkillKeyType.Q); } public void BaseSkill(SkillKeyType skillKeyType) { if (!skillList.ContainsKey(skillKeyType)) return; SkillData skillData = skillList[skillKeyType]; if (skillData != null && skillData.currentCoolTime == 0) { playerController.playerState = PlayerController.PlayerState.Skill; SkillRot(); skillData.skillBase.Active(this); StartCoroutine(SkillCoolTime(skillData, skillData.skillBase.skillCoolTime)); StartCoroutine(SkillStop(skillData.skillBase.skillStopTime)); Debug.Log(123); } } IEnumerator SkillStop(float time) { yield return new WaitForSeconds(time); Debug.Log(123); animator.SetInteger("SkillIdx", -1); playerController.playerState = PlayerController.PlayerState.Idle; } IEnumerator SkillCoolTime(SkillData skillData,float time) { skillData.currentCoolTime = time; yield return new WaitForSeconds(time); skillData.currentCoolTime = 0; } public void SkillAdd(SkillBase skill, SkillKeyType skillKeyType) { if (!skillList.ContainsKey(skillKeyType)) { skillList[skillKeyType] = new SkillData(skill); } else { skillList[skillKeyType].skillBase = skill; } } public void Skill_Anim(int idx) { animator.SetInteger("SkillIdx", idx); } public void SkillRot() { Vector3 playerScreenPos = Camera.main.WorldToScreenPoint(transform.position); Vector3 mouseScreenPos = Input.mousePosition; bool isLeft = mouseScreenPos.x < playerScreenPos.x; if (Mathf.Abs(mouseScreenPos.x - playerScreenPos.x) > Mathf.Abs(mouseScreenPos.y - playerScreenPos.y)) { transform.GetChild(0).localEulerAngles = isLeft ? new Vector3(0, 180, 0) : new Vector3(0, 0, 0); animator.SetFloat("AttackState", 1); playerController.idleState = 1f; } else { if (mouseScreenPos.y > playerScreenPos.y) { animator.SetFloat("AttackState", 0.5f); playerController.idleState = 2f / 3f; } else { animator.SetFloat("AttackState", 0); playerController.idleState = 1f / 3f; } } } public Vector3 GetSkillDirection() { Vector3 playerScreenPos = Camera.main.WorldToScreenPoint(transform.position); Vector3 mouseScreenPos = Input.mousePosition; Vector3 direction = (mouseScreenPos - playerScreenPos).normalized; direction.z = 0; // 2D ±âÁØÀ̸é z´Â 0À¸·Î return direction; } private SkillData FindSkillData(SkillBase skillBase) { foreach (var pair in skillList) { if (pair.Value.skillBase == skillBase) return pair.Value; } return null; } public class SkillData { public SkillBase skillBase; public float currentCoolTime; public SkillData(SkillBase baseSkill) { skillBase = baseSkill; currentCoolTime = 0; } } }