Project_WL/Assets/Script/Character/Projectile/MagicMissile.cs

72 lines
2.3 KiB
C#

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class MagicMissile : ProjectileBase
{
List<Actor> hitmobs = new List<Actor>();
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);
}
}
}