Files
JJBB/Assets/Project/Script/GUI/Message/ItemGetPathPopRoot.cs
2024-08-23 15:49:34 +08:00

569 lines
18 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using GCGame;
using System;
using Games.GlobeDefine;
using GCGame.Table;
using System.Collections.Generic;
using Module.Log;
public class ItemGetPathPopRoot : UIControllerBase<ItemGetPathPopRoot>
{
// 获得路径数据结构
public class GetPathData
{
public int pathType; // 获得路径类型
public string info; // 具体数据含义,更具路径类型而定
public int itemID;
// 因为两个获取表 MissionItemGetPath 和 ItemGetPath 的一些需求不一致
// 所以标记下,特殊处理。
public int tabType = 0; // 0-itemGetPath1-missionItemGetPath
}
void OnEnable()
{
SetInstance(this);
// 取消自动选择
pathScoll.AutoSelect = false;
}
void OnDisable()
{
SetInstance(null);
HideAllGetPath();
if (_ClickCallBack != null)
{
_ClickCallBack();
}
}
void HideAllGetPath()
{
//for (int index = 0; index < _PathObjs.Length; ++index)
//{
// _PathObjs[index].SetActive(false);
//}
pathScoll.gameObject.SetActive(false);
}
public UISubScollMenu pathScoll;
public void CloseWindow()
{
UIManager.CloseUI(UIInfo.ItemGetPathPop);
}
#region show
public delegate void ClickCallBack();
public static ClickCallBack _ClickCallBack;
public static void Show(int itemID, Vector2 showPos, ClickCallBack clickCallBack = null)
{
Hashtable hash = new Hashtable();
hash.Add("DataID", itemID);
hash.Add("ShowPos", showPos);
_ClickCallBack = clickCallBack;
UIManager.ShowUI(UIInfo.ItemGetPathPop, ItemGetPathPopRoot.ShowUIOver, hash);
}
static void ShowUIOver(bool bSuccess, object param)
{
if (bSuccess)
{
Hashtable hash = param as Hashtable;
if (ItemGetPathPopRoot.Instance() != null)
{
ItemGetPathPopRoot.Instance().ShowInner((int)hash["DataID"], (Vector2)hash["ShowPos"]);
}
}
}
void ShowInner(int itemID, Vector2 showPos)
{
ShowItemGetPath(itemID, showPos);
}
#endregion
#region
public RectTransform _AnchorTrans;
//public GameObject[] _PathObjs;
//public Text[] _ShowTexts;
private Tab_ItemGetPath _ItemPathTab;
private void ShowItemGetPath(int itemID, Vector2 showPos)
{
_ItemPathTab = TableManager.GetItemGetPathByID(itemID, 0);
if (_ItemPathTab == null)
{
LogModule.ErrorLog("没有配置这个物品");
UIManager.CloseUI(UIInfo.ItemGetPathPop);
return;
}
pathScoll.gameObject.SetActive(true);
SetPos(showPos);
pathScoll.Clear();
List<GetPathData> pathList = new List<GetPathData>();
for (int i = 0; i < _ItemPathTab.getItemPathCount(); ++i)
{
if (string.IsNullOrEmpty(_ItemPathTab.GetItemPathbyIndex(i)))
{
continue;
}
if("-1" == _ItemPathTab.GetItemPathbyIndex(i))
{
continue;
}
switch (i)
{
case 0:
case 4:
case 5:
case 7:
case 10:
{
// 以上为只会有一种情况的路径
GetPathData pathType = new GetPathData();
pathType.pathType = i;
pathType.info = _ItemPathTab.GetItemPathbyIndex(i).Trim('"');
pathType.itemID = _ItemPathTab.Id;
pathScoll.PushMenu(pathType);
}
break;
case 1:
case 2:
case 3:
case 6:
case 8:
case 11:
{
// 多种情况的路径
// 类别
GetPathData classMenu = new GetPathData();
classMenu.pathType = i;
classMenu.info = "";
classMenu.itemID = _ItemPathTab.Id;
// 详细
string infoRaw = _ItemPathTab.GetItemPathbyIndex(i).Trim('"');
string[] infos = infoRaw.Split('|');
GetPathData[] detailItem = new GetPathData[infos.Length];
for (int j = 0; j < infos.Length; ++j)
{
GetPathData item = new GetPathData();
item.pathType = i;
item.info = infos[j];
item.itemID = _ItemPathTab.Id;
detailItem[j] = item;
}
pathScoll.PushMenu(classMenu, detailItem);
}
break;
// 运营活动的特殊处理一下,会出现类似的活动,需要先判断。
case 9:
{
// 多种情况的路径
// 类别
GetPathData classMenu = new GetPathData();
classMenu.pathType = i;
classMenu.info = "";
classMenu.itemID = _ItemPathTab.Id;
// 详细
string infoRaw = _ItemPathTab.GetItemPathbyIndex(i).Trim('"');
string[] infos = infoRaw.Split('|');
List<GetPathData> detailItem = new List<GetPathData>();
for (int j = 0; j < infos.Length; ++j)
{
if (IsMarketingActActive(infos[j]))
{
GetPathData item = new GetPathData();
item.pathType = i;
item.info = infos[j];
item.itemID = _ItemPathTab.Id;
detailItem.Add(item);
}
}
pathScoll.PushMenu(classMenu, detailItem.ToArray());
}
break;
}
}
}
public static bool IsMarketingActActive(string info)
{
// 活动特殊处理,必须用‘,区分入口和ID
string[] infos = info.Split(';');
if (infos.Length < 2)
{
LogModule.ErrorLog("Config error !!!");
return false;
}
if (infos[0] == "-1")
{
return true;
}
int actID = string.IsNullOrEmpty(infos[1]) ? -1 : Convert.ToInt32(infos[1]);
if (GlobalData.IsMarketingActActive(actID))
{
return true;
}
return false;
}
private void SetPos(Vector2 pos)
{
_AnchorTrans.position = pos;
float newY;
float newX;
// 优先在右显示
if (Screen.width - _AnchorTrans.anchoredPosition.x >= _AnchorTrans.rect.width)
{
newX = _AnchorTrans.anchoredPosition.x + _AnchorTrans.rect.width / 2;
}
else if (_AnchorTrans.anchoredPosition.x >= _AnchorTrans.rect.width)
{
newX = _AnchorTrans.anchoredPosition.x - _AnchorTrans.rect.width / 2;
}
else
{
newX = Screen.width - _AnchorTrans.rect.width / 2;
}
if (Screen.height - _AnchorTrans.anchoredPosition.y < _AnchorTrans.rect.height / 2)
{
newY = Screen.height - _AnchorTrans.rect.height / 2;
}
else if (_AnchorTrans.anchoredPosition.y <= _AnchorTrans.rect.height / 2)
{
newY = _AnchorTrans.rect.height / 2;
}
else
{
newY = _AnchorTrans.anchoredPosition.y;
}
_AnchorTrans.anchoredPosition = new Vector2(newX, newY);
}
public void OnItemPathClick(object menuData)
{
GetPathData data = menuData as GetPathData;
// 10类型仅做展示不做跳转甚至不能关闭这个界面
if (data == null)
{
CloseWindow();
}
else if(data.pathType == 10)
{
// do nothing
}
else
{
GoGetPath(data, CloseWindow);
}
}
public static void GoGetPath(GetPathData data, Action onClick = null)
{
switch (data.pathType)
{
case 0://元宝商城
int goodID = Convert.ToInt32(data.info);
var shopItemTab = TableManager.GetYuanBaoShopByID(goodID, 0);
YuanBaoShopLogic.OpenShopForItem(shopItemTab.ItemID);
break;
case 1://系统商店
if (string.IsNullOrEmpty(data.info))
{
return;
}
int shopID = Convert.ToInt32(data.info);
if (shopID > 0 && shopID < 4)
{
SysShopController.ShowShopForItem(shopID, data.itemID);
}
else
{
YuanBaoShopLogic.OpenShopForJiFenItem(shopID, data.itemID);
}
break;
case 2://NPC商店
if (string.IsNullOrEmpty(data.info))
{
return;
}
int NPCId = Convert.ToInt32(data.info);
SysShopController._SelectedItem = data.itemID;
UIManager.ClosePopUI();
FindNpc(NPCId);
break;
case 3://怪物掉落
if (string.IsNullOrEmpty(data.info))
{
return;
}
break;
case 4://交易市场
Market.ShowMarket(data.itemID);
break;
case 5://玩家商店
if(data.tabType == 0)
{
Market.ShowMarket(data.itemID);
}
else
{
if(!string.IsNullOrEmpty(data.info))
{
string[] param = data.info.Split(',');
if(param.Length == 2)
{
int classType = Convert.ToInt32(param[0]);
int subClassType = Convert.ToInt32(param[1]);
Market.ShowPlayerShopMarket(classType, subClassType);
}
}
}
break;
case 6://活动
if (string.IsNullOrEmpty(data.info))
{
return;
}
UIManager.ShowUI(UIInfo.Activity);
break;
case 7://百晓生
//UIManager.ShowUI(UIInfo.Activity);
int helpID = int.Parse(data.info);
var helpRecord = TableManager.GetChatHelperByID(helpID, 0);
ChatHelperRoot.ShowChatHelperStr(helpRecord.KeyWord);
break;
case 8:
if (string.IsNullOrEmpty(data.info))
{
return;
}
ShowUI(data.info);
break;
case 9:
if(string.IsNullOrEmpty(data.info))
{
return;
}
string[] actInfo = data.info.Split(';');
if(actInfo.Length < 2)
{
LogModule.ErrorLog("Config error");
}
GotoOperationalAct(Convert.ToInt32(actInfo[0]), Convert.ToInt32(actInfo[1]));
break;
case 11:
{
UIManager.ShowUI(UIInfo.Boss, delegate (bool bSuccess, object param)
{
BossUI worldBoss = UIManager.GetUIComponent<BossUI>(UIInfo.Boss);
if (worldBoss != null)
{
int bossType = Convert.ToInt32((string)param);
worldBoss.ShowPage(bossType);
}
}, data.info);
}
break;
}
if (onClick != null)
{
onClick();
}
}
public static void FindNPCStr(string npcIDStr)
{
int npcID = int.Parse(npcIDStr);
FindNpc(npcID);
}
// 前往NPC商店
private static void FindNpc(int npcID)
{
Tab_AutoSearch sceneNpc = TableManager.GetAutoSearchByID(npcID, 0);
if (sceneNpc == null)
return;
AutoSearchPoint point = new AutoSearchPoint(sceneNpc.DstSceneID, sceneNpc.X, sceneNpc.Z);
if (GameManager.gameManager && GameManager.gameManager.AutoSearch)
{
Tab_RoleBaseAttr role = TableManager.GetRoleBaseAttrByID(sceneNpc.DataId, 0);
GameManager.gameManager.AutoSearch.BuildPath(point);
if (role != null)
{
GameManager.gameManager.AutoSearch.Path.AutoSearchTargetName = role.Name;
}
}
}
#endregion
private enum UICLASSTYPE
{
MARRY = 0, //结婚副本
COPY = 1, //活动界面副本
}
private enum UISUBCLASSTYPE
{
ADVANCECOPY = 0, //进阶副本
MAINMISSION = 1, //主线副本
EQUIP = 2, //装备副本
}
// 副本UI跳转
public static void ShowUI(string info)
{
int _ClassType = -1;
int _SubClass = -1;
int _SubSubClass = -1;
int _OptParam = string.IsNullOrEmpty(info) ? -1 : Convert.ToInt32(info);
if (_OptParam == -1)
{
return;
}
_SubSubClass = _OptParam % 10 - 1;
_SubClass = (_OptParam / 10) % 10;
_ClassType = _OptParam / 100;
switch (_ClassType)
{
case (int)UICLASSTYPE.MARRY:
{
if (!GameManager.gameManager.PlayerDataPool.IsMarried)
{
GUIData.AddNotifyData("#{47012}");
return;
}
UIManager.ShowUI(UIInfo.MarryRoot, delegate (bool bSucess, object param)
{
if (bSucess)
{
MarryRoot.Instance.OnMenuItemClick(MarryRoot.MarryMenuItemType.Copy);
}
});
}
break;
case (int)UICLASSTYPE.COPY:
{
Hashtable tempParam = new Hashtable();
tempParam["_SubClass"] = _SubClass;
tempParam["_SubSubClass"] = _SubSubClass;
UIManager.ShowUI(UIInfo.CopyScenePanelCtr, delegate (bool bSucess, object param)
{
if (bSucess)
{
int sc = (int)((Hashtable)param)["_SubClass"];
int ssc = (int)((Hashtable)param)["_SubSubClass"];
CopyScenePanelCtr.Instance.OnMenuItemClick(sc, ssc);
}
}, tempParam);
}
break;
}
}
// 运营活动跳转
// enhanceID 入口ID
// actID 活动ID
public static void GotoOperationalAct(int enhanceID, int actID)
{
switch (enhanceID)
{
case -2:
YuanBaoShopLogic.OpenChargePage();
break;
// vip
case -1:
YuanBaoShopLogic.OpenVipPage();
break;
case 0:
// 福利大厅 有分页
UIManager.ShowUI(UIInfo.WelfareRoot,
(bool bSuccess, object param) =>
{
if (bSuccess)
{
// 等级礼包NodeID = 203
WelfareRootCtr.Instance.OpenWith(actID);
}
}); break;
case 1:
// 进阶特惠 有分页
MarketingWinRootCS.OpenWithAct = actID;
if (MarketingActsRoot.Instance() != null)
{
MarketingActsRoot.Instance().ShowActById(enhanceID, actID);
}
break;
case 5:
// 开服活动 有分页
OpenServiceRootCS.OpenWithAct = actID;
if (MarketingActsRoot.Instance() != null)
{
MarketingActsRoot.Instance().ShowActById(enhanceID, actID);
}
break;
case 6:
// 每日首冲/累充 有分页
DailyRechargeRoot.OpenWithAct = actID;
if (MarketingActsRoot.Instance() != null)
{
MarketingActsRoot.Instance().ShowActById(enhanceID, actID);
}
break;
case 17:
// 节日活动 有分页
NewYearPage.OpenWithAct = actID;
if (MarketingActsRoot.Instance() != null)
{
MarketingActsRoot.Instance().ShowActById(enhanceID, actID);
}
break;
default:
// 其他无分页活动
if (MarketingActsRoot.Instance() != null)
{
MarketingActsRoot.Instance().ShowActById(enhanceID, actID);
}
break;
}
}
}