using UnityEngine; using UnityEngine.UI; using System.Collections; using System.Collections.Generic; using GCGame.Table; using Games.Item; public class GuideStepUpdate : GuideStepBase { #region attrs public enum GUIDE_UI_PATH { Path, Function, MissionDialog, BackPack, EquipToolTip, ItemToolTip, SkillClass, SkillItem, EnhanceEquip, Activity, MarketItem, DailyWelfare, AutoMedic, UIDisapear, DialogOption, FubenPage, Welfare, LiveSkill, LiveSkillItem, WaitTextChange, AutoUse, TeamTag } public GUIDE_UI_PATH UIPath; public string[] PathParam; public Vector2 ClickArea; protected bool _HoldUI = false; protected bool _ShowedGuide = false; protected int[] _IntParam; protected int[] IntParam { get { if (_IntParam == null) { _IntParam = new int[PathParam.Length]; for (int i = 0; i < PathParam.Length; ++i) { _IntParam[i] = int.Parse(PathParam[i]); } } return _IntParam; } } #endregion #region base public override void StartGuideStep() { base.StartGuideStep(); _HoldUI = false; _ShowedGuide = false; _GuideUIGO = null; _GuideUIImagePath = new System.Collections.Generic.List(); if (GuideType == GUIDE_OPT_TYPE.ForceOpt) { GuideLogic.Instance().SetForceBackActive(true); } else if (GuideType == GUIDE_OPT_TYPE.ClickClose) { GuideLogic.Instance().SetClickBack(); } else { GuideLogic.Instance().SetForceBackActive(false); } _UpdateStart = Time.time; } public override void FinishGuideStep() { base.FinishGuideStep(); } public override void StopGuideStep() { if (GuideType != GUIDE_OPT_TYPE.ForceOpt) { GuideLogic.Instance().SetForceBackActive(false); } else if (GuideType == GUIDE_OPT_TYPE.ClickClose) { GuideLogic.Instance().SetClickBack(); } else { GuideLogic.Instance()._Back.GetComponent().raycastTarget = false; } GuideLogic.Instance()._GuideInfo.gameObject.SetActive(false); if (_CopyGuideGO != null) { _CopyGuideGO.SetActive(false); GameObject.Destroy(_CopyGuideGO, 0.1f); GuideLogic.Instance().HideEffect(); } _EquipItem = null; _GuideSkillInfo = null; base.StopGuideStep(); } #endregion float _UpdateLast = 5.6f; float _UpdateStart = 0; void Update() { if (_GuideUIGO == null && !_HoldUI) { TryGetGuideUIGO(); } if ((_GuideUIGO == null)&& _HoldUI) { if (UIPath == GUIDE_UI_PATH.UIDisapear) { FinishGuideStep(); } else { StopGuideStep(); BelongGuideItem.ReStart(); _UpdateStart = 0; return; } } if (_GuideUIGO != null) { //if (!_GuideUIGO.activeInHierarchy) //{ // StopGuideStep(); // _UpdateStart = 0; // return; //} FitCopyPos(); if (!_ShowedGuide) { ShowGuide(); _ShowedGuide = true; } _UpdateStart = 0; } else { if (Time.time - _UpdateStart > _UpdateLast) { StopGuideStep(); BelongGuideItem.FinishGuide(); } } //特殊的,指引到扩展功能,但是功能缩进了 if (_GuideUIGO != null) { bool isInFuncEx = false; if (PathParam.Length > 1) { isInFuncEx = true; } if (isInFuncEx && !PathParam[0].Equals("OpenDetailButton") && !FunctionExLogic.Instance()._IsBtnShow) { StopGuideStep(); BelongGuideItem.FinishGuide(); } } } #region getGuideUI private void GetGuideMissionDialog() { int missionID = int.Parse(PathParam[0]); if (MissionDialogAndLeftTabsLogic.Instance()) { MissionDialogAndLeftTabsLogic.Instance()._MissionContainer.ForeachActiveItem((missionItem) => { if (missionItem.MissionID == missionID) { _GuideUIGO = missionItem.gameObject; _HoldUI = true; } }); } } private void GetGuideFunction() { bool isInFuncEx = false; if (PathParam.Length > 1) { isInFuncEx = true; } if (!isInFuncEx) { if (FunctionButtonLogic.Instance()) { var guideGO = FunctionButtonLogic.Instance().transform.Find(PathParam[0]); if (guideGO == null) return; if (PathParam[0].Contains("ButtonBack")) { if (BackPackLogic.Instance()) { FinishGuideStep(); return; } } GCGame.Utils.ShowMainTopRightUI(); if (PathParam[0].Contains("OpenDetailButton")) { if (!guideGO.gameObject.activeSelf) { FinishGuideStep(); return; } } if (PathParam[0].Contains("BtnSkill")) { if (SkillRootLogic.Instance()) { FinishGuideStep(); return; } } _GuideUIGO = guideGO.gameObject; _HoldUI = true; } } else { if (FunctionExLogic.Instance()) { GameObject guideGO = null; if (PathParam[0].Equals("OpenDetailButton")) { guideGO = FunctionExLogic.Instance()._OpenBtn; } else if(FunctionExLogic.Instance()._IsBtnShow) { guideGO = FunctionExLogic.Instance().GetBtn(PathParam[0]); } if (guideGO == null) return; if (PathParam[0].Contains("ButtonBack")) { if (BackPackLogic.Instance()) { FinishGuideStep(); return; } } if (PathParam[0].Contains("OpenDetailButton")) { if (FunctionExLogic.Instance()._IsBtnShow) { FinishGuideStep(); return; } } if (PathParam[0].Contains("BtnSkill")) { if (SkillRootLogic.Instance()) { FinishGuideStep(); return; } } _GuideUIGO = guideGO.gameObject; _HoldUI = true; } } } private GameItem _EquipItem; private void GetGuideEquip() { if (_EquipItem == null) { var backItems = GameManager.gameManager.PlayerDataPool.BackPack.GetList(); foreach (var backItem in backItems) { if (!backItem.IsValid()) continue; if (!backItem.IsEquipMent()) continue; for (int i = 0; i < IntParam.Length; ++i) { if (backItem.DataID == IntParam[i]) { _EquipItem = backItem; break; } if (_EquipItem != null) break; } } if (_EquipItem == null) { BelongGuideItem.FinishGuide(); return; } } if(_EquipItem != null) { if (BackPackLogic.Instance() && BackPackLogic.Instance()._SellInfoPanel.activeInHierarchy == false) { BackPackLogic.Instance()._ItemsContainer.ForeachActiveItem((backPackItem) => { if (backPackItem._ItemBackPack.GameItem == null) return; //if (backPackItem._ItemSlot._ItemImg.sprite == null) // return; if (backPackItem._ItemBackPack.GameItem == _EquipItem) { _GuideUIGO = backPackItem.gameObject; _GuideUIImagePath.Add("CommonItemSlot/Icon"); _GuideUIImagePath.Add("CommonItemSlot/Quality"); _HoldUI = true; } }); } else if (BackPackLogic.Instance() && BackPackLogic.Instance()._SellInfoPanel.activeInHierarchy == true) { BelongGuideItem.FinishGuide(); } } } private void GetGuideItem() { int itemID = int.Parse(PathParam[0]); if (_EquipItem == null) { var backItems = GameManager.gameManager.PlayerDataPool.BackPack.GetList(); foreach (var backItem in backItems) { if (backItem.DataID == itemID) { _EquipItem = backItem; break; } } if (_EquipItem == null) { BelongGuideItem.FinishGuide(); return; } } if (BackPackLogic.Instance() && BackPackLogic.Instance()._SellInfoPanel.activeInHierarchy == false) { CommonItemBackPackItem selectedItem = null; BackPackLogic.Instance()._ItemsContainer.ForeachActiveItem((backPackItem) => { if (backPackItem._ItemBackPack.GameItem == null) return; if (backPackItem._ItemSlot._ItemImg.sprite == null) return; if (backPackItem._ItemBackPack.GameItem.DataID == itemID) { _GuideUIGO = backPackItem.gameObject; _GuideUIImagePath.Add("CommonItemSlot/Icon"); _GuideUIImagePath.Add("CommonItemSlot/Quality"); _HoldUI = true; selectedItem = backPackItem; } }); if (selectedItem != null) { BackPackLogic.Instance()._ItemsContainer.ShowContainerPos(selectedItem); } } else if (BackPackLogic.Instance() && BackPackLogic.Instance()._SellInfoPanel.activeInHierarchy == true) { BelongGuideItem.FinishGuide(); } } private void AutoUseItem() { int itemID = int.Parse(PathParam[0]); GameItemContainer BackPack = GameManager.gameManager.PlayerDataPool.BackPack; var useItem = BackPack.GetItemByDataID(itemID); if (useItem != null) { Singleton.Instance.MainPlayer.UseItem(useItem); FinishGuideStep(); } } private void TeamTag() { if (MissionDialogAndLeftTabsLogic.Instance()) { if (!MissionDialogAndLeftTabsLogic.Instance().IsShowPanel) { MissionDialogAndLeftTabsLogic.Instance().ShowPanel(); } } FinishGuideStep(); } private void GetGuideEquipTool() { if (EquipTooltipsLogic.Instance()) { int btnIdx = int.Parse(PathParam[0]); if (EquipTooltipsLogic.Instance()._PopMenu.SubBtns.Count > btnIdx) { int menuIdx = 0; foreach (var keyValue in EquipTooltipsLogic.Instance()._PopMenu.SubBtns) { if (menuIdx == btnIdx) { _HoldUI = true; _GuideUIGO = keyValue.Key.gameObject; break; } else { ++menuIdx; } } } } } private void GetGuideItemTool() { if (ItemTooltipsLogic.Instance()) { int btnIdx = int.Parse(PathParam[0]); if (ItemTooltipsLogic.Instance()._PopMenu.SubBtns.Count > btnIdx) { int menuIdx = 0; foreach (var keyValue in ItemTooltipsLogic.Instance()._PopMenu.SubBtns) { if (menuIdx == btnIdx) { _HoldUI = true; _GuideUIGO = keyValue.Key.gameObject; break; } else { ++menuIdx; } } } } } private void GetGuidePath() { var uiGO = GameObject.Find(PathParam[0]); if (uiGO == null) return; if (!uiGO.activeSelf) return; var image = uiGO.GetComponent(); if (image != null) { if (image.sprite == null) return; } _GuideUIGO = uiGO; if (PathParam.Length > 1) { _GuideUIImagePath.Add(PathParam[1]); } if (_GuideUIGO != null && _GuideUIGO.activeInHierarchy) _HoldUI = true; } private SkillRootItem.SkillShowInfo _GuideSkillInfo; private int _GuideSkillClass; private void GetGuideSkill() { if (!SkillRootLogic.Instance()) return; //if (_GuideSkillInfo == null) { if (SkillRootLogic.Instance().MySkillInfos.Count == 0) return; int classIdx = 0; foreach (var skillClassPair in SkillRootLogic.Instance().MySkillInfos) { foreach (var skillShowInfo in skillClassPair.Value) { for (int i = 0; i < IntParam.Length; ++i) { if (skillShowInfo.SkillBase.Id == IntParam[i]) { _GuideSkillClass = classIdx; _GuideSkillInfo = skillShowInfo; break; } } } ++classIdx; } } //else { if (UIPath == GUIDE_UI_PATH.SkillClass) { if (SkillRootLogic.Instance()._SkillClasses.SubBtns.Count > _GuideSkillClass) { int menuIdx = 0; foreach (var keyValue in SkillRootLogic.Instance()._SkillClasses.SubBtns) { if (menuIdx == _GuideSkillClass) { _HoldUI = true; _GuideUIGO = keyValue.Key.gameObject; break; } else { ++menuIdx; } } } } else { foreach (var skillItem in SkillRootLogic.Instance()._SkillInfoPage.SkillItems) { if (skillItem.ShowSkillInfo == _GuideSkillInfo) { _HoldUI = true; _GuideUIGO = skillItem.gameObject; _GuideUIImagePath.Add("Icon"); break; } } } } } private void GetEnhanceEquip() { if (EquipEnhanceRoot.Instance()) { List equipDatas = new List(); int focusIdx = 0; for (int i = 0; i < PathParam.Length; ++i) { equipDatas.Add(int.Parse(PathParam[i])); } if (equipDatas.Count == 1) { focusIdx = equipDatas[0]; } UIItemBase focusEquip = null; int idx = 0; EquipEnhanceRoot.Instance()._EquipContainer.ForeachActiveItem( (equipItem) => { if (equipDatas.Count == 0 && _GuideUIGO == null) { _HoldUI = true; _GuideUIGO = equipItem.gameObject; focusEquip = equipItem; _GuideUIImagePath.Add("EquipSlot/Icon"); _GuideUIImagePath.Add("EquipSlot/Quality"); } else if (equipDatas.Count == 1 && _GuideUIGO == null && idx == focusIdx) { _HoldUI = true; _GuideUIGO = equipItem.gameObject; focusEquip = equipItem; _GuideUIImagePath.Add("EquipSlot/Icon"); _GuideUIImagePath.Add("EquipSlot/Quality"); } if (_GuideUIGO == null) { for (int i = 0; i < equipDatas.Count; ++i) { if (equipItem._EquipItem.DataID == equipDatas[i]) { _HoldUI = true; _GuideUIGO = equipItem.gameObject; focusEquip = equipItem; _GuideUIImagePath.Add("EquipSlot/Icon"); _GuideUIImagePath.Add("EquipSlot/Quality"); } } } ++idx; } ); if (focusEquip != null) { EquipEnhanceRoot.Instance()._EquipContainer.ShowContainerPos(focusEquip); } } } private void GetActivity() { if (ActivityController.Instance()) { int btnIdx = int.Parse(PathParam[0]); ActivityItem selectedItem = null; bool actEnable = true; ActivityController.Instance()._ItemsContainer.ForeachActiveItem( (activityItem) => { if (activityItem.m_ItemInfoId == btnIdx) { _HoldUI = true; _GuideUIGO = activityItem.m_JoinButton.gameObject; selectedItem = activityItem; if (!activityItem.m_JoinButton.gameObject.activeSelf) { actEnable = false; } //_GuideUIImagePath = "Icon"; } } ); if (selectedItem != null) { ActivityController.Instance()._ItemsContainer.ShowContainerPos(selectedItem); } if (!actEnable) { FinishGuideStep(); } } } private void GetMarketSellItem() { if (MarketPlayerShopSellPage.Instance()) { int btnIdx = int.Parse(PathParam[0]); MarketPlayerShopSellPage.Instance()._SellItemsInPacket.ForeachActiveItem( (activityItem) => { if (_GuideUIGO == null) { _HoldUI = true; _GuideUIGO = activityItem.gameObject; _GuideUIImagePath.Add("MissionInfoAwardItem"); } } ); //if (_GuideUIGO == null) //{ // FinishGuideStep(); //} } else { FinishGuideStep(); } } private void GetDailyWalfare() { //if (EveryDaySingInPanelCtr.Instance) //{ // int btnIdx = int.Parse(PathParam[0]); // for (int nodeIndex = 0; nodeIndex < EveryDaySingInPanelCtr.Instance.nodeItemList.Count; nodeIndex++) // { // if (EveryDaySingInPanelCtr.Instance.nodeItemList[nodeIndex].GetComponent().stateIcon.isActiveAndEnabled) // { // _HoldUI = true; // _GuideUIGO = EveryDaySingInPanelCtr.Instance.nodeItemList[nodeIndex].gameObject; // _GuideUIImagePath.Add("BG/ItemIcon"); // } // } // //if (_GuideUIGO == null) // //{ // // FinishGuideStep(); // //} //} //else //{ // FinishGuideStep(); //} } private void GetAutoMedic() { if (PopCanSelectItemPanelCtr.Instance) { int btnIdx = int.Parse(PathParam[0]); for (int nodeIndex = 0; nodeIndex < PopCanSelectItemPanelCtr.Instance.AutoMedicItemList.Count; nodeIndex++) { if (PopCanSelectItemPanelCtr.Instance.AutoMedicItemList[nodeIndex].GetComponent().m_ItemDataId == btnIdx) { _HoldUI = true; _GuideUIGO = PopCanSelectItemPanelCtr.Instance.AutoMedicItemList[nodeIndex].gameObject; _GuideUIImagePath.Add("BG/ItemBg/ItemIcon"); } } //if (_GuideUIGO == null) //{ // FinishGuideStep(); //} } } private void GetDialogOption() { if (OptionDialogLogic.Instance()) { int btnIdx = int.Parse(PathParam[0]); if (OptionDialogLogic.Instance()._SubMenu.SubBtns.Count > btnIdx) { int menuIdx = 0; foreach (var keyValue in OptionDialogLogic.Instance()._SubMenu.SubBtns) { if (menuIdx == btnIdx) { _HoldUI = true; _GuideUIGO = keyValue.Key.gameObject; _GuideUIImagePath.Add("Image"); break; } else { ++menuIdx; } } } //if (_GuideUIGO == null) //{ // FinishGuideStep(); //} } } private void GetFubenPage() { if (CopyScenePanelCtr.Instance) { int pageIdx = int.Parse(PathParam[0]); int itemIdx = int.Parse(PathParam[1]); if (pageIdx == 0) { string itemChild = PathParam[2]; if (MainMissionCopySceneRootCtr.Instance) { if (MainMissionCopySceneRootCtr.Instance.itemPrefabList.Count > itemIdx + 1) { var btnGO = MainMissionCopySceneRootCtr.Instance.itemPrefabList[itemIdx].transform.Find(itemChild); _HoldUI = true; _GuideUIGO = btnGO.gameObject; } } } if (pageIdx == 1) { string itemChild = PathParam[2]; if (AdvanceCopySceneRootCtr.Instance) { if (AdvanceCopySceneRootCtr.Instance.itemPrefabList.Count > itemIdx + 1) { var btnGO = AdvanceCopySceneRootCtr.Instance.itemPrefabList[itemIdx].transform.Find(itemChild); _HoldUI = true; _GuideUIGO = btnGO.gameObject; } } } } } private void GetWelfare() { //if (WelfareRootCtr.Instance) //{ // int pageIdx = int.Parse(PathParam[0]); // var pageItems = WelfareRootCtr.Instance.GetComponentsInChildren(); // var selectItem = pageItems.Find((pageItem) => // { // if (pageItem.idx == pageIdx) // return true; // return false; // }); // if (selectItem != null) // { // _HoldUI = true; // _GuideUIGO = selectItem.gameObject; // } //} } private void GetLiveSkill() { if (LiveSkillLogic.Instance()) { int skillGroup = int.Parse(PathParam[0]); GameObject selectItem = null; LiveSkillLogic.Instance()._LiveSkills.ForeachActiveItem((liveskillItem) => { if (liveskillItem._SkillInfo.SkillGroupID == skillGroup) { selectItem = liveskillItem.gameObject; } }); if (selectItem != null) { _HoldUI = true; _GuideUIGO = selectItem.gameObject; _GuideUIImagePath.Add("Icon"); } } } private void GetLiveSkillItem() { if (LiveSkillLogic.Instance()) { int itemID = int.Parse(PathParam[0]); GameObject selectItem = null; LiveSkillLogic.Instance()._ItemList.ForeachActiveItem((liveItemClass) => { liveItemClass._LiveSkillItems.ForeachActiveItem((liveItem)=> { if (liveItem._TabLiveSkillItem.Id == itemID) { selectItem = liveItem.gameObject; } }); }); if (selectItem != null) { _HoldUI = true; _GuideUIGO = selectItem.gameObject; _GuideUIImagePath.Add("Image"); } } } protected void TryGetGuideUIGO() { if (UIPath == GUIDE_UI_PATH.MissionDialog) { GetGuideMissionDialog(); } else if (UIPath == GUIDE_UI_PATH.Function) { GetGuideFunction(); } else if (UIPath == GUIDE_UI_PATH.BackPack) { if (PathParam.Length > 1) { GetGuideEquip(); } else { GetGuideItem(); } } else if (UIPath == GUIDE_UI_PATH.AutoUse) { AutoUseItem(); } else if (UIPath == GUIDE_UI_PATH.TeamTag) { TeamTag(); } else if (UIPath == GUIDE_UI_PATH.EquipToolTip) { GetGuideEquipTool(); } else if (UIPath == GUIDE_UI_PATH.ItemToolTip) { GetGuideItemTool(); } else if (UIPath == GUIDE_UI_PATH.Path) { GetGuidePath(); } else if (UIPath == GUIDE_UI_PATH.UIDisapear) { GetGuidePath(); } else if (UIPath == GUIDE_UI_PATH.SkillItem || UIPath == GUIDE_UI_PATH.SkillClass) { GetGuideSkill(); } else if (UIPath == GUIDE_UI_PATH.EnhanceEquip) { GetEnhanceEquip(); } else if (UIPath == GUIDE_UI_PATH.Activity) { GetActivity(); } else if (UIPath == GUIDE_UI_PATH.MarketItem) { GetMarketSellItem(); } else if (UIPath == GUIDE_UI_PATH.DailyWelfare) { GetDailyWalfare(); } else if (UIPath == GUIDE_UI_PATH.AutoMedic) { GetAutoMedic(); } else if (UIPath == GUIDE_UI_PATH.DialogOption) { GetDialogOption(); } else if (UIPath == GUIDE_UI_PATH.Welfare) { GetWelfare(); } else if (UIPath == GUIDE_UI_PATH.LiveSkill) { GetLiveSkill(); } else if (UIPath == GUIDE_UI_PATH.FubenPage) { GetFubenPage(); } else if (UIPath == GUIDE_UI_PATH.LiveSkillItem) { GetLiveSkillItem(); } } protected virtual void InitGuideUIGO() { if (UIPath == GUIDE_UI_PATH.MissionDialog) { int missionID = int.Parse(PathParam[0]); if (MissionDialogAndLeftTabsLogic.Instance()) { MissionDialogAndLeftTabsLogic.Instance()._MissionContainer.ForeachActiveItem((missionItem) => { if (missionItem.MissionID == missionID) { _GuideUIGO = missionItem.gameObject; } }); } } else if (UIPath == GUIDE_UI_PATH.Function) { if (FunctionButtonLogic.Instance()) { var guideGO = FunctionButtonLogic.Instance().transform.Find(PathParam[0]); if (guideGO == null) return; if (PathParam[0].Contains("ButtonBack")) { if (BackPackLogic.Instance()) { //FinishGuideStep(); return; } } if (PathParam[0].Contains("OpenDetailButton")) { if (!guideGO.gameObject.activeSelf) return; } if (PathParam[0].Contains("BtnSkill")) { if (SkillRootLogic.Instance()) return; } _GuideUIGO = guideGO.gameObject; } } } #endregion }