Project_WL/Assets/Script/Character/Projectile/Skill/Skill_Bead.cs

82 lines
2.3 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Skill_Bead : ProjectileBase
{
public AudioClip m_Clip;
public BoxCollider m_Collider;
[Header("이동속도")]
public float movespeed = 3f;
Dictionary<Actor, bool> dic_HitActor = new Dictionary<Actor, bool>();
public override void Set(ProjectileData _data)
{
_data.eStartPos = eProjectileStartPos.ShooterCenter;
base.Set(_data);
dic_HitActor.Clear();
bool isStep2 = IsStep(2);
_data.Action_OnHit = hitter =>
{
if (isStep2)
{
if (!dic_HitActor.ContainsKey(hitter))
dic_HitActor.Add(hitter, true);
else
hitter.Stun(Get_AwakenData(2, 1), true);
}
};
if (IsStep(3))
act_returnDmg = dmg =>
{
_data.shooter.Heal(dmg * Get_AwakenData(3, 1));
_data.shooter.Heal_MP(dmg * Get_AwakenData(3, 1));
};
StartCoroutine(Co_Bead());
}
IEnumerator Co_Bead()
{
// 시작 위치 설정
var startPos = m_ProjectTileData.shooter.Get_Center_position();
var targetPos = startPos + transform.forward * 5f; // 앞으로 이동할 목표 위치 (5 단위)
float duration = 2f; // 이동 시간
float elapsed = 0f; // 경과 시간
// y값 고정
targetPos.y = startPos.y;
var speed = movespeed + (IsStep(1) ? movespeed * Get_AwakenData(1, 1) : 0f);
m_Collider.enabled = true;
// 앞으로 이동
while (elapsed < duration)
{
transform.position = Vector3.Lerp(startPos, targetPos, elapsed / duration);
elapsed += Time.deltaTime * speed;
yield return null;
}
transform.position = targetPos;
yield return null;
m_Collider.enabled = false;
yield return null;
m_Collider.enabled = true;
yield return null;
// 다시 원래 위치로 이동
elapsed = 0f;
while (elapsed < duration)
{
transform.position = Vector3.Lerp(targetPos, startPos, elapsed / duration);
elapsed += Time.deltaTime * speed;
yield return null;
}
// 발사체 종료
Off(true);
}
}