using System.Collections; using UnityEngine; public class Boss_IceGolem : BossMobActor { [Header("스킬1 쿨타임")] public float Skill1CoolTime = 8f; [Header("스킬1 타겟 위치와의 거리")] public float Skill1TargetRange = 2f; [Header("스킬1 달려가는 속도")] public float Skill1Speed = 5f; [Header("스킬1 데미지")] public float Skill1Dmg = 3.5f; [Header("스킬1 스턴 시간")] public float Skill1StunTime = 2f; [Header("스킬1 인디케이터")] public string Skill1Indicator = "IceGolem_Skill1_Indicator"; [Header("---------------------------------------")] public bool Perforation_Line; [Header("스킬2 쿨타임")] public float Skill2CoolTime = 10f; [Header("스킬2 달려가는 속도")] public float Skill2Speed = 7f; [Header("스킬2 데미지")] public float Skill2Dmg = 3.5f; [Header("스킬2 넉백 시간")] public float Skill2KnockBackTime = 0.3f; [Header("스킬2 스턴 시간")] public float Skill2StunTime = 1f; [Header("스킬2 인디케이터")] public string Skill2Indicator = "IceGolem_Skill2_Indicator"; public override void Set(bool isEnemy, Actor owner, ServerData sdata, int _id, bool _stop, bool _ui = false) { base.Set(isEnemy, owner, sdata, _id, _stop, _ui); Load_Indicator(Skill1Indicator, 0); Load_Indicator(Skill2Indicator, 1); 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 (isTarget) { if (UseSkillIndex == 1 && MobStatus != eMobStatus.Skill) { Run_byUseSkill(Skill1TargetRange, Skill1Speed, success => { AnimationPlay("boss_skill1start"); dic_indicator[0].transform.position = Get_position(); dic_indicator[0].SetActive(true); Jump(1.0f, 3f, 2f, 5f, () => { dic_indicator[0].SetActive(false); Init(true, false); AnimationPlay("boss_skill1attack"); }); }); } else if (UseSkillIndex == 2 && MobStatus != eMobStatus.Skill) StartCoroutine(Co_Skill2()); } } IEnumerator Co_Skill2() { Change_MobStatus(eMobStatus.Skill); AnimationPlay("boss_skill2start"); dic_indicator[1].SetActive(true); dic_indicator[1].transform.position = Get_position(); if (isTarget) dic_indicator[1].transform.LookAt(m_Target.transform); var chargingTime = 3f; InGameInfo.Ins.Show_Effect("Effect_IceGolem_Skill2Charging", this, eEffectLocation.Bottom, chargingTime); float t = 0f; while (t < chargingTime) { yield return null; t += Time.deltaTime; if (isTarget) { transform.LookAt(m_Target.transform); dic_indicator[1].transform.LookAt(m_Target.transform); } else break; } dic_indicator[1].SetActive(false); if (isTarget) { InGameInfo.Ins.Show_Effect("Effect_IceGolem_Skill2Dash", this, eEffectLocation.Mid, 5f, effect => { effect.transform.eulerAngles = transform.eulerAngles; }); AnimationPlay("boss_skill2runattack"); transform.LookAt(m_Target.transform); m_NavMeshAgent.stoppingDistance = 0.1f; Set_Path(Get_PositionFoward_OnNavMesh(18f)); // IceGolem_Skill2_Indicator 길이 while (!Complete_Destination()) { m_NavMeshAgent.speed = Skill2Speed; yield return null; } m_NavMeshAgent.stoppingDistance = m_NavStopDistance; m_NavMeshAgent.speed = Get_MoveSpeed(); } Init(false, true); } protected override float Get_Skill1Dmg() { return Skill1Dmg; } protected override Vector3 Get_Skill1Pos() { return Get_Center_position(); } protected override void Set_Skill1Projectile(ProjectileBase pb) { var pd = pb.Get_ProjectTileData(); pd.Set_SkillExtra_MakeSkillListTableData(eSkillExtraType.Stun, Skill1StunTime); } protected override float Get_Skill2Dmg() { return Skill2Dmg; } protected override Vector3 Get_Skill2Pos() { return Get_position(); } protected override void Set_Skill2Projectile(ProjectileBase pb) { var pd = pb.Get_ProjectTileData(); pd.Set_SkillExtra_MakeSkillListTableData(eSkillExtraType.KnockBack_byHitter, Skill2KnockBackTime, Skill2StunTime); } }