//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Monday, December 10, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.UI; namespace vnxbqy.UI { public class GatherSoulXBWin : Window { [SerializeField] Text txtGuaranteCount; //保底次数 [SerializeField] Text itemCountText; [SerializeField] ButtonEx btnOneGo; [SerializeField] ButtonEx btnManyGo; [SerializeField] Toggle btnSkip; [SerializeField] UIEffect uiEffect; [SerializeField] TextEx todayMaxText; HappyXBModel XBModel { get { return ModelCenter.Instance.GetModel(); } } PackModel playerPack { get { return ModelCenter.Instance.GetModel(); } } StoreModel storeModel { get { return ModelCenter.Instance.GetModel(); } } GatheringSoulModel model { get { return ModelCenter.Instance.GetModel(); } } int type = GatheringSoulModel.xbType; private Clock animationTimeoutClock; #region Built-in protected override void BindController() { } protected override void AddListeners() { btnSkip.AddListener(onToggleChange); btnOneGo.SetListener(OnOneXunbao); btnManyGo.SetListener(OnManeyXunbap); } protected override void OnPreOpen() { model.isOpenXBWin = true; btnSkip.isOn = XBModel.isJumpGatherSoulXB; XBModel.RefreshXBResultAct += RefreshXBResult; XBModel.RefreshXBTypeInfoAct += RefreshXBTypeInfo; uiEffect.OnComplete += OnCompleted; playerPack.refreshItemCountEvent += PlayerPack_refreshItemCountEvent; TreasurePavilionModel.Instance.isEffectPlaying = false; XBModel.title = HappXBTitle.GatherSoul; Display(); } protected override void OnAfterOpen() { } protected override void OnPreClose() { model.isOpenXBWin = false; XBModel.RefreshXBResultAct -= RefreshXBResult; XBModel.RefreshXBTypeInfoAct -= RefreshXBTypeInfo; uiEffect.OnComplete -= OnCompleted; playerPack.refreshItemCountEvent -= PlayerPack_refreshItemCountEvent; } protected override void OnAfterClose() { } #endregion // 取消定时器(如果有) void StopClock() { if (animationTimeoutClock != null) { Clock.Stop(animationTimeoutClock); animationTimeoutClock = null; } } void onToggleChange(bool isOn) { XBModel.isJumpGatherSoulXB = isOn; } public void Display() { XBTypeInfo typeInfo = XBModel.GetXBInfoByType(type); if (typeInfo == null) { typeInfo = new XBTypeInfo() { xbType = type, luckValue = 0, freeCountToday = 0, treasureCount = 0, }; } int toolCnt = playerPack.GetItemCountByID(PackType.Item, GatheringSoulModel.xbItemID); itemCountText.text = toolCnt.ToString(); int luckValue = typeInfo.luckValue; var config = TreasureSetConfig.Get(type); int fullLuck = config.FullLucky; int onceLucky = config.OnceLucky; int guaranteCount = (fullLuck - luckValue) / onceLucky; txtGuaranteCount.text = Language.Get("GatherSoulXB_1", guaranteCount); todayMaxText.text = Language.Get("TreasureCntTodayMax", config.DailyMaxCount); } private void RefreshXBResult() { if (XBModel.isJumpGatherSoulXB) { TreasurePavilionModel.Instance.isEffectPlaying = false; WindowCenter.Instance.Open(); } else { uiEffect.Play(); animationTimeoutClock = Clock.AlarmAfter(4f, () => { uiEffect.Stop(); OnCompleted(); }); } } private void RefreshXBTypeInfo() { Display(); } public void OnCompleted() { StopClock(); TreasurePavilionModel.Instance.isEffectPlaying = false; WindowCenter.Instance.Open(); } void OnOneXunbao() { if (TreasurePavilionModel.Instance.isEffectPlaying) return; var config = TreasureSetConfig.Get(type); if (XBModel.GetXBInfoByType(type).treasureCountToday + config.TreasureCountList[0] > config.DailyMaxCount) { SysNotifyMgr.Instance.ShowTip("XBTodayMax"); return; } var funcSet = XBModel.GetXBFuncSet(type); if (XBModel.IsHaveOneXBTool(type)) { TreasurePavilionModel.Instance.isEffectPlaying = true; XBModel.SendXBQuest(type, 0, 2); } else { int moneyType = XBModel.XBCostTypeDict[type]; int xbOneMoney = TreasureSetConfig.Get(type).CostMoneyList[0]; if (UIHelper.GetMoneyCnt(moneyType) >= (ulong) xbOneMoney) { storeModel.UseMoneyCheck(xbOneMoney, () => { TreasurePavilionModel.Instance.isEffectPlaying = true; XBModel.SendXBQuest(type, 0, 0); }, 3); } else { SysNotifyMgr.Instance.ShowTip("LackMoney", moneyType); } } } void OnManeyXunbap() { if (TreasurePavilionModel.Instance.isEffectPlaying) return; var config = TreasureSetConfig.Get(type); if (XBModel.GetXBInfoByType(type).treasureCountToday + config.TreasureCountList[1] > config.DailyMaxCount) { SysNotifyMgr.Instance.ShowTip("XBTodayMax"); return; } int toolCnt = 0; int needToolCnt = 0; int needMoney = 0; if (XBModel.IsHaveManyXBToolEx(type, out toolCnt, out needToolCnt, out needMoney)) { if (toolCnt >= needToolCnt) { TreasurePavilionModel.Instance.isEffectPlaying = true; XBModel.SendXBQuest(type, 1, 2); return; } } int moneyType = XBModel.XBCostTypeDict[type]; XBFuncSet funcSet = XBModel.GetXBFuncSet(type); int xbManyMoney = needMoney == 0 ? funcSet.xbPrices[1] : needMoney; if (UIHelper.GetMoneyCnt(moneyType) >= (ulong)xbManyMoney) { storeModel.UseMoneyCheck(xbManyMoney, () => { TreasurePavilionModel.Instance.isEffectPlaying = true; XBModel.SendXBQuest(type, 1, toolCnt > 0 ? 2 : 0); }, 3, fullTip: Language.Get("TreasurePavilion08", xbManyMoney, moneyType, funcSet.costToolIds[1], needToolCnt - toolCnt)); } else { SysNotifyMgr.Instance.ShowTip("LackMoney", moneyType); } } private void PlayerPack_refreshItemCountEvent(PackType type, int arg2, int itemID) { if (type == PackType.Item && itemID == GatheringSoulModel.xbItemID) { int toolCnt = playerPack.GetItemCountByID(PackType.Item, GatheringSoulModel.xbItemID); itemCountText.text = toolCnt.ToString(); } } } }