|
@@ -0,0 +1,414 @@
|
|
|
+using FairyGUI;
|
|
|
+using UnityEngine;
|
|
|
+using UI.TurnTable;
|
|
|
+using System.Collections;
|
|
|
+using System.Collections.Generic;
|
|
|
+using ET;
|
|
|
+using System.Threading.Tasks;
|
|
|
+using System.Linq;
|
|
|
+
|
|
|
+namespace GFGGame
|
|
|
+{
|
|
|
+
|
|
|
+ public class TurnTableView : BaseWindow
|
|
|
+ {
|
|
|
+ private UI_TurnTableUI _ui;
|
|
|
+ private ValueBarController _valueBarController;
|
|
|
+ private int WaitTime;
|
|
|
+ private float duratio;
|
|
|
+ //这里固定旋转
|
|
|
+ private float endValue;
|
|
|
+ //这里获得偏移量
|
|
|
+ private List<float> normalEndValue = new List<float>();
|
|
|
+ public List<GLoader> pointerList = new List<GLoader>();
|
|
|
+ //转盘物品
|
|
|
+ public List<DropOutCfg> rewardItemList = new List<DropOutCfg>();
|
|
|
+ //下面奖励物品
|
|
|
+ public List<TurntableRewardCfg> rewardList = new List<TurntableRewardCfg>();
|
|
|
+ public List<float> angleList = new List<float>() {0,39,74,109 ,145,180,215,250,288,325};
|
|
|
+ public int wishType = 0;
|
|
|
+ private EffectUI _effectUI1;
|
|
|
+ private EffectUI _effectUI2;
|
|
|
+ private EffectUI _effectUI3;
|
|
|
+ private EffectUI _effectUI4;
|
|
|
+
|
|
|
+ public override void Dispose()
|
|
|
+ {
|
|
|
+ EffectUIPool.Recycle(_effectUI1);
|
|
|
+ _effectUI1 = null;
|
|
|
+ EffectUIPool.Recycle(_effectUI2);
|
|
|
+ _effectUI2 = null;
|
|
|
+ EffectUIPool.Recycle(_effectUI3);
|
|
|
+ _effectUI3 = null;
|
|
|
+ EffectUIPool.Recycle(_effectUI4);
|
|
|
+ _effectUI4 = null;
|
|
|
+ if (_valueBarController != null)
|
|
|
+ {
|
|
|
+ _valueBarController.Dispose();
|
|
|
+ _valueBarController = null;
|
|
|
+ }
|
|
|
+ if (_ui != null)
|
|
|
+ {
|
|
|
+ _ui.Dispose();
|
|
|
+ }
|
|
|
+ _ui = null;
|
|
|
+
|
|
|
+ base.Dispose();
|
|
|
+ }
|
|
|
+
|
|
|
+ protected override void Init()
|
|
|
+ {
|
|
|
+ base.Init();
|
|
|
+ packageName = UI_TurnTableUI.PACKAGE_NAME;
|
|
|
+ _ui = UI_TurnTableUI.Create();
|
|
|
+ viewCom = _ui.target;
|
|
|
+ isfullScreen = true;
|
|
|
+ isReturnView = true;
|
|
|
+
|
|
|
+ _valueBarController = new ValueBarController(_ui.m_valueBar);
|
|
|
+ _ui.m_btnBack.onClick.Add(OnClickBtnClose);
|
|
|
+ _ui.m_btnStartOne.onClick.Add(OnClickBtnStartOne);
|
|
|
+ _ui.m_btnStartThree.onClick.Add(OnClickBtnStartThree);
|
|
|
+ _ui.m_rewardIcon.onClick.Add(OnClickBtnReward);
|
|
|
+ _ui.m_shopBtn.onClick.Add(OnClickBtnShop);
|
|
|
+ _ui.m_giftBtn.onClick.Add(OnClickBtnGift);
|
|
|
+ endValue = 1080;
|
|
|
+ duratio = 2.0f;
|
|
|
+ WaitTime = 2600;
|
|
|
+ AddEffect();
|
|
|
+ }
|
|
|
+ private void AddEffect()
|
|
|
+ {
|
|
|
+ }
|
|
|
+ protected override void OnShown()
|
|
|
+ {
|
|
|
+ base.OnShown();
|
|
|
+ _ui.m_bg.url = ResPathUtil.GetBgImgPath("zqzp_bg");
|
|
|
+ if(pointerList == null || pointerList.Count < 3)
|
|
|
+ {
|
|
|
+ pointerList.Add(_ui.m_pointer0);
|
|
|
+ pointerList.Add(_ui.m_pointer1);
|
|
|
+ pointerList.Add(_ui.m_pointer2);
|
|
|
+ }
|
|
|
+ normalEndValue.Clear();
|
|
|
+ int activityID = ActivityDataManager.Instance.GetCurOpenActiveByType(ActivityDataManager.Instance.TurnTableActivityType);
|
|
|
+ int propID = TurntableLuckyBoxCfgArray.Instance.GetCfgByActivityId(activityID).CostID;
|
|
|
+ int dropId = TurntableLuckyBoxCfgArray.Instance.GetCfgByActivityId(activityID).DropId;
|
|
|
+ rewardItemList = DropOutCfgArray.Instance.GetCfgsByid(dropId);
|
|
|
+ rewardList = TurntableRewardCfgArray.Instance.GetCfgsByActivityId(activityID);
|
|
|
+ _valueBarController.OnShown();
|
|
|
+ _valueBarController.UpdateList(new List<int>() { propID, ConstItemID.DIAMOND_PURPLE});
|
|
|
+ UpdateView();
|
|
|
+ UpdateRewardItem();
|
|
|
+ UpdateReward();
|
|
|
+ }
|
|
|
+ protected override void OnHide()
|
|
|
+ {
|
|
|
+ base.OnHide();
|
|
|
+ _ui.m_btnStartOne.touchable = true;
|
|
|
+ _ui.m_btnStartThree.touchable = true;
|
|
|
+ _valueBarController.OnHide();
|
|
|
+ pointerList.Clear();
|
|
|
+ ActivityDataManager.Instance.threeTurnResult.Clear();
|
|
|
+ ActivityDataManager.Instance.TurnRewardList.Clear();
|
|
|
+ }
|
|
|
+ protected override void AddEventListener()
|
|
|
+ {
|
|
|
+ base.AddEventListener();
|
|
|
+ EventAgent.AddEventListener(ConstMessage.SHOP_BUY, UpdateView);
|
|
|
+ EventAgent.AddEventListener(ConstMessage.RED_CHANGE, UpdateReward);
|
|
|
+ EventAgent.AddEventListener(ConstMessage.REWARDVIEW_CLOTHER, ShowReward);
|
|
|
+ }
|
|
|
+ protected override void RemoveEventListener()
|
|
|
+ {
|
|
|
+ base.RemoveEventListener();
|
|
|
+ EventAgent.RemoveEventListener(ConstMessage.SHOP_BUY, UpdateView);
|
|
|
+ EventAgent.RemoveEventListener(ConstMessage.RED_CHANGE, UpdateReward);
|
|
|
+ EventAgent.RemoveEventListener(ConstMessage.REWARDVIEW_CLOTHER, ShowReward);
|
|
|
+ }
|
|
|
+ private void ShowReward()
|
|
|
+ {
|
|
|
+ if (ActivityDataManager.Instance.TurnSpecialRewardList != null && ActivityDataManager.Instance.TurnSpecialRewardList.Count > 0)
|
|
|
+ {
|
|
|
+ ViewManager.Show<MatchingCompetitionRewardView>(new object[] { ItemUtil.CreateItemDataList(ActivityDataManager.Instance.TurnSpecialRewardList), null });
|
|
|
+ ActivityDataManager.Instance.TurnSpecialRewardList = null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ private void UpdateView()
|
|
|
+ {
|
|
|
+ //还要判断是否已购买,和时间
|
|
|
+ var activityInfoByTypeList = ActivityGlobalDataManager.Instance.GetActivityInfoByType(ActivityType.XSLB3);
|
|
|
+ if (activityInfoByTypeList.Count == 0)
|
|
|
+ {
|
|
|
+ _ui.m_gift.visible = false;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ _ui.m_gift.visible = true;
|
|
|
+ }
|
|
|
+ _ui.m_reward.target.scrollPane.SetPercX(GetRewardIndex(),false);
|
|
|
+ }
|
|
|
+ //更新转盘上物品
|
|
|
+ private void UpdateRewardItem()
|
|
|
+ {
|
|
|
+ if(rewardItemList.Count < 10)
|
|
|
+ {
|
|
|
+ //现在转盘上只有十个item
|
|
|
+ Debug.LogError("奖励不足10个");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ for(int i = 0;i< 10;i++)
|
|
|
+ {
|
|
|
+ GComponent comProBonus = _ui.target.GetChild("item" + i).asCom;
|
|
|
+ UI_rewardItem rewardItem = UI_rewardItem.Proxy(comProBonus);
|
|
|
+ ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(rewardItemList[i].item);
|
|
|
+ rewardItem.m_icon.url = ResPathUtil.GetIconPath(itemCfg);
|
|
|
+ rewardItem.m_numText.text = string.Format("x{0}", rewardItemList[i].maxNum);
|
|
|
+ rewardItem.m_c1.selectedIndex = 0;
|
|
|
+ if (rewardItem.target.data == null)
|
|
|
+ {
|
|
|
+ rewardItem.target.onClick.Add(OnClickTableRewardItem);
|
|
|
+ }
|
|
|
+ rewardItem.target.data = itemCfg.id;
|
|
|
+ UI_rewardItem.ProxyEnd();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //更新下面次数的物品
|
|
|
+ private void UpdateReward()
|
|
|
+ {
|
|
|
+ _ui.m_numberText.text = ActivityDataManager.Instance.TurnTableTimes.ToString();
|
|
|
+ _ui.m_reward.m_bar.max = rewardList.Count;
|
|
|
+ _ui.m_reward.m_bar.value = GetRewardIndex();
|
|
|
+ for (int i = 0; i < rewardList.Count; i++)
|
|
|
+ {
|
|
|
+ GComponent comProBonus = _ui.m_reward.target.GetChild("itemj" + i).asCom;
|
|
|
+ UI_reward rewardItem = UI_reward.Proxy(comProBonus);
|
|
|
+ ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(rewardList[i].BonusArr[0][0]);
|
|
|
+ rewardItem.m_icon.url = ResPathUtil.GetIconPath(itemCfg);
|
|
|
+ rewardItem.m_numText.text = rewardList[i].Num.ToString();
|
|
|
+ if (ActivityDataManager.Instance.TurnRewardStateDic.ContainsKey(rewardList[i].Id))
|
|
|
+ {
|
|
|
+ if (i>(GetRewardIndex()-1) || ActivityDataManager.Instance.TurnRewardStateDic[rewardList[i].Id] == 2)
|
|
|
+ {
|
|
|
+ rewardItem.m_c1.selectedIndex = 0;
|
|
|
+ RedDotController.Instance.SetComRedDot(rewardItem.target, false, "");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ rewardItem.m_c1.selectedIndex = 1;
|
|
|
+ RedDotController.Instance.SetComRedDot(rewardItem.target, true, "");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //if (i == rewardList.Count - 1)
|
|
|
+ //{
|
|
|
+ // comProBonus.x = ((float)rewardList[i].num / (float)rewardList[rewardList.Count - 1].num) * _ui.m_reward.m_bar.width - 30;
|
|
|
+ //}
|
|
|
+ //else
|
|
|
+ {
|
|
|
+ comProBonus.x = ((float)(i+1) / (float)rewardList.Count) * _ui.m_reward.m_bar.width - 20;
|
|
|
+ }
|
|
|
+ if(rewardItem.target.data == null)
|
|
|
+ {
|
|
|
+ rewardItem.target.onClick.Add(OnClickRewardItem);
|
|
|
+ }
|
|
|
+ List<int> dateList = new List<int>() { itemCfg.id, rewardList[i].Id };
|
|
|
+ rewardItem.target.data = dateList;
|
|
|
+ UI_rewardItem.ProxyEnd();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ private void OnClickTableRewardItem(EventContext context)
|
|
|
+ {
|
|
|
+ int id = (int)(context.sender as GObject).data;
|
|
|
+ GoodsItemTipsController.ShowItemTips(id);
|
|
|
+ }
|
|
|
+ private async void OnClickRewardItem(EventContext context)
|
|
|
+ {
|
|
|
+ List<int> idList = (List<int>)(context.sender as GObject).data;
|
|
|
+ //判断是否可领取
|
|
|
+ if (ActivityDataManager.Instance.TurnRewardStateDic.ContainsKey(idList[1]))
|
|
|
+ {
|
|
|
+ //if (ActivityDataManager.Instance.TurnRewardStateDic[idList[1]] != 1)
|
|
|
+ if(idList[1] > GetRewardIndex() || ActivityDataManager.Instance.TurnRewardStateDic[idList[1]] == 2)
|
|
|
+ {
|
|
|
+ GoodsItemTipsController.ShowItemTips(idList[0]);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ bool result = await ActivitySProxy.ReqGetTurnTableReward(idList[1]);
|
|
|
+ if (result)
|
|
|
+ {
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ private void OnClickBtnClose(object param)
|
|
|
+ {
|
|
|
+ ViewManager.GoBackFrom(typeof(TurnTableView).FullName);
|
|
|
+ }
|
|
|
+ private async void OnClickBtnStartOne()
|
|
|
+ {
|
|
|
+ bool result = await ActivitySProxy.ReqTurnTableWish(1);
|
|
|
+ if (result)
|
|
|
+ {
|
|
|
+ wishType = 0;
|
|
|
+ _ui.m_btnStartOne.touchable = false;
|
|
|
+ _ui.m_btnStartThree.touchable = false;
|
|
|
+ await TurnStart(0);
|
|
|
+ await Task.Delay(WaitTime);
|
|
|
+ BonusController.TryShowBonusList(ItemUtil.CreateItemDataList(ActivityDataManager.Instance.TurnRewardList));
|
|
|
+ ActivityDataManager.Instance.TurnRewardList.Clear();
|
|
|
+ UpdateReward();
|
|
|
+ _ui.m_btnStartOne.touchable = true;
|
|
|
+ _ui.m_btnStartThree.touchable = true;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //Debug.LogError("许愿失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ private async void OnClickBtnStartThree()
|
|
|
+ {
|
|
|
+ bool result = await ActivitySProxy.ReqTurnTableWish(2);
|
|
|
+ if (result)
|
|
|
+ {
|
|
|
+ _ui.m_btnStartOne.touchable = false;
|
|
|
+ _ui.m_btnStartThree.touchable = false;
|
|
|
+ await TurnStart(0);
|
|
|
+ await Task.Delay(WaitTime);
|
|
|
+ await TurnStart(1);
|
|
|
+ await Task.Delay(WaitTime);
|
|
|
+ await TurnStart(2);
|
|
|
+ await Task.Delay(WaitTime);
|
|
|
+ BonusController.TryShowBonusList(ItemUtil.CreateItemDataList(ActivityDataManager.Instance.TurnRewardList));
|
|
|
+ ActivityDataManager.Instance.TurnRewardList.Clear();
|
|
|
+ _ui.m_btnStartOne.touchable = true;
|
|
|
+ _ui.m_btnStartThree.touchable = true;
|
|
|
+ UpdateReward();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //Debug.LogError("许愿失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ private void OnClickBtnShop()
|
|
|
+ {
|
|
|
+ ViewManager.Show<StoreView>(new object[] { ConstStoreTabId.STORE_EXCHANGE, ConstStoreSubId.STORE_ACTIVITY_EXCHANGE });
|
|
|
+ }
|
|
|
+ private void OnClickBtnReward()
|
|
|
+ {
|
|
|
+ ViewManager.Show<TurnSpecialTipsView>();
|
|
|
+ }
|
|
|
+ private void OnClickBtnGift()
|
|
|
+ {
|
|
|
+ var activityInfoByTypeList =
|
|
|
+ ActivityGlobalDataManager.Instance.GetActivityInfoByType(ActivityType.XSLB3);
|
|
|
+
|
|
|
+ var list = activityInfoByTypeList
|
|
|
+ .Where(a => a.EndTime > TimeInfo.Instance.ServerNow()).ToList();
|
|
|
+ if (list.Count == 0)
|
|
|
+ PromptController.Instance.ShowFloatTextPrompt("活动已结束");
|
|
|
+ else
|
|
|
+ ViewManager.Show<RushSaleGiftBoxView>(new object[] { ActivityType.XSLB3, this.viewData });
|
|
|
+ }
|
|
|
+ private async ETTask TurnStart(int Round)
|
|
|
+ {
|
|
|
+ UpdateRewardItem();
|
|
|
+ GetOffSetValue(Round);
|
|
|
+ if (normalEndValue.Count >= 3)
|
|
|
+ {
|
|
|
+ TurnTable(0, normalEndValue[0], Round);
|
|
|
+ }
|
|
|
+ await Task.Delay(200);
|
|
|
+ if(normalEndValue.Count >= 2)
|
|
|
+ {
|
|
|
+ TurnTable(1, normalEndValue[1], Round);
|
|
|
+ }
|
|
|
+ await Task.Delay(200);
|
|
|
+ if (normalEndValue.Count >= 3)
|
|
|
+ {
|
|
|
+ TurnTable(2, normalEndValue[2], Round);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ private void TurnTable(int index,float OffValue,int Round)
|
|
|
+ {
|
|
|
+ pointerList[index].rotation = pointerList[index].rotation % 360;
|
|
|
+ float selfEndValue = pointerList[index].rotation;
|
|
|
+ selfEndValue += endValue + OffValue;
|
|
|
+ pointerList[index].TweenRotate(selfEndValue, duratio).OnComplete(() =>SetItemSelect(index,Round));
|
|
|
+ }
|
|
|
+ private void SetItemSelect(int index,int Round)
|
|
|
+ {
|
|
|
+ int id = ActivityDataManager.Instance.threeTurnResult[Round][index].ConfigId;
|
|
|
+ int i = GetItemIndexRota(id);
|
|
|
+ GComponent comProBonus = _ui.target.GetChild("item" + i).asCom;
|
|
|
+ UI_rewardItem rewardItem = UI_rewardItem.Proxy(comProBonus);
|
|
|
+ rewardItem.m_c1.selectedIndex = 1;
|
|
|
+ UI_rewardItem.ProxyEnd();
|
|
|
+ }
|
|
|
+ private void GetOffSetValue(int index)
|
|
|
+ {
|
|
|
+ normalEndValue.Clear();
|
|
|
+ if (ActivityDataManager.Instance.threeTurnResult.ContainsKey(index))
|
|
|
+ {
|
|
|
+ normalEndValue.Add(GetOffSet(ActivityDataManager.Instance.threeTurnResult[index][0].ConfigId, 0));
|
|
|
+ normalEndValue.Add(GetOffSet(ActivityDataManager.Instance.threeTurnResult[index][1].ConfigId, 1));
|
|
|
+ normalEndValue.Add(GetOffSet(ActivityDataManager.Instance.threeTurnResult[index][2].ConfigId, 2));
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ ET.Log.Error("未获得奖励");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //通过获得的物品id和当前指针位置获得偏移角度
|
|
|
+ private float GetOffSet(int itemID,int index)
|
|
|
+ {
|
|
|
+ float currentRota = pointerList[index].rotation % 360;
|
|
|
+ float OffSetOne = 360 - currentRota;
|
|
|
+ float OffSetTwo = angleList[GetItemIndexRota(itemID)];
|
|
|
+ float OffSet;
|
|
|
+ if(currentRota > OffSetTwo)
|
|
|
+ {
|
|
|
+ OffSet = OffSetTwo + OffSetOne;
|
|
|
+ }
|
|
|
+ else if (currentRota < OffSetTwo)
|
|
|
+ {
|
|
|
+ OffSet = OffSetTwo - currentRota;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ OffSet = 0;
|
|
|
+ }
|
|
|
+ return OffSet;
|
|
|
+ }
|
|
|
+ private int GetItemIndexRota(int id)
|
|
|
+ {
|
|
|
+ for(int i = 0;i<rewardItemList.Count;i++)
|
|
|
+ {
|
|
|
+ if(id == rewardItemList[i].item)
|
|
|
+ {
|
|
|
+ return i;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ private int GetRewardIndex()
|
|
|
+ {
|
|
|
+ for (int i = 0; i < rewardList.Count - 1; i++)
|
|
|
+ {
|
|
|
+ if (ActivityDataManager.Instance.TurnTableTimes < rewardList[0].Num)
|
|
|
+ {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ else if(ActivityDataManager.Instance.TurnTableTimes >= rewardList[rewardList.Count - 1].Num)
|
|
|
+ {
|
|
|
+ return rewardList.Count;
|
|
|
+ }
|
|
|
+ if (ActivityDataManager.Instance.TurnTableTimes >= rewardList[i].Num && ActivityDataManager.Instance.TurnTableTimes < rewardList[i + 1].Num)
|
|
|
+ {
|
|
|
+ return i + 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|