using System; using System.Collections; using UnityEngine; public class Boss_BrotherPenguin : BossMobActor { [Header("스킬1 쿨타임")] public float Skill1CoolTime = 12f; [Header("스킬1 차징시간")] public float Skill1ChargingTime = 3f; [Header("스킬1 데미지")] public float Skill1Dmg = 3.2f; [Header("스킬1 냉기 시간")] public float Skill1FrostTime = 3f; [Header("스킬1 냉기 공속 감소")] public float Skill1AtkSpd = 0.7f; [Header("스킬1 냉기 이속 감소")] public float Skill1MovSpd = 0.7f; [Header("스킬1 넉백 시간")] public float Skill1KnockBackTime = 0.5f; [Header("스킬1 넉백 속도")] public float Skill1KnockBackSpeed = 4f; [Header("---------------------------------------")] public bool Perforation_Line; [Header("스킬2 쿨타임")] public float Skill2CoolTime = 20f; [Header("스킬2 데미지")] public float Skill2Dmg = 5f; [Header("스킬2 보호막 지속시간")] public float Skill2LifeTime = 12f; [Header("스킬2 보호막 생명력 비율")] public float Skill2BarrierRate = 0.25f; [Header("스킬2 차징시간")] public float Skill2ChargingTime = 3f; SkillListTableData m_Frost = new SkillListTableData { e_SkillExtraType = eSkillExtraType.Frost, f_ExtraValue4 = 1f }; SkillListTableData m_Barrier = new SkillListTableData { e_SkillExtraType = eSkillExtraType.Barrier_Boss }; public override void Set(MonsterTableData mobtable, Vector3 pos, Action actDie, int order, float noDmgTime = 0f) { base.Set(mobtable, pos, actDie, order, noDmgTime); Load_Indicator("BrotherPenguin_Skill1_Indicator", 0); Load_Indicator("BrotherPenguin_Skill2_Indicator", 1); m_Frost.f_ExtraValue1 = Skill1FrostTime; m_Frost.f_ExtraValue2 = Skill1AtkSpd; m_Frost.f_ExtraValue3 = Skill1MovSpd; m_Barrier.e_SkillExtraType = eSkillExtraType.Barrier_Boss; m_Barrier.f_ExtraValue2 = Skill2BarrierRate; 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) { if (dic_ccData[eCC.Barrier].CCTime <= 0f) StartCoroutine(Co_Skill2()); else UseSkillIndex = 0; } } IEnumerator Co_Skill1() { Change_MobStatus(eMobStatus.Skill); AnimationPlay("boss_skill1charging"); InGameInfo.Ins.Show_Effect("Effect_BrotherPenguin_Charging", this, eEffectLocation.Mid, Skill1ChargingTime); dic_indicator[0].SetActive(true); dic_indicator[0].transform.position = Get_position(); yield return new WaitForSeconds(Skill1ChargingTime); AnimationPlay("boss_skill1attack"); dic_indicator[0].SetActive(false); yield return new WaitForSeconds(0.5f); Check_Battle(); Init(true, false); } protected override float Get_Skill1Dmg() { return Skill1Dmg; } protected override Vector3 Get_Skill1Pos() { return dic_indicator[0].transform.position; } protected override void Set_Skill1Projectile(ProjectileBase pb) { var pd = pb.Get_ProjectTileData(); pd.e_SkillExtraType = m_Frost.e_SkillExtraType; pd.m_skillTypeConfigTable = table_skilltypeconfig.Ins.Get_Data_orNull(pd.e_SkillExtraType); pd.m_SkillListTableData = m_Frost; pd.Action_OnHit = hitter => { if (hitter.IsMainPC()) TimeMgr.Ins.Set_TimeScale(); hitter.Knockback_byHitter(Get_position(), Skill1KnockBackTime, Skill1KnockBackSpeed, null, true); }; } IEnumerator Co_Skill2() { Change_MobStatus(eMobStatus.Skill); AnimationPlay("boss_skill2"); dic_indicator[1].SetActive(true); dic_indicator[1].transform.position = Get_position(); float adddelaytime = 0.5f; InGameInfo.Ins.Show_Effect("Effect_BrotherPenguin_Skill2Charging", this, eEffectLocation.Mid, 6f); yield return new WaitForSeconds(Skill2ChargingTime); dic_indicator[1].SetActive(false); AnimationPlay("boss_skill2end"); yield return new WaitForSeconds(adddelaytime); Show_Barrier(m_Barrier, Skill2LifeTime); float battletime = 0.25f; yield return new WaitForSeconds(battletime); Check_Battle(); CoolTime_Skill2 = 10000f; // 배리어 끝나기 전 까진 쿨타임 안 돈다는 뜻 yield return new WaitForSeconds(Skill2LifeTime - battletime); Init(false, true); } protected override float Get_Skill2Dmg() { return Skill2Dmg; } protected override void Set_Skill2Projectile(ProjectileBase pb) { var pd = pb.Get_ProjectTileData(); pd.Action_OnHit = hitter => { if (hitter.IsMainPC()) TimeMgr.Ins.Set_TimeScale(); hitter.Knockback_byHitter(Get_position(), 0.5f, 4.5f, null, true); }; } }