using BrewMonster.Network; using BrewMonster.Scripts; using BrewMonster.Scripts.Managers; using System; using TMPro; using UnityEngine; using UnityEngine.UI; namespace BrewMonster.UI { /// /// Numeric input dialog (C++ CDlgInputNO / DlgInputNO). Dialog id: DlgQuantity. /// public class DlgQuantity : AUIDialog { public enum QuantityMode { None = 0, /// Gửi tiền vào kho — C++ INPUTNO_STORAGE_IVTR_MONEY (Win_Inventory choosemoney + storage open). StorageDepositMoney, /// Rút tiền ra — C++ INPUTNO_STORAGE_TRASH_MONEY (Win_Storage choosemoney). StorageWithdrawMoney, /// Gửi tiền vào kho tài khoản — same C2S as storage, with is_accountbox=1. AccountStorageDepositMoney, /// Rút tiền ra từ kho tài khoản — same C2S as storage, with is_accountbox=1. AccountStorageWithdrawMoney, } [Header("Amount")] [SerializeField] private TMP_InputField amountInput; [SerializeField] private Text amountTextLegacy; [Header("Buttons (C++: confirm / IDCANCEL / add / minus / max)")] [SerializeField] private Button confirmButton; [SerializeField] private Button cancelButton; [SerializeField] private Button addButton; [SerializeField] private Button minusButton; [SerializeField] private Button maxButton; private QuantityMode _mode = QuantityMode.None; private int _min = 1; private int _max = 1; private int _current = 1; private Action _onConfirmed; public static DlgQuantity GetDialog() { return EC_Game.GetGameRun()?.GetUIManager()?.GetInGameUIMan()?.GetDialog("DlgQuantity") as DlgQuantity; } /// Open quantity panel; on confirm invokes callback then sends C2S when mode is storage money. public static void Show(QuantityMode mode, int maxAmount, int defaultAmount = 1, Action onConfirmed = null) { var dlg = GetDialog(); if (dlg == null) { Debug.LogError("[DlgQuantity] Dialog 'DlgQuantity' not found. Add prefab to DialogScriptTableObject (id DlgQuantity)."); return; } CECUIManager.Instance?.ShowDialogOverlay("DlgQuantity"); dlg.Open(mode, maxAmount, defaultAmount, onConfirmed); } public override void Awake() { base.Awake(); ResolveControls(); WireButtons(); } void ResolveControls() { if (amountInput == null) { amountInput = GetComponentInChildren(true); if (amountInput != null && amountInput.name.Contains("DEFAULT", StringComparison.OrdinalIgnoreCase) == false) { var all = GetComponentsInChildren(true); for (int i = 0; i < all.Length; i++) { if (all[i] != null && all[i].name.IndexOf("Txt_No", StringComparison.OrdinalIgnoreCase) >= 0) { amountInput = all[i]; break; } } } } ResolveButton(ref confirmButton, "confirm", "btn_confirm", "ok"); ResolveButton(ref cancelButton, "cancel", "idcanel", "btn_cancel", "close"); ResolveButton(ref addButton, "add", "btn_add", "incre", "plus"); ResolveButton(ref minusButton, "minus", "btn_minus", "reduce", "decre"); ResolveButton(ref maxButton, "max", "btn_max"); } void ResolveButton(ref Button field, params string[] nameHints) { if (field != null) return; var buttons = GetComponentsInChildren