448 lines
13 KiB
C#
448 lines
13 KiB
C#
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using UnityEngine;
|
||
using UnityEngine.UI;
|
||
using GCGame.Table;
|
||
using Module.Log;
|
||
|
||
// 原为超值首冲活动提示
|
||
// 现为一种活动的mini提示工具,需要活动提示的信息会成为队列信息,依次显示。
|
||
// 直到所有信息显示完毕,界面关闭;新的活动类型信息传入时,重新显示
|
||
// 一旦一个活动的信息显示过,后续不再显示该类型。
|
||
// 若存在多个信息存于队列中,点击关闭按钮会显示后一个,而不是全部关闭。
|
||
public class SuperBenefitFirstRechargeTip : MonoBehaviour {
|
||
|
||
public Button closeBtn; // 关闭按钮
|
||
public Button rechargeBtn; // 充值按钮,点击跳转充值界面
|
||
public Button bgBtn; // 背景作为按钮,点击跳转到超值首冲活动界面
|
||
public UICameraTexture model; // 模型
|
||
// 在该活动中,resImg和协议的iconPath的安排如下
|
||
// 0:背景
|
||
// 1:标题
|
||
// 2:关闭按钮
|
||
// 3:描述
|
||
// 4:充值/跳转到活动描述
|
||
public Image[] resImg = new Image[5]; // 资源素材
|
||
|
||
private Queue<MarketingNewPayTip> tipQueues; // 消息队列
|
||
private int curActId; // 当前活动id
|
||
private int curEntranceId; // 活动入口ID
|
||
private static List<int> actList = new List<int>();
|
||
public static bool IsActTipsExist(int actID)
|
||
{
|
||
if(actList.Contains(actID))
|
||
{
|
||
return true;
|
||
}
|
||
else
|
||
{
|
||
actList.Add(actID);
|
||
return false;
|
||
}
|
||
}
|
||
|
||
|
||
public RectTransform animStartAnchor; // 该组件是动画的上一层节点,用于控制动画的初始位置
|
||
|
||
private Vector3 oriPos; // 记录原始位置,如果找不到目标位置,则使用这个。
|
||
|
||
private enum Side
|
||
{
|
||
left,
|
||
right
|
||
}
|
||
|
||
private Side leftOrRightAnim = Side.right; // 使用左侧还是右侧动画,-1 左侧,1 右侧
|
||
|
||
///// <summary>
|
||
///// 判断该活动的提示信息是否能被显示
|
||
///// </summary>
|
||
///// <param name="actID">活动入口ID</param>
|
||
///// <returns></returns>
|
||
//public static bool IsTipCanShow(int actID)
|
||
//{
|
||
// // 不合法活动ID 或 已显示过的不再显示
|
||
// if(actID < 0 || finishTips.Contains(actID))
|
||
// {
|
||
// return false;
|
||
// }
|
||
|
||
// return true;
|
||
//}
|
||
|
||
private static SuperBenefitFirstRechargeTip instance;
|
||
public static SuperBenefitFirstRechargeTip Instance
|
||
{ get { return instance; } }
|
||
|
||
public void Awake()
|
||
{
|
||
if(instance == null)
|
||
{
|
||
instance = this;
|
||
oriPos = animStartAnchor.position;
|
||
rechargeBtn.onClick.AddListener(OnRechargeBtnClick);
|
||
closeBtn.onClick.AddListener(Close);
|
||
bgBtn.onClick.AddListener(OnBgBtnClick);
|
||
tipQueues = new Queue<MarketingNewPayTip>();
|
||
curActId = -1;
|
||
curEntranceId = -100;
|
||
}
|
||
}
|
||
|
||
private void OnDestroy()
|
||
{
|
||
instance = null;
|
||
}
|
||
|
||
private void Close()
|
||
{
|
||
FinishOne();
|
||
}
|
||
|
||
private void OnEnable()
|
||
{
|
||
|
||
}
|
||
|
||
#region 消息发送与接收
|
||
|
||
public void ShowInfo(object packet)
|
||
{
|
||
MarketingNewPayTip data = packet as MarketingNewPayTip;
|
||
if(data != null)
|
||
{
|
||
if (tipQueues.Count <= 0)
|
||
{
|
||
tipQueues.Enqueue(data);
|
||
StartCoroutine("ShowHeadTips");
|
||
}
|
||
else
|
||
{
|
||
tipQueues.Enqueue(data);
|
||
}
|
||
}
|
||
}
|
||
|
||
private void FinishOne()
|
||
{
|
||
if (curActId != -1)
|
||
{
|
||
//if (!finishTips.Contains(curActId))
|
||
//{
|
||
// finishTips.Add(curActId);
|
||
//}
|
||
|
||
tipQueues.Dequeue();
|
||
actList.Remove(curActId);
|
||
curActId = -1;
|
||
}
|
||
|
||
// 动画内已由CanvasGroup控制整体Tip的交互功能,所以可以取消SetActive(false)
|
||
PlayHideTipsAnim();
|
||
|
||
StartCoroutine("ShowHeadTips");
|
||
|
||
}
|
||
|
||
private IEnumerator ShowHeadTips()
|
||
{
|
||
// 2.0 秒时间内判断,当前是否已经播放完动画。
|
||
for(int i = 0; i < 4; ++i)
|
||
{
|
||
AnimatorStateInfo animatorInfo = _ShowTipAnim.GetCurrentAnimatorStateInfo(0);
|
||
if(animatorInfo.IsName("None"))
|
||
{
|
||
if (tipQueues.Count > 0)
|
||
{
|
||
ShowTip();
|
||
}
|
||
else
|
||
{
|
||
model.gameObject.SetActive(false);
|
||
}
|
||
yield break;
|
||
}
|
||
else if((animatorInfo.IsName("RightHide") || animatorInfo.IsName("LeftHide")) && animatorInfo.normalizedTime >= 0.99f)
|
||
{
|
||
if (tipQueues.Count > 0)
|
||
{
|
||
ShowTip();
|
||
}
|
||
else
|
||
{
|
||
model.gameObject.SetActive(false);
|
||
}
|
||
yield break;
|
||
}
|
||
|
||
yield return new WaitForSeconds(0.5f);
|
||
}
|
||
|
||
LogModule.ErrorLog("Can't show tip.");
|
||
}
|
||
|
||
private void ShowTip()
|
||
{
|
||
MarketingNewPayTip curData = tipQueues.Peek();
|
||
curActId = curData.actID;
|
||
curEntranceId = curData.entrance;
|
||
|
||
if (curData.iconPath.Count != resImg.Length)
|
||
{
|
||
Close();
|
||
LogModule.ErrorLog("SuperBenefitFirstRechargeTip: iconPath.count is wrong !");
|
||
return;
|
||
}
|
||
|
||
InitPos(curEntranceId, curActId);
|
||
PlayShowTipsAnim();
|
||
|
||
// 将iconPath和Image一一对应
|
||
for (int i = 0; i < resImg.Length; ++i)
|
||
{
|
||
if (!string.IsNullOrEmpty(curData.iconPath[i]))
|
||
{
|
||
resImg[i].gameObject.SetActive(true);
|
||
LoadAssetBundle.Instance.SetImageSprite(resImg[i], curData.iconPath[i],
|
||
(bool isSucess, GameObject obj)=>
|
||
{
|
||
if(isSucess)
|
||
{
|
||
for(int j = 0; j < resImg.Length; ++j)
|
||
{
|
||
resImg[j].SetNativeSize();
|
||
}
|
||
}
|
||
});
|
||
}
|
||
else
|
||
{
|
||
resImg[i].gameObject.SetActive(false);
|
||
}
|
||
}
|
||
|
||
// 显示模型
|
||
Tab_CharModel tab_W = TableManager.GetCharModelByID(curData.ModelId, 0);
|
||
if (tab_W != null)
|
||
{
|
||
model.gameObject.SetActive(true);
|
||
model.InitModelPath(tab_W.ResPath, tab_W);
|
||
}
|
||
else
|
||
{
|
||
model.gameObject.SetActive(false);
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
|
||
private void OnRechargeBtnClick()
|
||
{
|
||
if (curEntranceId < -1)
|
||
{
|
||
Close();
|
||
return;
|
||
}
|
||
|
||
switch (curEntranceId)
|
||
{
|
||
// vip跳转
|
||
case -1:
|
||
YuanBaoShopLogic.OpenVipPage();
|
||
break;
|
||
// 充值商店
|
||
case 0:
|
||
YuanBaoShopLogic.OpenChargePage();
|
||
break;
|
||
default:
|
||
if (MarketingActsRoot.Instance() != null)
|
||
{
|
||
if (isJustEntranceId(curEntranceId, curActId) == true)
|
||
{
|
||
MarketingActsRoot.Instance().ShowActById(curEntranceId);
|
||
}
|
||
else
|
||
{
|
||
// Todo
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
|
||
FinishOne();
|
||
}
|
||
|
||
// 背景按钮点击,跳转活动界面
|
||
private void OnBgBtnClick()
|
||
{
|
||
if (curActId == -1)
|
||
{
|
||
Close();
|
||
return;
|
||
}
|
||
|
||
ItemGetPathPopRoot.GotoOperationalAct(curEntranceId, curActId);
|
||
|
||
//switch(curEntranceId)
|
||
//{
|
||
// // vip跳转
|
||
// case -1:
|
||
// YuanBaoShopLogic.OpenVipPage();
|
||
// break;
|
||
// // 福利大厅
|
||
// case 0:
|
||
// UIManager.ShowUI(UIInfo.WelfareRoot,
|
||
// (bool bSuccess, object param) =>
|
||
// {
|
||
// if (bSuccess)
|
||
// {
|
||
// WelfareRootCtr.Instance.OpenWith((int)param);
|
||
// }
|
||
// }, curActId);
|
||
// break;
|
||
// default:
|
||
// if (MarketingActsRoot.Instance() != null)
|
||
// {
|
||
// if(isJustEntranceId(curEntranceId, curActId) == true)
|
||
// {
|
||
// MarketingActsRoot.Instance().ShowActById(curEntranceId);
|
||
// }
|
||
// else
|
||
// {
|
||
// // Todo
|
||
// }
|
||
// }
|
||
// break;
|
||
//}
|
||
|
||
FinishOne();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 判断入口ID和活动ID是否用同一个预制体,是的话,不用二级打开
|
||
/// </summary>
|
||
/// <param name="enhanceID">入口 ID</param>
|
||
/// <param name="actID">活动 ID</param>
|
||
/// <returns></returns>
|
||
private bool isJustEntranceId(int enhanceID, int actID)
|
||
{
|
||
Tab_ActInfoClient tab_En = TableManager.GetActInfoClientByID(enhanceID, 0);
|
||
Tab_ActInfoClient tab_Act = TableManager.GetActInfoClientByID(actID, 0);
|
||
if (tab_En != null && tab_Act != null)
|
||
{
|
||
if (tab_En.UIPath == tab_Act.UIPath)
|
||
{
|
||
return true;
|
||
}
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
#region 动画控制
|
||
|
||
// 跟随左侧所有按钮的位移动画
|
||
// FunctionBaseShowPanel
|
||
public Animator _ShowAnim;
|
||
|
||
public void ShowBtns()
|
||
{
|
||
_ShowAnim.Play("Show", 0, 0);
|
||
}
|
||
|
||
public void HideBtns()
|
||
{
|
||
_ShowAnim.Play("Hide", 0, 0);
|
||
}
|
||
|
||
// 单纯该提示的动画
|
||
public Animator _ShowTipAnim;
|
||
|
||
public void PlayShowTipsAnim()
|
||
{
|
||
if (leftOrRightAnim == Side.left)
|
||
{
|
||
_ShowTipAnim.Play("LeftShow");
|
||
}
|
||
else
|
||
{
|
||
_ShowTipAnim.Play("RightShow");
|
||
}
|
||
}
|
||
|
||
public void PlayHideTipsAnim()
|
||
{
|
||
if (leftOrRightAnim == Side.left)
|
||
{
|
||
_ShowTipAnim.Play("LeftHide");
|
||
}
|
||
else
|
||
{
|
||
_ShowTipAnim.Play("RightHide");
|
||
}
|
||
}
|
||
|
||
// 初始化显示位置
|
||
public void InitPos(int enhanceID, int actID)
|
||
{
|
||
Vector3 targetPos = oriPos;
|
||
switch (enhanceID)
|
||
{
|
||
// vip 需要左上角人物框下的Vip位置
|
||
// ButtonMarket
|
||
case -1:
|
||
if(PlayerFrameLogic.Instance() != null && PlayerFrameLogic.Instance().gameObject.activeInHierarchy == true)
|
||
{
|
||
Transform target = PlayerFrameLogic.Instance().m_VipLevel.transform;
|
||
if(target != null)
|
||
{
|
||
targetPos = target.position;
|
||
}
|
||
}
|
||
|
||
leftOrRightAnim = Side.left ;
|
||
break;
|
||
// 福利大厅
|
||
case 0:
|
||
if (FunctionButtonLogic.Instance() != null && FunctionButtonLogic.Instance().gameObject.activeInHierarchy == true)
|
||
{
|
||
LogModule.DebugLog(FunctionButtonLogic.Instance().gameObject.name);
|
||
Transform target = FunctionButtonLogic.Instance().gameObject.transform.Find("Anchor-RightTop/FunctionWindow/FunctionButtonOffset/TopBtns/TopBtns/ButtonLingJiang");
|
||
if (target != null)
|
||
{
|
||
targetPos = target.position;
|
||
}
|
||
}
|
||
|
||
leftOrRightAnim = Side.right;
|
||
break;
|
||
// 其他运营活动
|
||
default:
|
||
leftOrRightAnim = Side.right;
|
||
// 找到活动入口的位置
|
||
if (MarketingActsRoot.Instance() != null && MarketingActsRoot.Instance().gameObject.activeInHierarchy)
|
||
{
|
||
MarketingMainMenu actIconCS = null;
|
||
actIconCS = MarketingActsRoot.Instance().GetContainItem(enhanceID);
|
||
if (actIconCS != null)
|
||
{
|
||
targetPos = actIconCS.transform.position;
|
||
|
||
// 运营活动中 左是0,右是1
|
||
if(actIconCS.MyActState.leftOrRight == 0)
|
||
{
|
||
leftOrRightAnim = Side.left;
|
||
}
|
||
}
|
||
}
|
||
|
||
break;
|
||
}
|
||
|
||
// 如果没找到初始位置,使用默认位置,也用左边的动画
|
||
animStartAnchor.localPosition = animStartAnchor.parent.InverseTransformVector(targetPos);
|
||
}
|
||
|
||
#endregion
|
||
}
|