using System; using System.Collections; using UnityEngine; public class Boss_QueenUndead : BossMobActor { public GameObject go_attackeffect; [Header("스킬1 쿨타임")] public float Skill1CoolTime = 6f; [Header("스킬1 지속 시간")] public float Skill1LifeTime = 5f; [Header("스킬1 마나번")] public float Skill1Manaburn = 0.02f; [Header("스킬1 발동거리")] public float Skill1Distance = 15f; [Header("---------------------------------------")] public bool Perforation_Line; [Header("스킬2 쿨타임")] public float Skill2CoolTime = 18f; [Header("스킬2 차징시간")] public float Skill2ChargingTime = 2f; [Header("스킬2 데미지")] public float Skill2Dmg = 3.2f; [Header("스킬2 뒤로 점프하는 거리")] public float Skill2BackDist = 7.5f; [Header("스킬2 뒤로 점프하는 시간")] public float Skill2BackDuration = 1.5f; SkillListTableData m_SilenceCurse = new SkillListTableData { e_SkillExtraType = eSkillExtraType.SilenceCurse, f_ExtraValue4 = 1f }; public override void Set(MonsterTableData mobtable, Vector3 pos, Action actDie, int order, float noDmgTime = 0f) { base.Set(mobtable, pos, actDie, order, noDmgTime); go_attackeffect.SetActive(false); Load_Indicator("UndeadQueen_Skill2_Indicator", 0); m_SilenceCurse.f_ExtraValue1 = Skill1LifeTime; m_SilenceCurse.f_ExtraValue2 = Skill1Manaburn; 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; } public override void Play_Attack(int _attack, float _as, Action actsuccess = null) { go_attackeffect.SetActive(false); base.Play_Attack(_attack, _as, () => { CoroutineMgr.Ins.Set_Coroutine(() => { go_attackeffect.SetActive(true); }, 0.1f); }); } protected override void Update() { base.Update(); if (IsDead() || IsStop) return; if (UseSkillIndex == 1 && MobStatus != eMobStatus.Skill) { if (isTarget && Vector3.Distance(m_Target.Get_position(), Get_position()) >= Skill1Distance) StartCoroutine(Co_Skill1()); else UseSkillIndex = 0; } else if (UseSkillIndex == 2 && MobStatus != eMobStatus.Skill) StartCoroutine(Co_Skill2()); } IEnumerator Co_Skill1() { Change_MobStatus(eMobStatus.Skill); AnimationPlay("boss_skill1"); yield return new WaitForSeconds(1.5f); Check_Battle(); Init(true, false); } protected override void Set_Skill1Projectile(ProjectileBase pb) { var pd = pb.Get_ProjectTileData(); pd.e_SkillExtraType = eSkillExtraType.SilenceCurse; pd.m_skillTypeConfigTable = table_skilltypeconfig.Ins.Get_Data_orNull(pd.e_SkillExtraType); pd.m_SkillListTableData = m_SilenceCurse; } protected override Vector3 Get_Skill1Pos() { return m_Target.Get_position(); } IEnumerator Co_Skill2() { Change_MobStatus(eMobStatus.Skill); AnimationPlay("boss_skill2charging"); InGameInfo.Ins.Show_Effect("Effect_QueenUndeadCharging", this, eEffectLocation.Bottom, Skill2ChargingTime); InGameInfo.Ins.Show_Effect("Effect_QueenUndeadSkill2Start", Get_position()); dic_indicator[0].transform.position = Get_position(); dic_indicator[0].SetActive(true); yield return new WaitForSeconds(Skill2ChargingTime); AnimationPlay("boss_skill2attack"); dic_indicator[0].SetActive(false); //yield return new WaitForSeconds(0.5f); //InGameInfo.Ins.Show_Effect("Effect_QueenUndeadSkill2End", Get_position()); yield return new WaitForSeconds(1.0f); 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_SilenceCurse.e_SkillExtraType; pd.m_skillTypeConfigTable = table_skilltypeconfig.Ins.Get_Data_orNull(pd.e_SkillExtraType); pd.m_SkillListTableData = m_SilenceCurse; pd.Action_OnHit = hitter => { if (hitter.IsMainPC()) TimeMgr.Ins.Set_TimeScale(); var pos = (hitter.Get_position() - Get_position()) * Skill2BackDist + hitter.Get_position(); hitter.JumpToPosition(pos, Skill2BackDuration, 1f, true); }; } }