private IEnumerator SkillCoroutine(SkillCastSnapshot snapshot) { foreach (SkillAction action in snapshot.SkillData.SkillActions) { yield return(StartCoroutine(action.Action(this, snapshot))); } }
public override IEnumerator Action(MonoBehaviour skill, SkillCastSnapshot skillCastSnapshot) { Debug.Log("Start waiting"); yield return(new WaitForSeconds(seconds)); Debug.Log("Finish waiting"); }
public override IEnumerator Action(MonoBehaviour skill, SkillCastSnapshot snapshot) { snapshot.SkillData.CurrentCooldown = snapshot.SkillData.Cooldown; snapshot.SkillData.OnCooldown = true; Debug.Log("Start cooldown"); skill.StartCoroutine(Cooldown(snapshot)); yield return(null); }
private bool CheckCanCast(SkillCastSnapshot snapshot) { if (snapshot.SkillData.OnCooldown) { return(false); } else { return(true); } }
private IEnumerator Cooldown(SkillCastSnapshot snapshot) { while (snapshot.SkillData.CurrentCooldown > 0) { snapshot.SkillData.CurrentCooldown -= Time.deltaTime; yield return(null); } snapshot.SkillData.OnCooldown = false; Debug.Log("Finished cooldown"); }
private void SkillInput() { if (Input.GetButtonDown("Skill1") && playerCurrentSkills.PlayerSkillSlots[0] != null) { snapshots[0] = new SkillCastSnapshot(gameObject, playerCurrentSkills.PlayerSkillSlots[0]); if (CheckCanCast(snapshots[0])) { StartCoroutine(SkillCoroutine(snapshots[0])); } } if (Input.GetButtonDown("Skill2") && playerCurrentSkills.PlayerSkillSlots[1] != null) { snapshots[1] = new SkillCastSnapshot(gameObject, playerCurrentSkills.PlayerSkillSlots[1]); if (CheckCanCast(snapshots[1])) { StartCoroutine(SkillCoroutine(snapshots[1])); } } if (Input.GetButtonDown("Skill3") && playerCurrentSkills.PlayerSkillSlots[2] != null) { snapshots[2] = new SkillCastSnapshot(gameObject, playerCurrentSkills.PlayerSkillSlots[2]); if (CheckCanCast(snapshots[2])) { StartCoroutine(SkillCoroutine(snapshots[2])); } } if (Input.GetButtonDown("UltSkill") && playerCurrentSkills.PlayerSkillSlots[3] != null) { snapshots[3] = new SkillCastSnapshot(gameObject, playerCurrentSkills.PlayerSkillSlots[3]); if (CheckCanCast(snapshots[3])) { StartCoroutine(SkillCoroutine(snapshots[3])); } } if (Input.GetButtonDown("BasicAttack") && playerCurrentSkills.PlayerSkillSlots[4] != null) { snapshots[4] = new SkillCastSnapshot(gameObject, playerCurrentSkills.PlayerSkillSlots[4]); if (CheckCanCast(snapshots[4])) { StartCoroutine(SkillCoroutine(snapshots[4])); } } if (Input.GetButtonDown("MovementSkill") && playerCurrentSkills.PlayerSkillSlots[5] != null) { snapshots[5] = new SkillCastSnapshot(gameObject, playerCurrentSkills.PlayerSkillSlots[5]); if (CheckCanCast(snapshots[5])) { StartCoroutine(SkillCoroutine(snapshots[5])); } } }
public override IEnumerator Action(MonoBehaviour skill, SkillCastSnapshot skillCastSnapshot) { Vector3 location = Vector3.zero; Vector3 offset = Vector3.zero; switch (Target) { case TargetPositionType.Player: location = skillCastSnapshot.Player.transform.position; break; case TargetPositionType.Auto: //setup auto break; case TargetPositionType.Direction: offset = skillCastSnapshot.MousePosition - skillCastSnapshot.Player.transform.position; location = skillCastSnapshot.Player.transform.position + Vector3.ClampMagnitude(offset, Range); break; case TargetPositionType.Mouse: offset = skillCastSnapshot.MousePosition - skillCastSnapshot.Player.transform.position; if (Range * Range < offset.sqrMagnitude) { location = skillCastSnapshot.Player.transform.position + Vector3.ClampMagnitude(offset, Range); } else { location = skillCastSnapshot.MousePosition; } break; case TargetPositionType.Unit: //setup unit break; case TargetPositionType.Coordinate: location = new Vector3(Coordinate.x, Coordinate.y); break; default: Debug.Log("Check MoveTowards' Target Type"); break; } yield return(null); }
public override IEnumerator Action(MonoBehaviour skill, SkillCastSnapshot skillCastSnapshot) { Vector3 location = Vector3.zero; Vector3 offset = new Vector3(localXAxisOffset, localYAxisOffset, 0f); Quaternion rotation = Quaternion.identity; switch (Target) { case TargetPositionType.Player: location = skillCastSnapshot.Player.transform.position; rotation = skillCastSnapshot.Player.transform.rotation; break; case TargetPositionType.Auto: //setup auto break; case TargetPositionType.Direction: location = skillCastSnapshot.Player.transform.position; rotation = Quaternion.FromToRotation(skillCastSnapshot.Player.transform.position, skillCastSnapshot.MousePosition); break; case TargetPositionType.Mouse: location = skillCastSnapshot.MousePosition; break; case TargetPositionType.Unit: //setup unit break; case TargetPositionType.Coordinate: location = new Vector3(Coordinate.x, Coordinate.y); break; default: Debug.Log("Check SpawnPrefab's Target Type"); break; } location += rotation * offset; rotation *= Quaternion.Euler(Vector3.forward * -angleOffset); Instantiate(prefab, location, rotation); yield return(null); }
public abstract IEnumerator Action(MonoBehaviour skill, SkillCastSnapshot skillCastSnapshot);