using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; public class MagicMissile : ProjectileBase { List hitmobs = new List(); int BounceCount = 0; public override void Set(ProjectileData _data) { base.Set(_data); hitmobs.Clear(); hitmobs.Add(m_ProjecTileData.target); if (m_ProjecTileData.shooter.Get_SelectSkill(eEffect.Select_Bounce)) { BounceCount = 4; if (m_ProjecTileData.shooter.Get_SelectSkill(eEffect.Select_Bounce2)) BounceCount = 7; //m_ProjectTileData.SkillDamage *= table_selectskill.Ins.Get_Data(eEffect.Select_Bounce).ValueBase; } else BounceCount = 0; } void Update() { if (m_ProjecTileData.target == null) { Off(); return; } if (m_LifeTime > 0f) { m_LifeTime -= Time.deltaTime; if (m_LifeTime <= 0f) Off(true); } var targetpos = m_ProjecTileData.target.Get_Center_position(); transform.position = Vector3.MoveTowards(transform.position, targetpos, Time.deltaTime * m_ProjecTileData.Speed); var dist = Vector3.Distance(transform.position, targetpos); if (dist < 0.2f) { --BounceCount; hitmobs.Add(m_ProjecTileData.target); if (m_ProjecTileData.IsSkill()) m_ProjecTileData.target.Get_Damage(Get_DamageInfo()); else m_ProjecTileData.target.Get_Damage(m_ProjecTileData.shooter.Get_DamageInfo(m_ProjecTileData)); if (BounceCount > 0) { var enemies = Get_Enemies().OrderBy(obj => { return Vector3.Distance(transform.position, obj.Get_position()); }).ToList(); for (int i = 0; i < enemies.Count; i++) { if (hitmobs.Find(f => f == enemies[i]) == null) { m_ProjecTileData.target = enemies[i]; m_LifeTime = m_ProjecTileData.LifeTime; Show_HitEffect(false, enemies[i]); return; } } } Off(true); } } }