Files
JJBB/Assets/Project/Script/LuaScripts/UI/MarketingActsRoot.cs
2024-08-23 15:49:34 +08:00

470 lines
13 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 System.Collections.Generic;
using Games.GlobeDefine;
using GCGame.Table;
using Module.Log;
using GCGame;
using System;
public class MarketingActsRoot : UIControllerBase<MarketingActsRoot>
{
#region
public static void ShowMarketingAct(string actIDStr)
{
if (!MarketingActsRoot.Instance())
return;
int actID = int.Parse(actIDStr);
var actState = MarketingActsRoot.Instance().actStages.Find((actStage) =>
{
if (actStage.actID == actID)
return true;
return false;
});
if (actState != null)
{
MarketingActsRoot.Instance().OnActBtnClick(actState);
}
}
public static void ShowMarketingActByUI(string uiName)
{
var actState = MarketingActsRoot.Instance().actStages.Find((actStage) =>
{
var actinfo = TableManager.GetActInfoClientByID(actStage.actID);
if (actinfo.UIPath.Equals(uiName))
return true;
return false;
});
if (actState != null)
{
MarketingActsRoot.Instance().OnActBtnClick(actState);
}
}
#endregion
#region
public void Start()
{
SetInstance(this);
ReqActList();
ShowRefresh();
}
public void OnDestory()
{
SetInstance(null);
}
public void Close()
{
LuaUIManager.Instance.CloseUI("MarketingActsRoot");
}
#endregion
// 显示获得物品数据相关
public float showTipsInterval = 0.0f; // 显示提示的间隔
private Queue<MarketingActAwardItem> tipsQueue; // 等待显示的获取信息队列
public List<MarketingActState> actStages; // 目前开启的活动数组
// 现活动分两侧显示
public UIContainerBase _ActContainer_R; // 右侧显示的活动
public UIContainerBase _ActContainer_L; // 左侧显示的活动 虽说是左侧显示的活动,但仅为超值首冲活动服务,加上其他活动按钮上的显示会存在问题。
public Dictionary<int, GameObject> _ShowingWin = new Dictionary<int, GameObject>();
//public delegate void ShowSubActByID(GameObject uiGO);
//public ShowSubActByID openSubActDel;
private bool isOpenSubAct = false;
private int entranceID = int.MinValue;
private int actID = int.MinValue;
public void SetActListMenu(List<MarketingActState> actStages)
{
List<MarketingActState> rightMarketingActState = new List<MarketingActState>();
List<MarketingActState> leftMarketingActState = new List<MarketingActState>();
for(int i = 0; i < actStages.Count; ++i)
{
if(actStages[i].leftOrRight == 0)
{
leftMarketingActState.Add(actStages[i]);
}
if(actStages[i].leftOrRight == 1)
{
rightMarketingActState.Add(actStages[i]);
}
}
this.actStages = actStages;
leftMarketingActState.Sort(ActMenuSort);
rightMarketingActState.Sort(ActMenuSort);
_ActContainer_L.InitContentItem(leftMarketingActState, OnActBtnClick);
_ActContainer_R.InitContentItem(rightMarketingActState, OnActBtnClick);
}
public void OnActBtnClick(object actObj)
{
MarketingActState actState = actObj as MarketingActState;
var tabAct = TableManager.GetActInfoClientByID(actState.actID, 0);
if (tabAct == null)
return;
// vip特殊处理
if (actState.actID == 1000)
{
YuanBaoShopLogic.OpenVipPage();
}
else if(actState.JumpTo != null && !string.IsNullOrEmpty(actState.JumpTo))
{
string[] parms = actState.JumpTo.TrimEnd(' ', '"').Split('*');
if (parms.Length > 0)
{
int jumpToEnhance = Convert.ToInt32(parms[0]);
if(jumpToEnhance == actState.actID)
{
LogModule.ErrorLog("ERROR: Trying jump to the same act !!!");
return;
}
}
if (parms.Length > 1)
{
ItemGetPathPopRoot.GotoOperationalAct(Convert.ToInt32(parms[0]), Convert.ToInt32(parms[1]));
}
else if (parms.Length > 0)
{
ItemGetPathPopRoot.GotoOperationalAct(Convert.ToInt32(parms[0]), -1);
}
}
else
{
Hashtable hash = new Hashtable();
hash.Add("ActState", actState);
LuaUIManager.Instance.ShowLuaUI(tabAct.UIPath, LoadUICallBack, hash, true);
}
}
// 每次关闭页面,更新红点信息。
public void ClearShowingWin(int actID)
{
_ShowingWin.Remove(actID);
ReqActList();
}
public void LoadUICallBack(bool sucess, object param, GameObject uiObj)
{
Hashtable hash = (Hashtable)param;
MarketingActState actState = (MarketingActState)hash["ActState"];
if(_ShowingWin.ContainsKey(actState.actID))
{
_ShowingWin.Remove(actState.actID);
}
_ShowingWin.Add(actState.actID, uiObj);
var uiCs = uiObj.GetComponent<MarketingUIBaseCS>();
if (uiCs != null)
{
uiCs._ActID = actState.actID;
}
var uiLua = uiObj.GetComponent<MarketingUIBaseLua>();
if (uiLua != null)
{
uiLua.Awake();
uiLua.ActID = actState.actID;
}
uiObj.transform.SetAsLastSibling();
uiObj.SetActive(true);
if (isOpenSubAct == true)
{
isOpenSubAct = false;
if (actID != int.MinValue)
{
var luaScript = uiObj.GetComponent<MarketingUIBaseLua>();
if (luaScript != null)
{
luaScript.CallScriptFuncAtPath(luaScript.luaScript + ".ShowActByID", this.actID);
}
}
}
// 清空指定打开页面记录
SetOpenData();
}
public void LoadUICallBackLua(bool sucess, MarketingActState param, GameObject uiObj)
{
Hashtable hash = new Hashtable();
hash["ActState"] = param;
LoadUICallBack(sucess, hash, uiObj);
}
#region
public void ReqActList()
{
MarketingActsReq packet = new MarketingActsReq();
packet.actType = -1;
packet.SendMsg();
//MarketingActsRet packetRet = new MarketingActsRet();
//packetRet.actType = -1;
//packetRet.actIDState = new System.Collections.Generic.List<MarketingActState>();
//packetRet.actIDState.Add(new MarketingActState() { actID = 1, state = 0 });
//packetRet.actIDState.Add(new MarketingActState() { actID = 2, state = 0 });
//packetRet.actIDState.Add(new MarketingActState() { actID = 3, state = 1 });
//packetRet.actIDState.Add(new MarketingActState() { actID = 4, state = 1 });
//packetRet.SendMsg();
}
#endregion
#region showAnim
public Animator _ShowAnim;
private bool _FlagStateChange = true;
private void Update()
{
if(_FlagStateChange)
{
AnimatorStateInfo info = _ShowAnim.GetCurrentAnimatorStateInfo(0);
if (_ShowFlag)
{
if (!info.IsName("Show"))
{
_ShowAnim.Play("Show", 0, 0);
}
}
else
{
if (!info.IsName("Hide"))
{
_ShowAnim.Play("Hide", 0, 0);
}
}
_FlagStateChange = false;
}
}
public static bool _ShowFlag = true;
public void ShowRefresh()
{
_FlagStateChange = true;
}
public static void ShowBtns()
{
_ShowFlag = true;
if (MarketingActsRoot.Instance())
{
MarketingActsRoot.Instance().ShowRefresh();
}
}
public static void HideBtns()
{
_ShowFlag = false;
if (MarketingActsRoot.Instance())
{
MarketingActsRoot.Instance().ShowRefresh();
}
}
#endregion
#region Show tips
// 显示获得的信息
public void ShowGetTips(List<MarketingActAwardItem> awardList)
{
if(tipsQueue == null)
{
tipsQueue = new Queue<MarketingActAwardItem>();
}
if (tipsQueue.Count > 0)
{
for (int i = 0; i < awardList.Count; i++)
{
tipsQueue.Enqueue(awardList[i]);
}
}
else
{
for (int i = 0; i < awardList.Count; i++)
{
tipsQueue.Enqueue(awardList[i]);
}
StartCoroutine("ShowTips");
}
}
private IEnumerator ShowTips()
{
// 安全计数,防止死循环
int count = 0;
while (tipsQueue.Count > 0)
{
MarketingActAwardItem item = tipsQueue.Dequeue();
Tab_CommonItem tab = TableManager.GetCommonItemByID(item.awardSubType, 0);
string tip = tab.Name + " X " + item.awardNum;
GUIData.AddNotifyData(tip);
for (float i = 0.0f; i < showTipsInterval; i += Time.deltaTime)
{
yield return null;
}
count++;
if (count > 50)
{
break;
}
}
}
#endregion
// 替代 UIContainerBase.GetContainItem<T>。
public MarketingMainMenu GetContainItem(int enhanceID)
{
bool hasFound = false;
MarketingMainMenu result = null;
_ActContainer_R.ForeachActiveItem<MarketingMainMenu>((MarketingMainMenu obj) =>
{
if (hasFound == false && obj.MyActState.actID == enhanceID)
{
hasFound = true;
result = obj;
}
});
if(hasFound == true)
{
return result;
}
_ActContainer_L.ForeachActiveItem<MarketingMainMenu>((MarketingMainMenu obj) =>
{
if (hasFound == false && obj.MyActState.actID == enhanceID)
{
hasFound = true;
result = obj;
}
});
return result;
}
//对外接口开启入口活动的界面entrance = 入口IDactID = 活动ID。
public bool ShowActById(int entranceID = int.MinValue, int actID = int.MinValue)
{
if ((actID > 0 && GlobalData.IsMarketingActActive(actID) == false)
|| (actID < 0 && GlobalData.IsMarketingActActive(entranceID) == false))
{
GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{6741}"));
return false;
}
SetOpenData(entranceID, actID);
isOpenSubAct = true;
MarketingActState newAct = new MarketingActState();
newAct.actID = entranceID;
OnActBtnClick(newAct);
return true;
}
// 设置打开活动参数
private void SetOpenData(int entranceID = int.MinValue, int actID = int.MinValue)
{
this.entranceID = entranceID;
this.actID = actID;
}
private int ActMenuSort(MarketingActState l, MarketingActState r)
{
Tab_ActInfoClient tab_l = TableManager.GetActInfoClientByID(l.actID, 0);
Tab_ActInfoClient tab_r = TableManager.GetActInfoClientByID(r.actID, 0);
if(tab_l.Order != -1 && tab_r.Order != -1)
{
return tab_l.Order.CompareTo(tab_r.Order);
}
else if(tab_l.Order != tab_r.Order)
{
return -tab_l.Order.CompareTo(tab_r.Order);
}
else
{
int index_l = actStages.IndexOf(l);
int index_r = actStages.IndexOf(r);
return index_l.CompareTo(index_r);
}
}
// 标准化一次传过来的特效
// 因为这个特效需要匹配不同的大小框
//public static void GetEffet(float size, int quality, Transform parent)
//{
// int effectID = -1;
// if (quality == 1)
// {
// effectID = 7405;
// }
// else if (quality == 2)
// {
// effectID = 7405;
// }
// Tab_Effect effect = TableManager.GetEffectByID(effectID, 0);
// if (effect != null)
// {
// Hashtable Info = new Hashtable();
// Info.Add("parent", parent);
// Info.Add("size", size);
// LoadAssetBundle.Instance.LoadGameObject(LoadAssetBundle.BUNDLE_PATH_EFFECT, effect.Path,
// (string assetName, GameObject assetItem, Hashtable hashTable) =>
// {
// Transform newParent = hashTable["size"] as Transform;
// if (assetItem != null && newParent.gameObject.activeInHierarchy)
// {
// Transform newEffect = Instantiate(assetItem).transform;
// float scale = (float)hashTable["size"];
// scale = scale / 72.0f;
// newEffect.localScale = new Vector3(scale, scale, 1.0f);
// newEffect.parent = newParent;
// newEffect.localPosition = Vector3.zero;
// }
// }, Info);
// }
//}
}