//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Tuesday, December 05, 2017 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using Snxxz.UI; namespace Snxxz.UI { public class BetterItemGetBehaviour : MonoBehaviour, IInGamePush { [SerializeField] RectTransform m_ContainerBetterEquip; [SerializeField] ItemCell m_EquipBehaviour; [SerializeField] Text m_EquipName; [SerializeField] Button m_Close; [SerializeField] Text m_FunctionTitle; [SerializeField] GameObject coolObj; [SerializeField] Text coolTimeText; [SerializeField] Button m_Puton; [SerializeField] Button m_BetterEquipDetail; Clock clock; PackModel playerPack { get { return ModelCenter.Instance.GetModel(); } } BetterEquipGetModel model { get { return ModelCenter.Instance.GetModel(); } } EquipModel equipModel { get { return ModelCenter.Instance.GetModel(); } } private void OnEnable() { m_Close.AddListener(CloseBetterEquip); m_Puton.AddListener(PutOnBetterEquip); m_BetterEquipDetail.AddListener(ShowBetterEquipDetails); KnapsackTimeCDMgr.Instance.RefresCoolTimeAct += UpdateCoolTime; } private void OnDisable() { if (clock != null) { Clock.Stop(clock); clock = null; } m_Close.RemoveAllListeners(); m_Puton.RemoveAllListeners(); m_BetterEquipDetail.RemoveAllListeners(); KnapsackTimeCDMgr.Instance.RefresCoolTimeAct -= UpdateCoolTime; } private void UpdateCoolTime(string guid) { if (!string.IsNullOrEmpty(model.currentEquipGuid)) { ItemModel betterEquip; if (model.TryGetBetterEquip(model.currentEquipGuid, out betterEquip)) { var coolData = KnapsackTimeCDMgr.Instance.GetItemCoolById(model.currentEquipGuid); bool isCoolEnd = !model.CheckIsAutoEquip(betterEquip) || coolData == null || coolData.GetRemainTime() <= 0 ? true : false; coolObj.SetActive(!isCoolEnd); m_FunctionTitle.gameObject.SetActive(isCoolEnd); if (!isCoolEnd) { int remainTime = (int)coolData.GetRemainTime(); coolTimeText.text = StringUtility.Contact("(", remainTime, ")"); } } } } public void ShowBetterEquip() { m_ContainerBetterEquip.gameObject.SetActive(false); if (!string.IsNullOrEmpty(model.currentEquipGuid)) { ItemModel betterEquip; if (model.TryGetBetterEquip(model.currentEquipGuid, out betterEquip)) { DrawBetterEquip(betterEquip); m_ContainerBetterEquip.gameObject.SetActive(true); var delayTime = ClientDropItemUtility.Instance.GetFakeDropItemShowDelay(betterEquip.itemId); if (delayTime > 0f) { if (clock != null) { Clock.Stop(clock); clock = null; } m_ContainerBetterEquip.localScale = Vector3.zero; clock = Clock.AlarmAfter(delayTime, () => { m_ContainerBetterEquip.localScale = Vector3.one; var coolData = KnapsackTimeCDMgr.Instance.GetItemCoolById(model.currentEquipGuid); if (model.CheckIsAutoEquip(betterEquip) && coolData == null) { KnapsackTimeCDMgr.Instance.Register(betterEquip.guid, betterEquip.itemId, model.autoEquipCoolTime); } }); } else { var coolData = KnapsackTimeCDMgr.Instance.GetItemCoolById(model.currentEquipGuid); if (model.CheckIsAutoEquip(betterEquip) && coolData == null) { KnapsackTimeCDMgr.Instance.Register(betterEquip.guid, betterEquip.itemId, model.autoEquipCoolTime); } } } } } private void PutOnBetterEquip() { ItemModel betterEquip; if (model.TryGetBetterEquip(model.currentEquipGuid, out betterEquip)) { switch (betterEquip.packType) { case PackType.Item: ToOpenRoleKanpsack(betterEquip); break; } } } private void ToOpenRoleKanpsack(ItemModel betterEquip) { var itemConfig = ItemConfig.Get(betterEquip.itemId); if (NewBieCenter.Instance.inGuiding) { playerPack.SetLookIndex(betterEquip.guid); WindowCenter.Instance.Close(); equipModel.SelectSet(betterEquip.config.LV); WindowCenter.Instance.Open(); StartCoroutine(Co_OpenRealmEquipDelay(model.currentEquipGuid)); } else { if ((PlayerDatas.Instance.baseData.LV < GeneralDefine.BlueEquipJumpLevel && itemConfig.ItemColor >= 2) || itemConfig.ItemColor >= 3) { playerPack.SetLookIndex(betterEquip.guid); WindowCenter.Instance.Close(); equipModel.SelectSet(betterEquip.config.LV); WindowCenter.Instance.Open(); StartCoroutine(Co_OpenRealmEquipDelay(model.currentEquipGuid)); } else { ItemOperateUtility.Instance.PutOnItem(model.currentEquipGuid); model.ReportConfirmBetterEquip(model.currentEquipGuid); } } } private void ShowBetterEquipDetails() { ItemModel betterEquip; if (model.TryGetBetterEquip(model.currentEquipGuid, out betterEquip)) { ItemTipUtility.Show(betterEquip.guid, false); } } private void CloseBetterEquip() { model.ReportConfirmBetterEquip(model.currentEquipGuid); } private void DrawBetterEquip(ItemModel betterModel) { var itemConfig = ItemConfig.Get(betterModel.itemId); m_EquipName.text = itemConfig.ItemName; m_EquipName.color = UIHelper.GetUIColor(itemConfig.ItemColor, true); var isView = (PlayerDatas.Instance.baseData.LV < GeneralDefine.BlueEquipJumpLevel && itemConfig.ItemColor >= 2) || itemConfig.ItemColor >= 3; m_FunctionTitle.text = Language.Get(isView ? "GoodEquip_See" : "GoodEquip_FitUp"); m_EquipBehaviour.button.SetListener(() => { ItemTipUtility.Show(betterModel.guid, false); }); m_EquipBehaviour.Init(betterModel, true); UpdateCoolTime(betterModel.guid); } IEnumerator Co_OpenRealmEquipDelay(string _guid) { yield return null; yield return null; yield return WaitingForSecondConst.WaitMS300; ItemTipUtility.Show(_guid); model.ReportConfirmBetterEquip(model.currentEquipGuid); } public int GetSiblingIndex() { return transform.GetSiblingIndex(); } public bool IsActive() { return transform.gameObject.activeSelf &&m_ContainerBetterEquip.gameObject.activeSelf; } } }