69 lines
2.5 KiB
C#
69 lines
2.5 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_position() + Vector3.forward;
|
|
|
|
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);
|
|
ServerInfo.Ins.m_ServerData.Add_TitleCondition(65); // 칭호 : 골렘과 나
|
|
|
|
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);
|
|
var dmgRate = 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(null, dmgRate)));
|
|
m_LifeTime -= delay;
|
|
}
|
|
|
|
Off();
|
|
}
|
|
} |