Project_WL/Assets/Script/Character/Mob/Boss/Boss_FlowerDryad.cs

128 lines
4.8 KiB
C#

using System;
using System.Collections;
using UnityEngine;
using Random = UnityEngine.Random;
public class Boss_FlowerDryad : BossMobActor
{
[Header("스킬1 쿨타임")]
public float Skill1CoolTime = 20f;
[Header("스킬1 차징 시간")]
public float Skill1ChargingTime = 3f;
[Header("스킬1 즉시 회복량")]
public float Skill1Heal = 0.1f;
[Header("스킬1 주변 몬스터 찾는 거리")]
public float Skill1FindDist = 3f;
[Header("스킬1 회복 지속 시간")]
public float Skill1LifeTime = 6f;
[Header("스킬1 회복 딜레이")]
public float Skill1DelayTime = 1f;
[Header("스킬1 회복 딜레이 당 회복량")]
public float Skill1PerHeal = 0.01f;
[Header("---------------------------------------")]
public bool Perforation_Line;
[Header("스킬2 쿨타임")]
public float Skill2CoolTime = 18f;
[Header("스킬2 차징시간")]
public float Skill2ChargingTime = 3f;
[Header("스킬2 데미지")]
public float Skill2Dmg = 5.2f;
[Header("스킬2 독 지속 시간")]
public float Skill2PoisonTime = 5f;
[Header("스킬2 독 데미지 딜레이")]
public float Skill2PoisonGapTime = 1f;
[Header("스킬2 독 데미지")]
public float Skill2PoisonDmg = .3f;
[Header("스킬2 에어본 지속 시간")]
public float Skill2AirborneTime = 1.5f;
SkillListTableData m_Poison = new SkillListTableData { e_SkillExtraType = eSkillExtraType.Poison, f_ExtraValue4 = 1f };
public override void Set(MonsterTableData mobtable, Vector3 pos, Action<int> actDie, int order, float noDmgTime = 0f)
{
base.Set(mobtable, pos, actDie, order, noDmgTime);
Load_Indicator("BossFlowerDryad_Skill2_Indicator", 0);
m_Poison.f_ExtraValue1 = Skill2PoisonTime;
m_Poison.f_ExtraValue2 = Skill2PoisonGapTime;
m_Poison.f_ExtraValue3 = Skill2PoisonDmg;
CoolTime_Skill1 = 1f;
CoolTime_Skill2 = 2f;
}
protected override void Init(bool initSkill1CoolTime, bool initSkill2CoolTime)
{
base.Init(initSkill1CoolTime, initSkill2CoolTime);
if (initSkill1CoolTime) CoolTime_Skill1 = Skill1CoolTime;
if (initSkill2CoolTime) CoolTime_Skill2 = Skill2CoolTime;
}
protected override void Update()
{
base.Update();
if (IsDead() || IsStop) return;
if (UseSkillIndex == 1 && MobStatus != eMobStatus.Skill)
StartCoroutine(Co_Skill1());
else if (UseSkillIndex == 2 && MobStatus != eMobStatus.Skill)
StartCoroutine(Co_Skill2());
}
IEnumerator Co_Skill1()
{
Change_MobStatus(eMobStatus.Skill);
AnimationPlay("boss_skill1charging");
InGameInfo.Ins.Show_Effect("Effect_FlowerDryad_Skill1Charging", this, eEffectLocation.Mid, Skill1ChargingTime);
yield return new WaitForSeconds(Skill1ChargingTime);
AnimationPlay("boss_skill1end");
yield return new WaitForSeconds(0.5f);
InGameInfo.Ins.Show_Effect("Effect_FlowerDryad_Skill1", Get_position());
var actors = ActorInfo.Ins.Get_AlliesActors(m_Enemy, Get_position(), Skill1FindDist);
for (int i = 0; i < actors.Count; i++)
{
actors[i].Heal(Skill1Heal);
InGameInfo.Ins.Show_Effect("Effect_Heal", actors[i], eEffectLocation.Bottom, 2f);
}
yield return new WaitForSeconds(0.5f);
for (int i = 0; i < actors.Count; i++)
actors[i].DotHeal(Skill1LifeTime, Skill1DelayTime, actors[i].Get_MaxHP() * Skill1PerHeal, 0, "Effect_FlowerDryad_Heal");
Check_Battle();
Init(true, false);
}
IEnumerator Co_Skill2()
{
Change_MobStatus(eMobStatus.Skill);
AnimationPlay("boss_skill2");
dic_indicator[0].SetActive(true);
dic_indicator[0].transform.position = Get_position();
InGameInfo.Ins.Show_Effect("Effect_FlowerDryad_Skill2Charging", Get_position());
yield return new WaitForSeconds(Skill2ChargingTime);
dic_indicator[0].SetActive(false);
AnimationPlay("boss_skill2attack");
yield return new WaitForSeconds(0.1f);
InGameInfo.Ins.Show_Effect("Effect_FlowerDryad_Skill2", this, eEffectLocation.Bottom, m_MonsterTableData.f_ProjectileLifeTime3);
yield return new WaitForSeconds(3f);
Check_Battle();
Init(false, true);
}
protected override float Get_Skill2Dmg() { return Skill2Dmg; }
protected override void Set_Skill2Projectile(ProjectileBase pb)
{
var pd = pb.Get_ProjectTileData();
pd.e_SkillExtraType = m_Poison.e_SkillExtraType;
pd.m_skillTypeConfigTable = table_skilltypeconfig.Ins.Get_Data_orNull(pd.e_SkillExtraType);
pd.m_SkillListTableData = m_Poison;
pd.Action_OnHit = hitter => { hitter.KnockedAirborne(Skill2AirborneTime); };
}
}