569 lines
18 KiB
C#
569 lines
18 KiB
C#
|
||
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-itemGetPath;1-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;
|
||
}
|
||
}
|
||
}
|