//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Saturday, October 14, 2017 //-------------------------------------------------------- using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class MainInterfaceWin : Window { [SerializeField] InGamePushContainer m_InGamePusher; [SerializeField] SkillContainer m_SkillContainer; [SerializeField] HeadPortraitTip m_HeadPortraitTip; [SerializeField] LowSettingTip m_LowSettingTip; [SerializeField] ChatFrame m_ChatTip; [SerializeField] HighSettingTip m_HighSettingTip; [SerializeField] HighSettingFadeInFadeOut m_HighSettingFadeInFadeOut; [SerializeField] TaskListTip m_TaskListTip;//任务 [SerializeField] TopRightTip m_TopRightTip; [SerializeField] FunctionForecastTip m_FunctionForecastTip;//功能预告 [SerializeField] IsShowXpButton m_IsShowXp;//XP 技能常显 [SerializeField] FairyLeagueRemindBehaviour m_FairyLeagueRemind; [SerializeField] TeamInvitationEntrance m_TeamInvitationEntrance; [SerializeField] FairyCallMemberBehaviour m_FairyCallBehaviour; [SerializeField] MapSwitchingBehaviour m_MapSwitchingBehaviour; [SerializeField] DungeonBossBriefInfoContainer m_BossBriefInfos; [SerializeField] RightBottomFadeInOut m_RightBottomFadeInOut; [SerializeField] IntensifySmoothSlider _ExpSlider;//经验条 [SerializeField] Button _DownButton;//查看经验数值 [SerializeField] Text _ExpRate;//数值 [SerializeField] UIEffect m_UIEffect_A;//经验特效 [SerializeField] UIEffect m_UIEffect_B;//经验特效 [SerializeField] Button _SwitchShowBtn;//切换按钮 [SerializeField] Button m_TaskSwithButton;//关于功能预告 [SerializeField] Transform m_EffectTask;//任务完成特效播放位置 [SerializeField] Transform CopyOfThePanel; [SerializeField] GameObject m_TaskAndTeamTip; [SerializeField] GameObject m_MailObj;//邮件显隐 [SerializeField] MainPositionTween m_MainPositionTween; [SerializeField] MainButtonMisc m_MainButtonMisc; #region private bool TaskSwithBool = true; private float ExpValueFloat = 0; private bool SliderOpen = true; #endregion private List ListBossMapId = new List();//用于boss区域地图id PlayerMainDate onMainModel { get { return ModelCenter.Instance.GetModel(); } } TaskModel onPlayerTask { get { return ModelCenter.Instance.GetModel(); } } BuffModel Buffmodel { get { return ModelCenter.Instance.GetModel(); } } PKModel pKModel { get { return ModelCenter.Instance.GetModel(); } } FairyGrabBossModel fairyGrabBossModel { get { return ModelCenter.Instance.GetModel(); } } FeatureNoticeModel featureNoticeModel { get { return ModelCenter.Instance.GetModel(); } } #region Built-in private bool IsUpdateBool = true; protected override void BindController() { m_MapSwitchingBehaviour.InitAwake(); TaskSwithBool = true; m_MainPositionTween.ShowTaskImmedidately(true); m_MailObj.SetActive(true); ListBossMapId.Clear(); string strBoss = FuncConfigConfig.Get("TaskRetract").Numerical1; string[] bossList = ConfigParse.GetMultipleStr(strBoss);//解析出数组| for (int i = 0; i < bossList.Length; i++) { ListBossMapId.Add(int.Parse(bossList[i])); } } protected override void AddListeners() { UIEventTrigger.Get(_DownButton.gameObject).OnDown = DownButton; UIEventTrigger.Get(_DownButton.gameObject).OnUp = UpButton; _SwitchShowBtn.SetListener(SwitchFunctions); m_TaskSwithButton.SetListener(TaskSwithButton); } protected override void OnPreOpen() { IsUpdateBool = true; SliderOpen = true; m_InGamePusher.Init(); m_SkillContainer.Init(); m_FunctionForecastTip.Init(); m_HeadPortraitTip.Init(); m_LowSettingTip.Init(); m_ChatTip.Init(); m_HighSettingTip.Init(); m_HighSettingFadeInFadeOut.Init(); m_TaskListTip.Init(); m_IsShowXp.Init(); m_TopRightTip.Init(); m_TeamInvitationEntrance.Init(); m_FairyCallBehaviour.Init(); m_MapSwitchingBehaviour.Init(); m_FairyLeagueRemind.Init(); m_MainButtonMisc.Init(); m_RightBottomFadeInOut.Init(); m_BossBriefInfos.gameObject.SetActive(false); ArticleExperience();//关于经验条 CheckChatTipOpen(); PlayerDatas.Instance.playerDataRefreshEvent += Updatefighting; FunctionUnlockFlyObject.functionUnLockShowBeginEvent += UnFlodFunctionArea; GA_Hero.OnEnterOrExitArea += OnEnterOrExitArea; NewBieCenter.Instance.guideBeginEvent += OnGuideBegin; WindowCenter.Instance.windowAfterOpenEvent += WindowAfterEvent; WindowCenter.Instance.windowAfterCloseEvent += WindowAfterEvent; NewBieCenter.Instance.guideBeginEvent += GuideBeginEvent; fairyGrabBossModel.bossGrabHintEvent += BossGrabHintEvent; GlobalTimeEvent.Instance.secondEvent += secondEvent; ProcessCrossServerOneVsOne(); } protected override void OnActived() { m_MainPositionTween.SwitchFunctions(new MainPositionTween.SwitchParam() { immediately = true, showDefault = true, }); m_MainButtonMisc.OnActived(); IsShowTaskPanel();//是否显示任务面板 if (MapUtility.IsDungeon(PlayerDatas.Instance.baseData.MapID)) { m_FunctionForecastTip.gameObject.SetActive(false); } else { m_FunctionForecastTip.gameObject.SetActive(true); } var isNeutralMap = GeneralDefine.neutralBossMaps.Contains(PlayerDatas.Instance.baseData.MapID); if (isNeutralMap) { m_BossBriefInfos.gameObject.SetActive(true); if (PlayerDatas.Instance.baseData.MapID == DogzDungeonModel.DATA_MAPID) { var bosses = ModelCenter.Instance.GetModel().GetBosses(); m_BossBriefInfos.Display(bosses); } else if (PlayerDatas.Instance.baseData.MapID == CrossServerBossModel.DATA_MAPID) { var bosses = ModelCenter.Instance.GetModel().GetBosses(); m_BossBriefInfos.Display(bosses); } else { var bosses = ModelCenter.Instance.GetModel().GetWorldBosses(PlayerDatas.Instance.baseData.MapID); m_BossBriefInfos.Display(bosses); } } else { m_BossBriefInfos.gameObject.SetActive(false); } } protected override void OnAfterOpen() { bool inBossArea = PlayerDatas.Instance.hero != null && MapArea.IsInMapArea(PlayerDatas.Instance.hero.CurMapArea, MapArea.E_Type.Boss);//是否在Boss区域 var judge1 = onMainModel.IsDead || (onMainModel.IsBossAreaTask && !inBossArea && !m_MainPositionTween.IsTaskAndPanelShow); if (judge1) { TaskSwithButton(); onMainModel.IsBossAreaTask = false; onMainModel.IsDead = false; } m_HighSettingTip.AfterOpen(); m_ChatTip.OnAfterOpen(); HandleAchievement(); } protected override void OnPreClose() { m_IsShowXp.Unit(); m_InGamePusher.UnInit(); m_SkillContainer.UnInit(); m_HeadPortraitTip.UnInit(); m_LowSettingTip.UnInit(); m_ChatTip.UnInit(); m_HighSettingTip.UnInit(); m_HighSettingFadeInFadeOut.UnInit(); m_TaskListTip.UnInit(); m_TopRightTip.UnInit(); m_FunctionForecastTip.Unit(); m_TeamInvitationEntrance.UnInit(); m_FairyCallBehaviour.UnInit(); m_FairyLeagueRemind.UnInit(); m_MainButtonMisc.UnInit(); m_RightBottomFadeInOut.UnInit(); PlayerDatas.Instance.playerDataRefreshEvent -= Updatefighting; FunctionUnlockFlyObject.functionUnLockShowBeginEvent -= UnFlodFunctionArea; GA_Hero.OnEnterOrExitArea -= OnEnterOrExitArea; NewBieCenter.Instance.guideBeginEvent -= OnGuideBegin; WindowCenter.Instance.windowAfterOpenEvent -= WindowAfterEvent; WindowCenter.Instance.windowAfterCloseEvent -= WindowAfterEvent; NewBieCenter.Instance.guideBeginEvent -= GuideBeginEvent; GlobalTimeEvent.Instance.secondEvent -= secondEvent; fairyGrabBossModel.bossGrabHintEvent -= BossGrabHintEvent; } protected override void LateUpdate() { base.LateUpdate(); var judge1 = PlayerDatas.Instance.hero != null && PlayerDatas.Instance.hero.State == E_ActorState.AutoRun && onMainModel.MoveBool; var judge2 = WindowCenter.Instance.IsOpen(); if (judge1 && !judge2) { WindowCenter.Instance.Open(true); } if (!judge1 && judge2) { onMainModel.MoveBool = false; WindowCenter.Instance.Close(); } if (onPlayerTask.TaskOverBool) { onPlayerTask.TaskOverBool = false; EffectMgr.Instance.PlayUIEffect(1100, 1100, m_EffectTask, false); } } protected override void OnAfterClose() { } #endregion private void secondEvent() { SetAtkType(); if (IsUpdateBool) { StartCoroutine(featureNoticeModel.WhetherToPlayTheBox());//功能预告 IsUpdateBool = false; } } private void GuideBeginEvent() { var show = NewBieCenter.Instance.inGuiding && (NewBieCenter.Instance.currentGuide == 89 || NewBieCenter.Instance.currentGuide == TrialDungeonModel.TRIALEXCHANGE_GUIDE); if (show) { UnFlodFunctionArea(true, 0); } } private void OnGuideBegin()//引导开始 { if (!m_MainPositionTween.IsTaskAndPanelShow) { TaskSwithButton(); } } private void OnEnterOrExitArea(MapArea.E_Type _areaType, bool _enter) { if (PlayerDatas.Instance.baseData.MapID == 10040 && _areaType != MapArea.E_Type.Boss && _enter) { DTCA202_tagMCAttackMode.Send_SwitchAttackMode((E_AttackMode)onMainModel.AreaState); } if ((_areaType == MapArea.E_Type.Neutral || _areaType == MapArea.E_Type.Boss) && _enter) { WindowCenter.Instance.Open(); AtkTypeChange(); } if (_areaType == MapArea.E_Type.Neutral && !_enter) { if (Buffmodel.PkType != onMainModel.AreaState) { DTCA202_tagMCAttackMode.Send_SwitchAttackMode((E_AttackMode)onMainModel.AreaState); } } if (_areaType == MapArea.E_Type.Boss && _enter) { if (m_MainPositionTween.IsTaskAndPanelShow && ListBossMapId.Contains(PlayerDatas.Instance.baseData.MapID)) { TaskSwithButton(); onMainModel.IsBossAreaTask = true; } } if ((_areaType == MapArea.E_Type.Boss && !_enter) || (_areaType != MapArea.E_Type.Normal && (_areaType != MapArea.E_Type.Boss && _enter))) { if (onMainModel.IsBossAreaTask) { TaskSwithButton(); onMainModel.IsBossAreaTask = false; } } m_MainPositionTween.SwitchFunctions(new MainPositionTween.SwitchParam() { showDefault = true, immediately = false }); } private void AtkTypeChange()//骑宠争夺是否切换状态 { var mapID = PlayerDatas.Instance.baseData.MapID; var config = MapConfig.Get(mapID); var atkInt = pKModel.GetArea(config.AtkType); var IsBossBool = MapArea.IsInMapArea(PlayerDatas.Instance.hero.CurMapArea, MapArea.E_Type.Boss);//是否在Boss区域 var Line = 0; fairyGrabBossModel.TryGetFairyGrabBossLine(out Line); if (PlayerDatas.Instance.baseData.MapID == 10040 && IsBossBool && Line == PlayerDatas.Instance.baseData.FBID) { DTCA202_tagMCAttackMode.Send_SwitchAttackMode((E_AttackMode)0); onMainModel.AreaState = Buffmodel.PkType; return; } if (PlayerDatas.Instance.baseData.MapID == 10040 && IsBossBool && Line != PlayerDatas.Instance.baseData.FBID)//逍遥城普通Boss区域处理 { DTCA202_tagMCAttackMode.Send_SwitchAttackMode((E_AttackMode)5); onMainModel.AreaState = Buffmodel.PkType; return; } if (!onMainModel.ShieldedArea.Contains(PlayerDatas.Instance.baseData.MapID))//前四只Boss和活动Boss特殊处理 { if (IsBossBool && atkInt.Count > 1 && Buffmodel.PkType != 5) { onMainModel.AreaState = Buffmodel.PkType; DTCA202_tagMCAttackMode.Send_SwitchAttackMode((E_AttackMode)5); } } } private void SetAtkType()//逍遥城非boss区域特殊处理 { if (PlayerDatas.Instance.hero != null) { bool IsBossBool = MapArea.IsInMapArea(PlayerDatas.Instance.hero.CurMapArea, MapArea.E_Type.Boss);//是否在Boss区域 //if (PlayerDatas.Instance.baseData.MapID == 10040 && !IsBossBool && Buffmodel.PkType != 0) //{ // DTCA202_tagMCAttackMode.Send_SwitchAttackMode((E_AttackMode)0); // Buffmodel.PkType = 0; //} } } void DownButton(GameObject go) { _ExpRate.gameObject.SetActive(true); } void UpButton(GameObject go) { _ExpRate.gameObject.SetActive(false); } void TaskSwithButton() { m_MainPositionTween.ShowTask(!TaskSwithBool); if (onMainModel.IsBossAreaTask) { onMainModel.IsBossAreaTask = false; } TaskSwithBool = !TaskSwithBool; } void SwitchFunctions() { m_MainPositionTween.SwitchFunctions(new MainPositionTween.SwitchParam() { showDefault = !MainPositionTween.isDefaultState, immediately = false } ); } // 前期战斗用强制设置任务位置逻辑 public void ForceShowTaskPanel() { if (onMainModel.IsBossAreaTask) { onMainModel.IsBossAreaTask = false; } m_MainPositionTween.ShowTaskImmedidately(true); TaskSwithBool = !TaskSwithBool; } void ArticleExperience()//关于经验条 { int NowLv = (int)PlayerDatas.Instance.baseData.LV; if (PlayerLVConfig.Get(NowLv) != null) { ulong maxValue = (ulong)PlayerLVConfig.GetExpByPlayerLv(NowLv); ulong nowVlaue = (ulong)PlayerDatas.Instance.baseData.TotalExp + (ulong)PlayerDatas.Instance.baseData.ExpPoint * 100000000; if (SliderOpen) { _ExpSlider.delay = 0; _ExpSlider.stage = NowLv; _ExpSlider.ResetStage(); ExpValueFloat = ((float)nowVlaue / (float)maxValue); _ExpSlider.value = (float)ExpValueFloat; SliderOpen = false; } else { if (NowLv - _ExpSlider.stage >= 15) { _ExpSlider.delay = 0; } else { _ExpSlider.delay = 0.1f; } ExpValueFloat = ((float)nowVlaue / (float)maxValue); int MapID = PlayerDatas.Instance.baseData.MapID; if (ExpValueFloat != _ExpSlider.value && MapID == 31080) { m_UIEffect_A.Play(); if (m_UIEffect_A.IsPlaying) { if (!m_UIEffect_B.IsPlaying) { m_UIEffect_B.Play(); } } } _ExpSlider.stage = NowLv; _ExpSlider.value = (float)ExpValueFloat; } if ((float)Math.Round((double)nowVlaue / maxValue, 2, MidpointRounding.AwayFromZero) >= 1f) { _ExpRate.text = "99.9%"; } else { _ExpRate.text = (float)Math.Round((double)nowVlaue / maxValue, 2, MidpointRounding.AwayFromZero) * 100 + "%"; } } } void Updatefighting(PlayerDataType _tCDBPlayerRefresh)//数据的刷新 { ArticleExperience();//关于经验条 if (_tCDBPlayerRefresh == PlayerDataType.LV) { IsUpdateBool = true; } if (_tCDBPlayerRefresh == PlayerDataType.ExAttr5)//判断是否再跨服 { ProcessCrossServerOneVsOne(); } } private void UnFlodFunctionArea(bool _unflod, int _skillGroup) { if (_unflod) { if (!m_MainPositionTween.IsTaskAndPanelShow)//任务面板 { TaskSwithButton(); onMainModel.IsBossAreaTask = false; } m_MainPositionTween.SwitchFunctions(new MainPositionTween.SwitchParam() { showDefault = true, immediately = false }); m_HighSettingFadeInFadeOut.SwitchImmedidately(true); } } void HandleAchievement() { if (AchievementGoto.achievementType == AchievementGoto.ExcuteSkill) { m_MainPositionTween.SwitchFunctions(new MainPositionTween.SwitchParam() { showDefault = true, immediately = true }); var config = SuccessConfig.Get(AchievementGoto.guideAchievementId); var skillId = SkillConfig.FindSkillByJob(config.Condition, PlayerDatas.Instance.baseData.Job); if (skillId != 0) { if (ModelCenter.Instance.GetModel().GetXpSkillID() != skillId) { return; } if (PlayerDatas.Instance.hero.SkillMgr.Get(skillId).cd > 0) { ServerTipDetails.DisplayNormalTip(Language.Get("SkillCooling_Z")); } else { var _effect = AchievementGuideEffectPool.Require(3); _effect.transform.SetParentEx(m_IsShowXp.transform, Vector3.zero, Vector3.zero, Vector3.one); } AchievementGoto.achievementType = 0; } else { AchievementGoto.achievementType = 0; } } } void CheckChatTipOpen() { bool _chatWinOpen = WindowCenter.Instance.IsOpen(); m_ChatTip.gameObject.SetActive(!_chatWinOpen); } private void WindowAfterEvent(Window _win) { if (_win is ChatWin) { CheckChatTipOpen(); } } private void IsShowTaskPanel()//是否显示任务面板 { var hideTask = AdventureStage.Instance.IsInAdventureStage || MapUtility.IsDungeon(PlayerDatas.Instance.baseData.MapID) || fairyGrabBossModel.grabBossHintOpen || CrossServerUtility.IsCrossServer() || ClientCrossServerOneVsOne.isClientCrossServerOneVsOne; if (hideTask) { m_TaskAndTeamTip.SetActive(false); m_TaskSwithButton.gameObject.SetActive(false); } else { m_TaskAndTeamTip.SetActive(true); m_TaskSwithButton.gameObject.SetActive(true); } } private void BossGrabHintEvent() { IsShowTaskPanel(); AtkTypeChange(); } private void ProcessCrossServerOneVsOne() { if (CrossServerUtility.IsCrossServerOneVsOne())//是否再跨服副本中 { WindowCenter.Instance.Open(); m_HeadPortraitTip.gameObject.SetActive(false); CopyOfThePanel.gameObject.SetActive(false); _SwitchShowBtn.gameObject.SetActive(false); m_ChatTip.gameObject.SetActive(false); m_FunctionForecastTip.gameObject.SetActive(false); m_TaskSwithButton.gameObject.SetActive(false); m_InGamePusher.gameObject.SetActive(false); IsShowTaskPanel(); m_MailObj.SetActive(false); m_MainPositionTween.SwitchFunctions(new MainPositionTween.SwitchParam() { showDefault = true, immediately = true }); } else { WindowCenter.Instance.Close(); m_HeadPortraitTip.gameObject.SetActive(true); CopyOfThePanel.gameObject.SetActive(true); _SwitchShowBtn.gameObject.SetActive(true); m_ChatTip.gameObject.SetActive(true); m_FunctionForecastTip.gameObject.SetActive(true); m_TaskSwithButton.gameObject.SetActive(true); m_InGamePusher.gameObject.SetActive(true); m_MailObj.SetActive(true); if (WindowCenter.Instance.IsOpen()) { WindowCenter.Instance.Close(); } } } } }