using System; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { [XLua.Hotfix] public class LuckyTreasureWin : Window { [SerializeField] ScrollerController awardsCtrl; [SerializeField] ScrollerController resultCtrl; [SerializeField] Text remainMoneyText; [SerializeField] Text operationTimeText; [SerializeField] CommonItemBaisc luckAward_Item; [SerializeField] Button freeTreasureBtn; [SerializeField] Button goldTreasureBtn; [SerializeField] Button autoTreasureBtn; [SerializeField] Button addMoneyBtn; [SerializeField] Text goldTreasurePriceText; [SerializeField] Slider luckValueSlider; [SerializeField] Text luckValueText; [SerializeField] Text ruleText; [SerializeField] UIEffect effect; [Header("滑动时间"), SerializeField] float sliderTime = 0.1f; [Header("滑动速度"), SerializeField] float sliderSpeed = 0.1f; OperationLuckyTreasure operation = null; LuckyTreasureModel luckyTreasureModel { get { return ModelCenter.Instance.GetModel(); } } ItemTipsModel tipsModel { get { return ModelCenter.Instance.GetModel(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { freeTreasureBtn.AddListener(ClickFreeTreasure); goldTreasureBtn.AddListener(ClickGoldTreasure); autoTreasureBtn.AddListener(ClickAutoTreasure); addMoneyBtn.AddListener(ClickAddMoney); } protected override void OnPreOpen() { GlobalTimeEvent.Instance.secondEvent += UpdateSecond; PlayerDatas.Instance.PlayerDataRefreshInfoEvent += UpdatePlayerData; luckyTreasureModel.UpdateMessageEvent += UpdateMessageInfo; luckyTreasureModel.UpdateLuckyResultEvent += UpdateLuckyResult; luckyTreasureModel.UpdateLoginLuckyTreasureRedPoint(false); SetDisplay(); } protected override void OnAfterOpen() { } protected override void LateUpdate() { base.LateUpdate(); } protected override void OnPreClose() { GlobalTimeEvent.Instance.secondEvent -= UpdateSecond; luckyTreasureModel.UpdateLuckyResultEvent -= UpdateLuckyResult; luckyTreasureModel.UpdateMessageEvent -= UpdateMessageInfo; PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= UpdatePlayerData; } protected override void OnAfterClose() { } #endregion private void SetDisplay() { operation = luckyTreasureModel.GetOperation(); if (operation == null) return; UpdateRemainMoney(); UpdateMessageInfo(); UpdateAwards(); UpdateLuckyTreasureState(); UpdateSecond(); goldTreasurePriceText.text = luckyTreasureModel.luckyTreasurePrice.ToString(); ruleText.text = Language.Get("LuckyTreasure101",luckyTreasureModel.luckyTreasurePoint); luckValueSlider.minValue = 0; luckValueSlider.maxValue = 600; UpdateLuckValue(); luckValueSlider.value = luckyTreasureModel.curLuckValue; OperationLuckyTreasure.LuckyTreasureItem luckyItem = null; if(operation.TryGetLuckBigAward(out luckyItem)) { var itemConfig = ItemConfig.Get(luckyItem.itemId); if(itemConfig.ItemColor <= 4) { effect.effect = 1177; } else { effect.effect = 1178; } ItemCellModel itemCellModel = new ItemCellModel(luckyItem.itemId); luckAward_Item.Init(itemCellModel); luckAward_Item.cellBtn.RemoveAllListeners(); luckAward_Item.cellBtn.AddListener(() => { ItemAttrData attrData = new ItemAttrData(luckyItem.itemId); tipsModel.SetItemTipsModel(attrData); }); } } private void UpdateSecond() { operationTimeText.text = Language.Get("BossFHLanguage2", operation.ToDisplayTime()); } private void UpdateLuckyResult() { UpdateLuckValue(); UpdateLuckyTreasureState(); } private void UpdateAwards() { var luckyItems = operation.luckTreasureItems; if(luckyItems != null && luckyItems.Count > 0) { awardsCtrl.Refresh(); int length = luckyItems.Count - 1; int line = length / 2; if (length % 2 > 0) { line += 1; } for (int i = 0; i < line; i++) { awardsCtrl.AddCell(ScrollerDataType.Header, i); } awardsCtrl.Restart(); } } private void UpdateMessageInfo() { var results = luckyTreasureModel.resultInfolist; resultCtrl.Refresh(); for(int i = 0; i < results.Count; i++) { resultCtrl.AddCell(ScrollerDataType.Header,i); } resultCtrl.Restart(); } private void UpdateLuckValue() { luckValueText.text = StringUtility.Contact(luckyTreasureModel.curLuckValue, "/", operation.sumLuckPoint); luckValueSlider.value = luckyTreasureModel.curLuckValue; } private void UpdatePlayerData(PlayerDataRefresh type) { switch(type) { case PlayerDataRefresh.Gold: UpdateRemainMoney(); break; } } private void UpdateRemainMoney() { ulong moneyNum = UIHelper.GetMoneyCnt(1); remainMoneyText.text = moneyNum.ToString(); } private void UpdateLuckyTreasureState() { goldTreasureBtn.gameObject.SetActive(!luckyTreasureModel.isFree); freeTreasureBtn.gameObject.SetActive(luckyTreasureModel.isFree); } private void ClickAutoTreasure() { WindowCenter.Instance.Open(); } private void ClickAddMoney() { WindowCenter.Instance.Open(); } private void ClickGoldTreasure() { luckyTreasureModel.SendStartLuckyTreasure(); } private void ClickFreeTreasure() { luckyTreasureModel.SendStartLuckyTreasure(); } } }