133 lines
5.1 KiB
C#
133 lines
5.1 KiB
C#
using System;
|
|
using System.Collections;
|
|
using UnityEngine;
|
|
using WebSocketSharp;
|
|
|
|
public class Boss_Shaga : BossMobActor
|
|
{
|
|
[Header("스킬1 쿨타임")]
|
|
public float Skill1CoolTime = 18f;
|
|
[Header("스킬1 데미지")]
|
|
public float Skill1Dmg = 1.6f;
|
|
[Header("스킬1 디버프 시간")]
|
|
public float Skill1FrostTime = 6f;
|
|
[Header("스킬1 공속 감소")]
|
|
public float Skill1AtkSpd = 0.5f;
|
|
[Header("스킬1 이속 감소")]
|
|
public float Skill1MovSpd = 0.5f;
|
|
[Header("---------------------------------------")]
|
|
public bool Perforation_Line;
|
|
[Header("스킬2 쿨타임")]
|
|
public float Skill2CoolTime = 20f;
|
|
[Header("스킬2 쿨타임")]
|
|
public float Skill2ChargingTime = 3f;
|
|
[Header("스킬2 소환물 유지 시간")]
|
|
public float Skill2SummonLifeTime = 12f;
|
|
[Header("스킬2 소환 몬스터 ID")]
|
|
public int Skill2SummonMobID = 176;
|
|
[Header("스킬2 소환 갯수")]
|
|
public int Skill2SummonCount = 2;
|
|
[Header("스킬2 스탯 계승")]
|
|
public float Skill2StatRate = 0.5f;
|
|
|
|
SkillListTableData m_Frost = new SkillListTableData { e_SkillExtraType = eSkillExtraType.Frost, 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("BossShaga_Skill1_Indicator", 0);
|
|
|
|
m_Frost.f_ExtraValue1 = Skill1FrostTime;
|
|
m_Frost.f_ExtraValue2 = Skill1AtkSpd;
|
|
m_Frost.f_ExtraValue3 = Skill1MovSpd;
|
|
|
|
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_skill1");
|
|
dic_indicator[0].SetActive(true);
|
|
dic_indicator[0].transform.position = DSUtil.Get_RandomPos_onNavMesh(Get_position(), 2f, 3f);
|
|
|
|
yield return new WaitForSeconds(0.5f);
|
|
|
|
dic_indicator[0].SetActive(false);
|
|
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 pc = pb as Projectile_Curved;
|
|
pc.Launch_Curved(Get_position(), Get_Skill1Pos(), 1.5f, 4f, true, () =>
|
|
{
|
|
ProjectileInfo.Ins.Shoot_Projectile("FieldBoss/Shaga_Skill1Ground", this, null, 1f,
|
|
pc.transform.position, Skill1FrostTime, 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;
|
|
});
|
|
});
|
|
}
|
|
|
|
IEnumerator Co_Skill2()
|
|
{
|
|
Change_MobStatus(eMobStatus.Skill);
|
|
AnimationPlay("boss_skill2charging");
|
|
InGameInfo.Ins.Show_Effect("Effect_Shaga_Charging", this, eEffectLocation.Mid, Skill2ChargingTime);
|
|
|
|
yield return new WaitForSeconds(Skill2ChargingTime);
|
|
AnimationPlay("boss_skill2attack");
|
|
// 무적 상태의 소환물 2기 소환
|
|
var mobData = table_monsterlist.Ins.Get_Data_orNull(Skill2SummonMobID);
|
|
for (int i = 0; i < Skill2SummonCount; i++)
|
|
{
|
|
AddrResourceMgr.Ins.LoadObject<GameObject>(mobData.s_MonsterPrefab, handle =>
|
|
{
|
|
var mob = DSUtil.Get_Clone<MobActor>(handle.Result, transform.parent);
|
|
AddrResourceMgr.Ins.Set_AddressableReleaseSelf(mob.gameObject);
|
|
ActorInfo.Ins.Add_Actor(mob, eRole.Mob, m_MonsterAppearData.n_SpawnerID, mobData.s_MonsterPrefab);
|
|
mob.Set(true, null, null, m_MonsterAppearData.n_SpawnerID, false);
|
|
var summonpos = DSUtil.Get_RandomPos_onNavMesh(Get_position(), 2f);
|
|
mob.Set(mobData, summonpos, null, 0, Skill2SummonLifeTime);
|
|
InGameInfo.Ins.Show_Effect("Effect_Shaga_Summon", summonpos);
|
|
mob.m_SubRole = eSubRol.Summon;
|
|
mob.On_Regen();
|
|
mob.Get_StatInfo().Reset_byStatInfo(Get_StatInfo(), Skill2StatRate);
|
|
list_summon.Add(mob);
|
|
});
|
|
}
|
|
|
|
yield return new WaitForSeconds(0.5f);
|
|
Check_Battle();
|
|
Init(false, true);
|
|
|
|
yield return new WaitForSeconds(Skill2SummonLifeTime - 0.5f);
|
|
list_summon.ForEach(f => f.Off());
|
|
}
|
|
} |