LuckyBoxActivityView.cs 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469
  1. using FairyGUI;
  2. using UI.LuckyBox;
  3. using UI.CommonGame;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using UnityEngine;
  8. using ET;
  9. using System.Runtime.InteropServices;
  10. using cfg.GfgCfg;
  11. namespace GFGGame
  12. {
  13. public class LuckyBoxActivityView : BaseWindow
  14. {
  15. private UI_LuckyBoxActivityUI _ui;
  16. private ValueBarController _valueBarController;
  17. private LuckyBoxController _luckyBoxCtrl;
  18. private ActivityOpenCfg _activityCfg;
  19. private LuckyBoxCfg _luckyBoxCfg;
  20. private int _activityId;
  21. private int _activityType;
  22. private Dictionary<string, EffectUI> _effectUIDic = new Dictionary<string, EffectUI>();
  23. private EffectUI _effectUI1;
  24. public override void Dispose()
  25. {
  26. // Clear Effect
  27. foreach (var v in _effectUIDic)
  28. {
  29. EffectUIPool.Recycle(v.Value);
  30. }
  31. _effectUIDic.Clear();
  32. if (_valueBarController != null)
  33. {
  34. _valueBarController.Dispose();
  35. _valueBarController = null;
  36. }
  37. if (_luckyBoxCtrl != null)
  38. {
  39. _luckyBoxCtrl.Dispose();
  40. _luckyBoxCtrl = null;
  41. }
  42. if (_ui != null)
  43. {
  44. _ui.Dispose();
  45. _ui = null;
  46. }
  47. base.Dispose();
  48. }
  49. protected override void OnInit()
  50. {
  51. base.OnInit();
  52. packageName = UI_LuckyBoxActivityUI.PACKAGE_NAME;
  53. _ui = UI_LuckyBoxActivityUI.Create();
  54. this.viewCom = _ui.target;
  55. isfullScreen = true;
  56. isReturnView = true;
  57. _valueBarController = new ValueBarController(_ui.m_valueBar);
  58. _luckyBoxCtrl = new LuckyBoxController(_ui.m_comBox.m_comModel.target);
  59. _ui.m_btnBack.onClick.Add(OnClickBtnBack);
  60. _ui.m_btnReward.target.onClick.Add(OnClickBtnReward);
  61. _ui.m_btnShop.target.onClick.Add(OnClickBtnShop);
  62. _ui.m_btnGiftBag.target.onClick.Add(OnClickBtnGiftBag);
  63. _ui.m_btnLuckyDiscount.target.onClick.Add(OnClickBtnLuckyDiscount);
  64. EffectUIPool.CreateEffectUI(_ui.m_comBox.m_btnBuyTen_eff, "ui_LuckyBox", "Button_public",
  65. onComplete: (effect) =>
  66. {
  67. if (effect != null)
  68. {
  69. _effectUIDic.Add("Button_public", effect);
  70. }
  71. });
  72. EffectUIPool.CreateEffectUI(_ui.m_comBox.m_Special_eff, "ui_LuckyBox", "Button_Text_DianCang",
  73. onComplete: (effect) =>
  74. {
  75. if (effect != null)
  76. {
  77. _effectUIDic.Add("Button_Text_DianCang", effect);
  78. }
  79. });
  80. }
  81. protected override void AddEventListener()
  82. {
  83. base.AddEventListener();
  84. EventAgent.AddEventListener(ConstMessage.ACTIVITY_LUCKY_BOX, UpdateView);
  85. EventAgent.AddEventListener(ConstMessage.RED_CHANGE, UpdateRedDot);
  86. EventAgent.AddEventListener(ConstMessage.SHOP_BUY, UpLuckyDiscount);
  87. EventAgent.AddEventListener(ConstMessage.LUCKY_BOX_BONUS_VIEW_CLOSE, UpLuckyDiscount);
  88. }
  89. protected override void OnShown()
  90. {
  91. base.OnShown();
  92. LimitedTimeGiftBoxDataManager.Instance.UpLtgGbItemData16();
  93. _activityType = (int)this.viewData;
  94. _activityId = ActivityDataManager.Instance.GetCurOpenActiveByType(_activityType);
  95. _activityCfg = CommonDataManager.Tables.TblActivityOpenCfg.GetOrDefault(_activityId);
  96. _luckyBoxCfg = CommonDataManager.Tables.TblLuckyBoxCfg.GetOrDefault(_activityCfg.Params1[0]);
  97. _valueBarController.OnShown();
  98. _valueBarController.UpdateList(new List<int>()
  99. { _luckyBoxCfg.CostID, ConstItemID.DIAMOND_RED, ConstItemID.DIAMOND_PURPLE });
  100. _luckyBoxCtrl.OnShown(_luckyBoxCfg.Id);
  101. LuckyBoxDataManager.Instance.currentBoxId = _luckyBoxCfg.Id;
  102. LuckyBoxDataManager.Instance.luckyBoxIndex = 2;
  103. UpGiftBox();
  104. UpLuckyDiscount();
  105. UpdateTime(null);
  106. Timers.inst.Add(1, 0, UpdateTime);
  107. UpdateListItemData();
  108. ChangeUIByActivity();
  109. UpdateRedDot();
  110. ActivityOpenCfg activityOpenCfg = CommonDataManager.Tables.TblActivityOpenCfg.GetOrDefault(_activityId);
  111. if (activityOpenCfg.Params2.Count > 0)
  112. GetWishingPoolInfo(_activityId);
  113. }
  114. private void UpdateTime(object param = null)
  115. {
  116. long endTime = TimeUtil.DateTimeToTimestamp(_activityCfg.EndTime);
  117. long curTime = TimeHelper.ServerNow();
  118. if (endTime < curTime + 1)
  119. {
  120. PromptController.Instance.ShowFloatTextPrompt("活动已结束");
  121. Timers.inst.Remove(UpdateTime);
  122. ViewManager.DeleteViewStackCountDown(null, 2);
  123. ViewManager.Hide<LuckyBoxWishView>();
  124. OnClickBtnBack();
  125. return;
  126. }
  127. TimeUtil.FormattingTime(curTime, endTime, out int num, out string str);
  128. _ui.m_txtTime.text = "剩余时间:" + TimeUtil.FormattingTimeTo_DDHHmm(endTime - curTime);
  129. //=====限时礼包倒计时
  130. UpGiftBox();
  131. EventAgent.DispatchEvent(ConstMessage.LUCKY_BOX_TIME);
  132. //=====限时礼包倒计时END
  133. }
  134. private void UpdateListItemData()
  135. {
  136. UI_ComBox comBox = UI_ComBox.Proxy(_ui.m_comBox.target);
  137. LuckyBoxDataManager.Instance.InitData(_luckyBoxCfg.Id);
  138. //comBox.m_comModel.m_loaBg.url = ResPathUtil.GetBgImgPath(_luckyBoxCfg.resArr[0]);
  139. comBox.m_btnPreview.m_c1.selectedIndex = 1;
  140. comBox.m_comCostOne.m_txtCost.text = _luckyBoxCfg.CostNum.ToString();
  141. comBox.m_comCostOne.m_loaCost.url =
  142. ResPathUtil.GetIconPath(CommonDataManager.Tables.TblItemCfg.GetOrDefault(_luckyBoxCfg.CostID).Res,
  143. "png");
  144. comBox.m_comCostTen.m_txtCost.text = _luckyBoxCfg.CostNumTen.ToString();
  145. comBox.m_comCostTen.m_loaCost.url =
  146. ResPathUtil.GetIconPath(CommonDataManager.Tables.TblItemCfg.GetOrDefault(_luckyBoxCfg.CostID).Res,
  147. "png");
  148. if (comBox.m_btnBuyOne.data == null)
  149. {
  150. comBox.m_btnBuyOne.onClick.Add(OnClickBtnBuyOne);
  151. }
  152. comBox.m_btnBuyOne.data = _luckyBoxCfg.Id;
  153. if (comBox.m_btnBuyTen.data == null)
  154. {
  155. comBox.m_btnBuyTen.onClick.Add(OnClickBtnBuyTen);
  156. }
  157. comBox.m_btnBuyTen.data = _luckyBoxCfg.Id;
  158. if (comBox.m_btnPreview.target.data == null)
  159. {
  160. comBox.m_btnPreview.target.onClick.Add(OnClickBtnPreview);
  161. comBox.m_btnOpenServer.onClick.Add(OnClickBtnPreview);
  162. }
  163. comBox.m_btnPreview.target.data = _luckyBoxCfg.Id;
  164. comBox.m_btnOpenServer.data = _luckyBoxCfg.Id;
  165. comBox.target.data = _luckyBoxCfg.Id;
  166. UI_ComBox.ProxyEnd();
  167. UpdateView();
  168. }
  169. private void UpdateView()
  170. {
  171. UI_ComBox comBox = UI_ComBox.Proxy(_ui.m_comBox.target);
  172. LuckyBoxDataManager.Instance.GetOwnedCount(_luckyBoxCfg.Id, out int count, out int totalCount);
  173. comBox.m_txtOwned.SetVar("v1", "" + count).FlushVars();
  174. comBox.m_txtOwned.SetVar("v2", "" + totalCount).FlushVars();
  175. comBox.m_txtOpenServerOwned.SetVar("v1", "" + count).FlushVars();
  176. comBox.m_txtOpenServerOwned.SetVar("v2", "" + totalCount).FlushVars();
  177. int boughtCount = GameGlobal.myNumericComponent.GetAsInt(_luckyBoxCfg.NumericType);
  178. comBox.m_txtRemainTimes.text = string.Format("今日剩余次数:{0}", _luckyBoxCfg.MaxCount - boughtCount);
  179. if (_activityType == ConstLimitTimeActivityType.ActLimitLuckyBox)
  180. {
  181. string strDrawCount = ActivityDataManager.Instance.lastDrawCount.ToString();
  182. comBox.m_txtCount.SetVar("value", strDrawCount).FlushVars();
  183. comBox.m_txtCount.SetVar("name", _luckyBoxCfg.Name).FlushVars();
  184. }
  185. else if (_activityType == ConstLimitTimeActivityType.ActLimitStlyc)
  186. {
  187. string strLimitStlycDrawCount =
  188. (ActivityDataManager.Instance.lastStlycDrawCount + _activityCfg.Params1[3]).ToString();
  189. comBox.m_txtOpenServerCount.SetVar("value", strLimitStlycDrawCount).FlushVars();
  190. comBox.m_txtOpenServerCount.SetVar("name", _luckyBoxCfg.Name).FlushVars();
  191. }
  192. UI_ComBox.ProxyEnd();
  193. }
  194. private void UpLuckyDiscount()
  195. {
  196. var activityOpenCfgs = CommonDataManager.Tables.TblActivityOpenCfg.DataList
  197. .Where(a => a.Type == ConstLimitTimeActivityType.LuckyDiscount).ToList();
  198. var shopCfgId = activityOpenCfgs[0].Params1[0];
  199. var shopCfg = CommonDataManager.Tables.TblShopCfg.GetOrDefault(shopCfgId);
  200. var remainBuyNum = shopCfg.MaxBuyNum - ShopDataManager.Instance.GetGoodsBuyNumById(shopCfg.Id);
  201. var activityInfoByTypeList =
  202. ActivityGlobalDataManager.Instance.GetActivityInfoByType(ActivityType.LuckyDiscount);
  203. var list = activityInfoByTypeList
  204. .Where(a => a.EndTime > TimeInfo.Instance.ServerNow()).ToList();
  205. _ui.m_comLuckyDiscount.visible = ActivityDataManager.Instance.allLimitStlycTimes >= 20 &&
  206. remainBuyNum != 0 && list.Count > 0;
  207. if (_effectUI1 == null)
  208. EffectUIPool.CreateEffectUI(_ui.m_btnLuckyDiscount.m_holderEff, "ui_Activity", "Luckyicon",
  209. onComplete: (effect) =>
  210. {
  211. if (effect != null)
  212. {
  213. _effectUI1 = effect;
  214. }
  215. });
  216. if (LuckyBoxDataManager.Instance.OPEN_LUCKY_DISCONT && _ui.m_btnLuckyDiscount.target.visible)
  217. {
  218. LimitedTimeGiftBoxDataManager.Instance.UpLtgGbItemData16();
  219. LuckyBoxDataManager.Instance.OPEN_LUCKY_DISCONT = false;
  220. //ViewManager.Show<RushSaleGiftBoxView>(new object[] { ActivityType.LuckyDiscount, this.viewData });
  221. }
  222. _ui.m_comBox.target.visible = true;
  223. }
  224. private void UpGiftBox()
  225. {
  226. var activityInfoByTypeList =
  227. ActivityGlobalDataManager.Instance.GetActivityInfoByTypeAndID(ActivityType.XSLB3, _activityId);
  228. var list = activityInfoByTypeList.Where(a => a.EndTime > TimeInfo.Instance.ServerNow()).ToList();
  229. if (list.Count == 0)
  230. {
  231. _ui.m_showGiftBag.selectedIndex = 1;
  232. }
  233. else
  234. {
  235. bool isSoldOut = true;
  236. foreach (var activityInfo in list)
  237. {
  238. ActivityOpenCfg activityOpenCfg =
  239. CommonDataManager.Tables.TblActivityOpenCfg.GetOrDefault(activityInfo.ActivityId);
  240. var paramsArr = activityOpenCfg.Params1;
  241. foreach (var shopCfgId in paramsArr)
  242. {
  243. var shopCfg = CommonDataManager.Tables.TblShopCfg.GetOrDefault(shopCfgId);
  244. var remainBuyNum = shopCfg.MaxBuyNum - ShopDataManager.Instance.GetGoodsBuyNumById(shopCfgId);
  245. //只要有一个商品还能购买,就不是售罄
  246. if (remainBuyNum > 0)
  247. {
  248. isSoldOut = false;
  249. break;
  250. }
  251. }
  252. }
  253. if (isSoldOut)
  254. {
  255. _ui.m_showGiftBag.selectedIndex = 1;
  256. }
  257. else
  258. {
  259. _ui.m_comBagTime.m_txtGiftBagTime.text =
  260. TimeUtil.GetTimeLeft(TimeInfo.Instance.ServerNow(), list[0].EndTime);
  261. _ui.m_showGiftBag.selectedIndex = 0;
  262. }
  263. }
  264. var listSaleGift = LimitedTimeGiftBoxDataManager.Instance.LtgGbItemData16;
  265. if (listSaleGift.Count > 0)
  266. {
  267. _ui.m_comDiscountTime.target.visible = true;
  268. _ui.m_comDiscountTime.m_txtGiftBagTime.text =
  269. TimeUtil.GetTimeLeft(TimeInfo.Instance.ServerNow(), listSaleGift[0].EndTime);
  270. }
  271. }
  272. private void OnClickBtnPreview(EventContext context)
  273. {
  274. GObject obj = context.sender as GObject;
  275. int boxId = (int)obj.data;
  276. ViewManager.Show<LuckyBoxPreShowView>(boxId);
  277. }
  278. private void OnClickBtnBuyOne(EventContext context)
  279. {
  280. GetSuitItemController.showSingle = true;
  281. int boughtCount = GameGlobal.myNumericComponent.GetAsInt(_luckyBoxCfg.NumericType);
  282. if (boughtCount + LuckyBoxDataManager.ONCE_TIME > _luckyBoxCfg.MaxCount)
  283. {
  284. PromptController.Instance.ShowFloatTextPrompt("抽奖次数不足");
  285. return;
  286. }
  287. LuckyBoxDataManager.Instance.CheckItemEnough(_luckyBoxCfg.Id, LuckyBoxDataManager.ONCE_TIME, async () =>
  288. {
  289. bool result = await LuckyBoxSProxy.ReqGetBonus(_luckyBoxCfg.Id, LuckyBoxDataManager.ONCE_TIME, false,
  290. _activityId);
  291. if (result)
  292. {
  293. ViewManager.Show<LuckyBoxStarView>();
  294. _ui.m_comBox.target.visible = false;
  295. // LogServerHelper.SendPlayParticipationLog((int)PlayParticipationEnum.ZAI_XING, 2);
  296. GetSuitItemController.showSingle = false;
  297. }
  298. });
  299. }
  300. private void OnClickBtnBuyTen(EventContext context)
  301. {
  302. GetSuitItemController.showSingle = true;
  303. GObject obj = context.sender as GObject;
  304. int boughtCount = GameGlobal.myNumericComponent.GetAsInt(_luckyBoxCfg.NumericType);
  305. if (boughtCount + LuckyBoxDataManager.TEN_TIME > _luckyBoxCfg.MaxCount)
  306. {
  307. PromptController.Instance.ShowFloatTextPrompt("抽奖次数不足");
  308. return;
  309. }
  310. LuckyBoxDataManager.Instance.CheckItemEnough(this._luckyBoxCfg.Id, LuckyBoxDataManager.TEN_TIME, async () =>
  311. {
  312. bool result = await LuckyBoxSProxy.ReqGetBonus(this._luckyBoxCfg.Id, LuckyBoxDataManager.TEN_TIME,
  313. false, _activityId);
  314. if (result)
  315. {
  316. ViewManager.Show<LuckyBoxStarView>();
  317. _ui.m_comBox.target.visible = false;
  318. // LogServerHelper.SendPlayParticipationLog((int)PlayParticipationEnum.ZAI_XING, 2);
  319. GetSuitItemController.showSingle = false;
  320. }
  321. });
  322. }
  323. private void OnClickBtnReward()
  324. {
  325. ViewManager.Show<ActivityThemeLuckyBoxBonusView>(_activityType);
  326. }
  327. private void OnClickBtnShop()
  328. {
  329. ViewManager.Show<StoreView>(new object[]
  330. { ConstStoreTabId.STORE_GIFT_BAG, ConstStoreSubId.STORE_GIFT_BAG_ACTIVITY });
  331. }
  332. //限时礼包按钮点击执行方法
  333. private void OnClickBtnGiftBag()
  334. {
  335. var activityInfoByTypeList =
  336. ActivityGlobalDataManager.Instance.GetActivityInfoByType(ActivityType.XSLB3);
  337. var list = activityInfoByTypeList
  338. .Where(a => a.EndTime > TimeInfo.Instance.ServerNow()).ToList();
  339. if (list.Count == 0)
  340. PromptController.Instance.ShowFloatTextPrompt("活动已结束");
  341. else
  342. ViewManager.Show<RushSaleGiftBoxView>(new object[] { ActivityType.XSLB3, this.viewData });
  343. }
  344. //幸运折扣按钮点击执行方法
  345. private void OnClickBtnLuckyDiscount()
  346. {
  347. ViewManager.Show<RushSaleGiftBoxView>(new object[] { ActivityType.LuckyDiscount, this.viewData });
  348. }
  349. protected override void OnHide()
  350. {
  351. base.OnHide();
  352. EffectUIPool.Recycle(_effectUI1);
  353. _effectUI1 = null;
  354. _valueBarController.OnHide();
  355. _luckyBoxCtrl.OnHide();
  356. Timers.inst.Remove(UpdateTime);
  357. }
  358. protected override void RemoveEventListener()
  359. {
  360. base.RemoveEventListener();
  361. EventAgent.RemoveEventListener(ConstMessage.ACTIVITY_LUCKY_BOX, UpdateView);
  362. EventAgent.RemoveEventListener(ConstMessage.RED_CHANGE, UpdateRedDot);
  363. EventAgent.RemoveEventListener(ConstMessage.SHOP_BUY, UpLuckyDiscount);
  364. EventAgent.RemoveEventListener(ConstMessage.LUCKY_BOX_BONUS_VIEW_CLOSE, UpLuckyDiscount);
  365. }
  366. private void OnClickBtnBack()
  367. {
  368. var activityId = ActivityDataManager.Instance.GetCurOpenActiveByType(_activityType);
  369. if (activityId <= 0)
  370. {
  371. ViewManager.DeleteViewStackCountDown("MainUIView");
  372. PromptController.Instance.ShowFloatTextPrompt("活动已结束");
  373. }
  374. Hide();
  375. }
  376. private void UpdateRedDot()
  377. {
  378. RedDotController.Instance.SetComRedDot(_ui.m_btnReward.target,
  379. RedDotDataManager.Instance.GetActLuckyBoxRewardRed(_activityType), "", -18, 11);
  380. RedDotController.Instance.SetComRedDot(_ui.m_btnShop.target,
  381. RedDotDataManager.Instance.GetGiftBagRewardRed(), "", -18, 11);
  382. RedDotController.Instance.SetComRedDot(_ui.m_btnGiftBag.target,
  383. RedDotDataManager.Instance.GetMeiRiTeHuiRed(), "", -18, 11);
  384. }
  385. protected override void UpdateToCheckGuide(object param)
  386. {
  387. if (!ViewManager.CheckIsTopView(this.viewCom)) return;
  388. }
  389. protected override void TryCompleteGuide()
  390. {
  391. base.TryCompleteGuide();
  392. }
  393. private async void GetWishingPoolInfo(int activityId)
  394. {
  395. bool result = await LuckyBoxSProxy.ReqGetWishingPoolInfo();
  396. if (result)
  397. {
  398. int index = LuckyBoxDataManager.Instance.KsActivityId.IndexOf(activityId);
  399. if (index < 0 || !LuckyBoxDataManager.Instance.VsStatus[index])
  400. ViewManager.Show<LuckyBoxWishView>(_activityType);
  401. }
  402. }
  403. /// 修改活动的专属UI
  404. /// </summary>
  405. private void ChangeUIByActivity()
  406. {
  407. _ui.m_comBox.m_c1.SetSelectedPage(_activityId.ToString());
  408. }
  409. }
  410. }