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

68 lines
2.4 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Skill_Golem : ProjectileBase
{
[Header("소환수 프리팹")]
public string prefab = "Bear";
[Header("소환수 유지 시간")]
public float lifeTime = 30f;
ProjectileData pd_meteor;
public override void Set(ProjectileData _data)
{
base.Set(_data);
if (DSUtil.CheckNull(pd_meteor))
{
pd_meteor = new ProjectileData();
pd_meteor.shooter = _data.shooter;
pd_meteor.eStartPos = eProjectileStartPos.Custom;
pd_meteor.e_SkillExtraType = eSkillExtraType.Stun;
pd_meteor.m_SkillListTableData = new SkillListTableData
{
e_SkillExtraType = pd_meteor.e_SkillExtraType,
f_ExtraValue1 = Get_AwakenData(2, 1), // 스턴 시간
f_ExtraValue4 = 1f, // 스턴 확률
};
pd_meteor.m_skillTypeConfigTable = table_skilltypeconfig.Ins.Get_Data_orNull(pd_meteor.e_SkillExtraType);
}
pd_meteor.v3_StartPos = _data.shooter.Get_CenterPositionFoward(1f);
m_LifeTime = _data.LifeTime = lifeTime + (IsStep(1) ? Get_AwakenData(1, 1) : 0f);
if (IsStep(2))
{
ProjectileInfo.Ins.Shoot_Projectile("Projectile_Meteor", pd_meteor, proj => { proj.Set_CheckersSize(0f); });
}
ActorInfo.Ins.Get_Summon(prefab, _data.shooter.IsEnemy() ? eRole.EnemySummon : eRole.Summon, eSummon.Golem,
actor =>
{
var summon = actor as SummonActor;
var dmg = (float)Get_DamageInfo(false, false).Damage;
summon.Set(_data.shooter.IsEnemy(), _data.shooter, _data.LifeTime, dmg, dmg, 1);
if (IsStep(3)) StartCoroutine(Co_Step3(summon));
else Off();
});
}
IEnumerator Co_Step3(Actor summon)
{
InGameInfo.Ins.Show_Effect("Effect_Burn", summon, eEffectLocation.Bottom, m_LifeTime);
var area = Get_AwakenData(3, 1);
var delay = Get_AwakenData(3, 2);
m_ProjecTileData.AddDmgPercent = Get_AwakenData(3, 3);
while (m_LifeTime > 0f)
{
yield return new WaitForSeconds(delay);
var enemies = Get_Enemies(summon.transform, area);
enemies.ForEach(f => f.Get_Damage(summon.Get_DamageInfo(m_ProjecTileData)));
m_LifeTime -= delay;
}
Off();
}
}