//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Saturday, October 14, 2017 //-------------------------------------------------------- using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace vnxbqy.UI { public class MainInterfaceWin : Window { [SerializeField] GameObject[] ObjectsShow; [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] FairyLeagueRemindBehaviour m_FairyLeagueRemind; [SerializeField] TeamInvitationEntrance m_TeamInvitationEntrance; [SerializeField] TeamApplyEntrance m_TeamApplyEntrance; [SerializeField] MapSwitchingBehaviour m_MapSwitchingBehaviour; [SerializeField] DungeonBossBriefInfoContainer m_BossBriefInfos; [SerializeField] RightBottomFadeInOut m_RightBottomFadeInOut; [SerializeField] AssistBehaviour m_AssistBehaviour; [SerializeField] IntensifySmoothSlider _ExpSlider;//经验条 [SerializeField] Button _DownButton;//查看经验数值 [SerializeField] Text _ExpRate;//数值 [SerializeField] UIEffect m_UIEffect_A;//经验特效 [SerializeField] UIEffect m_UIEffect_B;//经验特效 [SerializeField] UIEffect m_UIEffect_C;//活跃修炼经验特效 [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 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(); } } FeatureNoticeModel featureNoticeModel { get { return ModelCenter.Instance.GetModel(); } } RealmModel realmModel { get { return ModelCenter.Instance.GetModel(); } } DailyQuestModel dailyQuestModel { get { return ModelCenter.Instance.GetModel(); } } #region Built-in private bool IsUpdateBool = true; protected override void BindController() { m_MapSwitchingBehaviour.InitAwake(); 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() { try { IsUpdateBool = true; SliderOpen = true; m_SkillContainer.Init(); m_HeadPortraitTip.Init(); m_LowSettingTip.Init(); m_ChatTip.Init(); m_HighSettingTip.Init(); m_HighSettingFadeInFadeOut.Init(); m_MainPositionTween.Init(); m_TaskListTip.Init(); m_TopRightTip.Init(); m_TeamInvitationEntrance.Init(); m_TeamApplyEntrance.Init(); m_MapSwitchingBehaviour.Init(); m_FairyLeagueRemind.Init(); m_MainButtonMisc.Init(); m_RightBottomFadeInOut.Init(); m_AssistBehaviour.Init(); m_InGamePusher.Init(); m_BossBriefInfos.SetActive(false); ArticleExperience();//关于经验条 CheckChatTipOpen(); PlayerDatas.Instance.playerDataRefreshEvent += Updatefighting; FunctionUnlockFlyObject.functionUnLockShowBeginEvent += UnFlodFunctionArea; FunctionalGuideCenter.Instance.beginGuideEvent += OnBeginFunctionalGuide; GA_Hero.OnEnterOrExitArea += OnEnterOrExitArea; NewBieCenter.Instance.guideBeginEvent += OnGuideBegin; WindowCenter.Instance.windowAfterOpenEvent += WindowAfterEvent; WindowCenter.Instance.windowAfterCloseEvent += WindowAfterEvent; NewBieCenter.Instance.guideBeginEvent += GuideBeginEvent; PlayerMainDate.DemonJarDamageRankWinChange += IsShowTaskPanel; ProcessCrossServerOneVsOne(); realmModel.StartRealmFistBreakUPGuide(); } catch (Exception ex) { OperationLogCollect.Instance.BugReportSys(ex.ToString()); Debug.LogError(ex); } } protected override void OnActived() { m_MainPositionTween.SwitchFunctions(new MainPositionTween.SwitchParam() { immediately = true, showDefault = true, }); m_MainButtonMisc.OnActived(); IsShowTaskPanel();//是否显示任务面板 m_MainPositionTween.ShowTaskImmedidately(true, false); if (MapUtility.IsDungeon(PlayerDatas.Instance.baseData.MapID) && PlayerDatas.Instance.baseData.MapID != 31020) { m_FunctionForecastTip.SetActive(false); } else { m_FunctionForecastTip.SetActive(true); } var isNeutralMap = GeneralDefine.neutralBossMaps.Contains(PlayerDatas.Instance.baseData.MapID); if (isNeutralMap && !AdventureStage.Instance.IsInAdventureStage) { m_BossBriefInfos.SetActive(true); m_BossBriefInfos.Display(PlayerDatas.Instance.baseData.MapID); //if (PlayerDatas.Instance.baseData.MapID == CrossServerBossModel.DATA_MAPID) //{ // var bosses = ModelCenter.Instance.GetModel().GetShowBosses(); // m_BossBriefInfos.Display(bosses); //} //else //{ // var bosses = ModelCenter.Instance.GetModel().GetWorldBosses(PlayerDatas.Instance.baseData.MapID); // m_BossBriefInfos.Display(bosses); //} } else { m_BossBriefInfos.SetActive(false); } } protected override void OnAfterOpen() { try { m_FunctionForecastTip.Init(); m_HighSettingTip.AfterOpen(); m_ChatTip.OnAfterOpen(); HandleAchievement(); if (onMainModel.createAwardState == 0) { WindowCenter.Instance.Open(); } } catch (Exception ex) { OperationLogCollect.Instance.BugReportSys(ex.ToString()); Debug.LogError(ex); } } protected override void OnPreClose() { m_InGamePusher.UnInit(); m_SkillContainer.UnInit(); m_HeadPortraitTip.UnInit(); m_LowSettingTip.UnInit(); m_ChatTip.UnInit(); m_HighSettingTip.UnInit(); m_HighSettingFadeInFadeOut.UnInit(); m_MainPositionTween.UnInit(); m_TaskListTip.UnInit(); m_TopRightTip.UnInit(); m_FunctionForecastTip.Unit(); m_TeamInvitationEntrance.UnInit(); m_TeamApplyEntrance.UnInit(); m_AssistBehaviour.UnInit(); m_FairyLeagueRemind.UnInit(); m_MainButtonMisc.UnInit(); m_RightBottomFadeInOut.UnInit(); PlayerDatas.Instance.playerDataRefreshEvent -= Updatefighting; FunctionUnlockFlyObject.functionUnLockShowBeginEvent -= UnFlodFunctionArea; FunctionalGuideCenter.Instance.beginGuideEvent -= OnBeginFunctionalGuide; GA_Hero.OnEnterOrExitArea -= OnEnterOrExitArea; NewBieCenter.Instance.guideBeginEvent -= OnGuideBegin; WindowCenter.Instance.windowAfterOpenEvent -= WindowAfterEvent; WindowCenter.Instance.windowAfterCloseEvent -= WindowAfterEvent; NewBieCenter.Instance.guideBeginEvent -= GuideBeginEvent; PlayerMainDate.DemonJarDamageRankWinChange -= IsShowTaskPanel; } 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 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 (NewBieCenter.Instance.IsAreaNeedUnflod(1)) { m_MainPositionTween.ShowTaskImmedidately(true, true); } if (NewBieCenter.Instance.IsAreaNeedUnflod(2)) { m_MainPositionTween.SwitchFunctions(new MainPositionTween.SwitchParam() { showDefault = false, immediately = false }); m_HighSettingFadeInFadeOut.SwitchImmedidately(true); } } 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); } } //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区域 if (!onMainModel.ShieldedArea.Contains(PlayerDatas.Instance.baseData.MapID))//前四只Boss和活动Boss特殊处理 { if (IsBossBool && atkInt.Count > 1 && Buffmodel.PkType != 7) { onMainModel.AreaState = Buffmodel.PkType; DTCA202_tagMCAttackMode.Send_SwitchAttackMode((E_AttackMode)7); } } } void DownButton(GameObject go) { _ExpRate.SetActive(true); } void UpButton(GameObject go) { _ExpRate.SetActive(false); } void TaskSwithButton() { m_MainPositionTween.ShowTask(!MainPositionTween.taskShow, false, true); } void SwitchFunctions() { m_MainPositionTween.SwitchFunctions(new MainPositionTween.SwitchParam() { showDefault = !MainPositionTween.isDefaultState, immediately = false, manual = true, } ); } // 前期战斗用强制设置任务位置逻辑 public void ForceShowTaskPanel() { m_MainPositionTween.ShowTaskImmedidately(true, true); } 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 * Constants.ExpPointValue; 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 + "%"; } if (dailyQuestModel.ActivityPlaceInfo.PlaceCount > 0) { m_UIEffect_C.Play(); } else { m_UIEffect_C.Stop(); } } } void Updatefighting(PlayerDataType _tCDBPlayerRefresh)//数据的刷新 { ArticleExperience();//关于经验条 if (_tCDBPlayerRefresh == PlayerDataType.LV) { IsUpdateBool = true; } if (_tCDBPlayerRefresh == PlayerDataType.ExAttr5)//判断是否再跨服 { ProcessCrossServerOneVsOne(); } } private void UnFlodFunctionArea(bool _unflod, int _skillGroup) { if (NewBieCenter.Instance.inGuiding) { if (NewBieCenter.Instance.IsAreaNeedUnflod(1)) { m_MainPositionTween.ShowTaskImmedidately(true, true); } if (NewBieCenter.Instance.IsAreaNeedUnflod(2)) { m_MainPositionTween.SwitchFunctions(new MainPositionTween.SwitchParam() { showDefault = true, immediately = false }); m_HighSettingFadeInFadeOut.SwitchImmedidately(true); } } else { m_MainPositionTween.SwitchFunctions(new MainPositionTween.SwitchParam() { bottomState = _unflod ? MainPositionTween.RightBottomState.Function : MainPositionTween.RightBottomState.Skill, showDefault = true, immediately = false }); } m_SkillContainer.skillTurnplate.SwitchGroup(_skillGroup); } private void OnBeginFunctionalGuide(int guideId) { if (FunctionalGuideCenter.Instance.IsAreaNeedUnflod(1)) { m_MainPositionTween.ShowTaskImmedidately(true, true); } if (FunctionalGuideCenter.Instance.IsAreaNeedUnflod(2)) { m_MainPositionTween.SwitchFunctions(new MainPositionTween.SwitchParam() { showDefault = false, 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_SkillContainer.skillXP.transform, Vector3.zero, Vector3.zero, Vector3.one); } AchievementGoto.achievementType = 0; } else { AchievementGoto.achievementType = 0; } } } void CheckChatTipOpen() { bool _chatWinOpen = WindowCenter.Instance.IsOpen(); if (CrossServerUtility.IsCrossServerOneVsOne()) { m_ChatTip.SetActive(false); } else { m_ChatTip.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)) || CrossServerUtility.IsCrossServer() || ClientCrossServerOneVsOne.isClientCrossServerOneVsOne || WindowCenter.Instance.IsOpen() || WindowCenter.Instance.IsOpen(); if (hideTask) { m_TaskAndTeamTip.SetActive(false); m_TaskSwithButton.SetActive(false); } else { m_TaskAndTeamTip.SetActive(true); m_TaskSwithButton.SetActive(true); } } private void BossGrabHintEvent() { IsShowTaskPanel(); AtkTypeChange(); } private void ProcessCrossServerOneVsOne() { if (CrossServerUtility.IsCrossServerOneVsOne() || ArenaManager.IsArenaStage())//是否再跨服副本中 { if (ArenaManager.IsArenaStage()) { if (ArenaManager.OnILPKWinShow != null) ArenaManager.OnILPKWinShow(true); } if (CrossServerUtility.IsCrossServerOneVsOne()) { WindowCenter.Instance.Open(); } m_HeadPortraitTip.SetActive(false); CopyOfThePanel.SetActive(false); _SwitchShowBtn.SetActive(false); m_TopRightTip.ShowMiniMap(false); m_ChatTip.SetActive(false); m_FunctionForecastTip.SetActive(false); m_TaskSwithButton.SetActive(false); m_InGamePusher.SetActive(false); IsShowTaskPanel(); m_MailObj.SetActive(false); foreach (var obj in ObjectsShow) { obj.SetActive(false); } m_MainPositionTween.SwitchFunctions( new MainPositionTween.SwitchParam() { showDefault = true, immediately = true, bottomState = MainPositionTween.RightBottomState.Skill, manual = true, }); } else { if (ArenaManager.OnILPKWinShow != null) ArenaManager.OnILPKWinShow(false); WindowCenter.Instance.Close(); m_HeadPortraitTip.SetActive(true); CopyOfThePanel.SetActive(true); _SwitchShowBtn.SetActive(true); m_TopRightTip.ShowMiniMap(true); m_ChatTip.SetActive(true); m_FunctionForecastTip.SetActive(true); m_TaskSwithButton.SetActive(true); m_InGamePusher.SetActive(true); m_MailObj.SetActive(true); foreach (var obj in ObjectsShow) { obj.SetActive(true); } if (WindowCenter.Instance.IsOpen()) { WindowCenter.Instance.Close(); } } } } }