using UnityEngine; using TableConfig; 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()); } } public AI_BossDSX(GA_NpcClientFightBoss owner, Vector3 bornPosition) : base(owner, bornPosition) { m_Step = 0; m_SubStep = 0; m_CanCastSkill = false; FuncConfigConfig _funcConfig = Config.Instance.Get("PreFight_Skill1_HpPer"); m_FirstSkill_HpPer = float.Parse(_funcConfig.Numerical1) * Constants.F_DELTA; _funcConfig = Config.Instance.Get("PreFight_Skill3_HpPer"); m_SplitSkill_HpPer = float.Parse(_funcConfig.Numerical1) * Constants.F_DELTA; _funcConfig = Config.Instance.Get("PreFight_Fabao_HpPer"); m_Fabao_HpPer = float.Parse(_funcConfig.Numerical1) * Constants.F_DELTA; _funcConfig = Config.Instance.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 = Config.Instance.Get(1005); StoryHintModel _model = ModelCenter.Instance.GetModel(); _model.icon = _config.icon; _model.name = _config.name; _model.content = _config.content; _model.duration = 3; _model.onClosed = null; WindowCenter.Instance.Open(); 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(); _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(); if (PlayerDatas.Instance.hero.State == E_ActorState.AutoRun) { PlayerDatas.Instance.hero.StopPathFind(); } PlayerDatas.Instance.hero.StopRush(); PlayerDatas.Instance.hero.IdleImmediate(); List _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() == null || WindowCenter.Instance.Get().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(); } } 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().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().enabled = true; GA_Hero.s_MapSwitching = true; NewGuideModel _model = ModelCenter.Instance.GetModel(); _model.showMask = true; _model.content = "点击翻滚按钮\r\n躲避预警技能"; _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(); 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; } } } }