//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Monday, June 03, 2019 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace vnxbqy.UI { public class AlchemyBatchWin : Window { [SerializeField] ItemCell m_Item; [SerializeField] Text m_ItemName; [SerializeField] Slider m_Slider; [SerializeField] Text m_Number; [SerializeField] Text m_Time; [SerializeField] Text m_Remind; [SerializeField] Button m_Add; [SerializeField] Button m_Reduce; [SerializeField] Button m_Alchemy; [SerializeField] Button m_Close; public static int alchemyId = 0; PackModel playerPack { get { return ModelCenter.Instance.GetModel(); } } AlchemyModel model { get { return ModelCenter.Instance.GetModel(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_Slider.SetListener((float value) => { OnValueChange(); }); m_Add.SetListener(OnAdd); m_Reduce.SetListener(OnReduce); m_Alchemy.SetListener(TryAlchemy); m_Close.SetListener(CloseClick); } protected override void OnPreOpen() { Display(); } protected override void OnAfterOpen() { } protected override void OnPreClose() { } protected override void OnAfterClose() { } #endregion void Display() { var config = AlchemyConfig.Get(alchemyId); var itemId = config.AlchemItemID; var itemConfig = ItemConfig.Get(itemId); var itemData = new ItemCellModel(itemId, true, 1); m_Item.Init(itemData); m_ItemName.text = itemConfig.ItemName; m_ItemName.color = UIHelper.GetUIColor(itemConfig.ItemColor, true); var canAlchemyCount = model.GetCanAlchemyCount(alchemyId); int maxValue = Mathf.Min(model.maxBatchAlchemyCount, canAlchemyCount); var recommandCount = maxValue; AlchemyDrugUseLimit drugUseLimit; var itemCount = playerPack.GetItemCountByID(PackType.Item, itemId); if (model.TryGetAlchemyUseLimit(itemId, out drugUseLimit)) { var canEatCount = drugUseLimit.GetUseLimit() - drugUseLimit.eatTimes - itemCount; recommandCount = Mathf.Max(1, Mathf.Min(maxValue, canEatCount)); m_Remind.SetActive(true); m_Remind.text = Language.Get("AlchemyBatchRecommand", canEatCount); } else { m_Remind.SetActive(false); } m_Slider.minValue = maxValue == 1 ? 0 : 1; m_Slider.maxValue = maxValue; m_Slider.value = recommandCount; m_Slider.interactable = maxValue > 1; m_Number.text = recommandCount.ToString(); DisplayTime(); } void DisplayTime() { var config = AlchemyConfig.Get(alchemyId); var seconds = config.NeedTime * Mathf.FloorToInt(m_Slider.value); m_Time.text = TimeUtility.SecondsToDHMSCHS(seconds); } private void OnAdd() { if (m_Slider.value < m_Slider.maxValue) { m_Slider.value++; } } private void OnReduce() { if (m_Slider.value > m_Slider.minValue && m_Slider.minValue != 0) { m_Slider.value--; } } private void OnValueChange() { m_Number.text = Mathf.FloorToInt(m_Slider.value).ToString(); DisplayTime(); } private void TryAlchemy() { if (model.selectAlchemyType == AlchemyType.Normal) { AlchemyDrugUseLimit drugUseLimit; var itemId = AlchemyConfig.Get(alchemyId).AlchemItemID; var itemCount = playerPack.GetItemCountByID(PackType.Item, itemId); if (model.TryGetAlchemyUseLimit(itemId, out drugUseLimit)) { var canEatCount = drugUseLimit.GetUseLimit() - drugUseLimit.eatTimes - itemCount; if (Mathf.FloorToInt(m_Slider.value) > canEatCount) { string title = Language.Get("L1003"); string info = Language.Get("MaximumMumberOfPills"); ConfirmCancel.ShowPopConfirm(title, info, (bool isOk) => { if (isOk) { Alchemy(); } }); return; } } Alchemy(); } else { Alchemy(); } } private void Alchemy() { var pak = new CA576_tagCMPlayerRefine(); pak.AlchemyID = (uint)model.selectAlchemy; pak.AlchemyTimes = (ushort)Mathf.FloorToInt(m_Slider.value); pak.DoType = 1; GameNetSystem.Instance.SendInfo(pak); CloseImmediately(); } } }