using UnityEngine;
|
|
using Snxxz.UI;
|
using System.Collections.Generic;
|
using System;
|
|
public class AI_BossDSX : SampleAI
|
{
|
private float m_FirstSkill_HpPer;
|
private float m_SplitSkill_HpPer;
|
private float m_Fabao_HpPer;
|
private float m_Finished_HpPer;
|
|
private float m_TimeCount;
|
|
private static byte m_Step;
|
public static byte GetStep()
|
{
|
return m_Step;
|
}
|
|
private byte m_SubStep;
|
|
private UIEffect m_UIEffect;
|
|
private SkillContainer m_SkillContainer;
|
private SkillContainer skillContainer
|
{
|
get { return m_SkillContainer ?? (m_SkillContainer = GameObject.FindObjectOfType<SkillContainer>()); }
|
}
|
|
public AI_BossDSX(GA_NpcClientFightBoss owner, Vector3 bornPosition)
|
: base(owner, bornPosition)
|
{
|
m_Step = 0;
|
m_SubStep = 0;
|
|
m_CanCastSkill = false;
|
|
FuncConfigConfig _funcConfig = FuncConfigConfig.Get("PreFight_Skill1_HpPer");
|
m_FirstSkill_HpPer = float.Parse(_funcConfig.Numerical1) * Constants.F_DELTA;
|
|
_funcConfig = FuncConfigConfig.Get("PreFight_Skill3_HpPer");
|
m_SplitSkill_HpPer = float.Parse(_funcConfig.Numerical1) * Constants.F_DELTA;
|
|
_funcConfig = FuncConfigConfig.Get("PreFight_Fabao_HpPer");
|
m_Fabao_HpPer = float.Parse(_funcConfig.Numerical1) * Constants.F_DELTA;
|
|
_funcConfig = FuncConfigConfig.Get("PreFight_Finish_HpPer");
|
m_Finished_HpPer = float.Parse(_funcConfig.Numerical1) * Constants.F_DELTA;
|
|
m_BaseAtkSkillID = 10027;
|
}
|
|
protected override void OnUpdate()
|
{
|
if (PreFightMission.Instance.updateAI == false)
|
{
|
return;
|
}
|
|
base.OnUpdate();
|
|
if (GA_Hero.s_MapSwitching)
|
{
|
return;
|
}
|
|
switch (m_Step)
|
{
|
case 0:// 等待释放冲锋技能
|
|
if (m_Owner.ActorInfo.Hp * 1f / m_Owner.ActorInfo.MaxHp < m_FirstSkill_HpPer)
|
{
|
m_Owner.ActorInfo.Hp = (uint)(m_Owner.ActorInfo.MaxHp * m_FirstSkill_HpPer);
|
|
m_Owner.CastSkill(10028);
|
|
m_TimeCount = 0;
|
|
m_Step = 11;
|
|
return;
|
}
|
|
break;
|
case 11:
|
|
return;
|
|
case 1:// 等待冲锋技能释放结束
|
|
if (m_Owner.ActorInfo.Hp * 1f / m_Owner.ActorInfo.MaxHp < m_FirstSkill_HpPer)
|
{
|
m_Owner.ActorInfo.Hp = (uint)(m_Owner.ActorInfo.MaxHp * m_FirstSkill_HpPer);
|
}
|
|
if (m_Owner.IsIdle() || m_Owner.IsHurt() || m_Owner.IsRun())
|
{
|
m_Step = 4;
|
PreFightMission.Instance.faBaoSkillShow = true;
|
}
|
|
return;
|
|
case 4:// 准备表演分身
|
|
if (m_Owner.ActorInfo.Hp * 1f / m_Owner.ActorInfo.MaxHp < m_SplitSkill_HpPer)
|
{
|
m_Owner.ActorInfo.Hp = (uint)(m_Owner.ActorInfo.MaxHp * m_SplitSkill_HpPer);
|
}
|
|
switch (m_SubStep)
|
{
|
case 0:// 走到出生点
|
|
float _distSqrt = MathUtility.DistanceSqrtXZ(m_Owner.Pos, BornPos);
|
if (_distSqrt > 0.5f)
|
{
|
m_Owner.MoveToPosition(BornPos);
|
}
|
else
|
{
|
m_SubStep = 0;
|
m_Step = 41;
|
m_TimeCount = 0;
|
PlayerDatas.Instance.hero.Behaviour.StopKillUntilDieAI();
|
|
DialogConfig _config = DialogConfig.Get(1005);
|
|
StoryHintModel _model = ModelCenter.Instance.GetModel<StoryHintModel>();
|
_model.icon = _config.icon;
|
_model.name = _config.name;
|
_model.content = _config.content;
|
_model.duration = 3;
|
_model.onClosed = null;
|
|
WindowCenter.Instance.Open<StoryHintWin>();
|
|
PreFightMission.Instance.updateAI = false;
|
|
m_Owner.Forward = MathUtility.ForwardXZ(PlayerDatas.Instance.hero.Pos, m_Owner.Pos);
|
}
|
|
return;
|
}
|
|
break;
|
case 41:
|
case 42:
|
case 43:
|
|
return;
|
|
case 5:// 等待触发法宝
|
|
if (m_Owner.ActorInfo.Hp * 1f / m_Owner.ActorInfo.MaxHp < m_Fabao_HpPer)
|
{
|
m_Owner.ActorInfo.Hp = (uint)(m_Owner.ActorInfo.MaxHp * m_Fabao_HpPer);
|
|
GA_Hero.s_MapSwitching = true;
|
|
GuideDialogueModel _model = ModelCenter.Instance.GetModel<GuideDialogueModel>();
|
_model.dialogID = 1004;
|
_model.onClose = () =>
|
{
|
// 开启遮罩和遮罩摄像机
|
CameraController.Instance.Mask.SetActive(true);
|
CameraController.Instance.MaskCamera.gameObject.SetActive(true);
|
CameraController.Instance.MaskCamera.enabled = true;
|
PlayerDatas.Instance.hero.ReleaseShadow();
|
|
PreFightMission.Instance.Step_FabaoEffect();
|
|
SoundPlayer.Instance.PlayBackGroundMusicOneShot(48);
|
};
|
|
WindowCenter.Instance.Open<GuideDialogueWin>();
|
|
if (PlayerDatas.Instance.hero.State == E_ActorState.AutoRun)
|
{
|
PlayerDatas.Instance.hero.StopPathFind();
|
}
|
|
PlayerDatas.Instance.hero.StopRush();
|
PlayerDatas.Instance.hero.IdleImmediate();
|
|
List<GActor> _actorList = GAMgr.Instance.GetGroupList(E_ActorGroup.Enemy);
|
if (_actorList != null)
|
{
|
for (int i = 0; i < _actorList.Count; ++i)
|
{
|
if (_actorList[i].State == E_ActorState.AutoRun)
|
{
|
_actorList[i].StopPathFind();
|
}
|
|
if (!_actorList[i].IsIdle())
|
{
|
_actorList[i].IdleImmediate();
|
}
|
}
|
}
|
|
m_Step = 6;
|
|
return;
|
}
|
|
break;
|
|
case 6:// 等待法宝逻辑结束
|
|
if (m_Owner.ActorInfo.Hp * 1f / m_Owner.ActorInfo.MaxHp < m_Fabao_HpPer)
|
{
|
m_Owner.ActorInfo.Hp = (uint)(m_Owner.ActorInfo.MaxHp * m_Fabao_HpPer);
|
}
|
|
if (WindowCenter.Instance.Get<TreasureNewGotWin>() == null
|
|| WindowCenter.Instance.Get<TreasureNewGotWin>().isActiveAndEnabled == false)
|
{
|
m_Step = 7;
|
}
|
|
return;
|
|
case 7:// 等待任务结束
|
|
if (m_Owner.ActorInfo.Hp * 1f / m_Owner.ActorInfo.MaxHp <= m_Finished_HpPer)
|
{
|
m_Owner.ActorInfo.Hp = (uint)(m_Owner.ActorInfo.MaxHp * m_Finished_HpPer);
|
|
GA_Hero.s_MapSwitching = true;
|
m_Owner.IdleImmediate();
|
|
SelectionManager.Release(SelectionManager.E_Type.Red);
|
SelectionManager.Request(SelectionManager.E_Type.Green, m_Owner);
|
|
PreFightMission.Instance.Step_StartScale();
|
|
m_Step = 8;
|
}
|
|
break;
|
case 8:// boss缩小
|
return;
|
}
|
|
if (m_Owner.SkillMgr.DoingPrepareSkill)
|
{
|
return;
|
}
|
|
if (m_Owner.SkillMgr.CurCastSkill != null
|
&& m_Owner.SkillMgr.CurCastSkill.SkillCompelete == false)
|
{
|
return;
|
}
|
|
if (m_Owner.NextAction == 300)
|
{
|
return;
|
}
|
|
switch (m_AIStatus)
|
{
|
case E_AIStatus.Attack:
|
|
BaseAttack();
|
|
break;
|
|
case E_AIStatus.Patrol:
|
|
Patrol();
|
|
break;
|
case E_AIStatus.MoveToTarget:
|
|
MoveToTarget();
|
|
break;
|
case E_AIStatus.MoveToBornPosMin:
|
|
MoveToBornPosMin();
|
|
break;
|
}
|
}
|
|
private void BossFinishedSkillShow()
|
{
|
PreFightMission.Instance.OnFinishedBossSkillShow -= BossFinishedSkillShow;
|
Skill _skill = m_Owner.SkillMgr.Get(10026);
|
_skill.cd = 0;
|
m_Owner.CastSkill(10026);
|
m_Step = 43;
|
m_TimeCount = 0;
|
|
GA_Hero.s_MapSwitching = false;
|
}
|
|
private void OnCastSkill(int id)
|
{
|
HeroBehaviour.OnUserClickSkill -= OnCastSkill;
|
|
if (id == 190)
|
{
|
Time.timeScale = 1;
|
GA_Hero.s_MapSwitching = false;
|
if (PreFightMission.Instance.m_HuaShouEffect)
|
{
|
EffectMgr.Instance.RecyleUIEffect(1050, PreFightMission.Instance.m_HuaShouEffect.gameObject);
|
PreFightMission.Instance.m_HuaShouEffect = null;
|
}
|
|
if (m_UIEffect)
|
{
|
EffectMgr.Instance.RecyleUIEffect(m_UIEffect.effect, m_UIEffect.gameObject);
|
m_UIEffect = null;
|
}
|
|
Transform _temp1 = WindowCenter.Instance.uiRoot.baseCanvas.Find("MainInterfaceWin/JoyStick");
|
_temp1.gameObject.SetActive(true);
|
|
WindowCenter.Instance.Close<NewGuideWin>();
|
}
|
}
|
|
protected override void OutOfSleepUpdate()
|
{
|
base.OutOfSleepUpdate();
|
|
if (m_Step == 11)
|
{
|
m_TimeCount += Time.deltaTime;
|
if (m_TimeCount > 0.75f)
|
{
|
PlayerDatas.Instance.hero.Behaviour.StopKillUntilDieAI();
|
skillContainer.blinkSkill.GetComponent<SkillButton>().enabled = false;
|
skillContainer.blinkSkill.transform.localScale = Vector3.one;
|
|
Transform _temp = skillContainer.blinkSkill.transform.Find("Img_BackGround");
|
m_UIEffect = EffectMgr.Instance.PlayUIEffect(1095, 4500, _temp, false);
|
|
_temp = WindowCenter.Instance.uiRoot.baseCanvas.Find("MainInterfaceWin/JoyStick");
|
_temp.gameObject.SetActive(false);
|
|
|
|
m_Step = 12;
|
m_TimeCount = 0;
|
}
|
}
|
else if (m_Step == 12)
|
{
|
m_TimeCount += Time.deltaTime;
|
if (m_TimeCount > 0.4f)
|
{
|
Time.timeScale = 0;
|
skillContainer.blinkSkill.GetComponent<SkillButton>().enabled = true;
|
GA_Hero.s_MapSwitching = true;
|
NewGuideModel _model = ModelCenter.Instance.GetModel<NewGuideModel>();
|
_model.showMask = true;
|
_model.content = "点击<color=#00FF00>翻滚</color>按钮\r\n躲避<color=#00FF00>预警</color>技能";
|
_model.componentPath = "BaseCanvas/MainInterfaceWin/SkillButtonTip/Pivot/CastSkillTip/Skill_Panel/Skill_Group1/Btn_BlinkSkill/Img_BackGround";
|
_model.size = new Vector2(62, 62);
|
_model.direction = 2;
|
_model.pressedClose = false;
|
_model.clickClosed = true;
|
_model.onClose = () =>
|
{
|
Time.timeScale = 1;
|
GA_Hero.s_MapSwitching = false;
|
if (PreFightMission.Instance.m_HuaShouEffect)
|
{
|
EffectMgr.Instance.RecyleUIEffect(1050, PreFightMission.Instance.m_HuaShouEffect.gameObject);
|
PreFightMission.Instance.m_HuaShouEffect = null;
|
}
|
|
PlayerDatas.Instance.hero.CastSkill(190);
|
|
if (m_UIEffect)
|
{
|
EffectMgr.Instance.RecyleUIEffect(m_UIEffect.effect, m_UIEffect.gameObject);
|
m_UIEffect = null;
|
}
|
|
Transform _temp1 = WindowCenter.Instance.uiRoot.baseCanvas.Find("MainInterfaceWin/JoyStick");
|
_temp1.gameObject.SetActive(true);
|
};
|
|
WindowCenter.Instance.Open<NewGuideWin>();
|
|
HeroBehaviour.OnUserClickSkill += OnCastSkill;
|
|
Transform _temp = skillContainer.blinkSkill.transform.Find("Img_BackGround");
|
PreFightMission.Instance.m_HuaShouEffect = EffectMgr.Instance.PlayUIEffect(1050, 4500, _temp, true);
|
|
m_Step = 1;
|
}
|
}
|
else if (m_Step == 41)
|
{
|
m_TimeCount += Time.deltaTime;
|
if (m_TimeCount > 1f)
|
{
|
PreFightMission.Instance.Step_Boss_SkillShow();
|
PreFightMission.Instance.OnFinishedBossSkillShow += BossFinishedSkillShow;
|
|
GA_Hero.s_MapSwitching = true;
|
|
m_Step = 42;
|
}
|
}
|
else if (m_Step == 43)
|
{
|
m_TimeCount += Time.deltaTime;
|
if (m_TimeCount > 1.2f)
|
{
|
PreFightMission.Instance.updateAI = true;
|
m_Step = 5;
|
PreFightMission.Instance.faBaoSkillShow = false;
|
}
|
}
|
}
|
}
|