//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Wednesday, January 24, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace vnxbqy.UI { public class DogzActiveWin : Window { [SerializeField] ScrollerController m_Controller; [SerializeField] List m_DogzSkills; [SerializeField] List m_DogzEquips; [SerializeField] List m_DogzUnEquipBtns; [SerializeField] List m_PropertyTypes; [SerializeField] List m_PropertyValues; [SerializeField] List sliderImglist = new List(); [SerializeField] Image m_DogzHeadIcon; [SerializeField] Text m_DogzAssistCnt; [SerializeField] Button m_AddAssistBtn; [SerializeField] Button m_TakeOffEquipBtn; [SerializeField] Button m_EquipPackBtn; [SerializeField] Button m_CallBackBtn; [SerializeField] RedpointBehaviour assistBtnRedBehav; [SerializeField] Text m_CallBackBtnTxt; [SerializeField] UIEffect alreadyAssistEffect; [SerializeField] UIEffect assistEffect; [SerializeField] UIEffect assistTextEffect; DogzModel m_Model; DogzModel model { get { return m_Model ?? (m_Model = ModelCenter.Instance.GetModel()); } } PackModel playerPack { get { return ModelCenter.Instance.GetModel(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_AddAssistBtn.onClick.AddListener(AddAssist); m_TakeOffEquipBtn.onClick.AddListener(TakeOffEquip); m_EquipPackBtn.onClick.AddListener(OpenEquipPack); m_CallBackBtn.onClick.AddListener(CallBackDogz); for (int i = 0; i < m_DogzUnEquipBtns.Count; i++) { var _index = i; m_DogzUnEquipBtns[i].DogzUnEquipBtn.AddListener(() => { OpenDogzEquip(_index); }); } } protected override void OnPreOpen() { GenerateDogz(); UpdateSelectDogzEvent(); UpdateDogzAssistCnt(); model.UpdateSelectDogzEvent += UpdateSelectDogzEvent; model.UpdateAssistDogzEvent += UpdateDogzAssistCnt; model.RefreshDogzEquipAct += RefreshDogzEquipEvent; } protected override void OnAfterOpen() { } protected override void OnPreClose() { model.UpdateSelectDogzEvent -= UpdateSelectDogzEvent; model.UpdateAssistDogzEvent -= UpdateDogzAssistCnt; model.RefreshDogzEquipAct -= RefreshDogzEquipEvent; } protected override void OnAfterClose() { } #endregion void GenerateDogz() { if (m_Controller.GetNumberOfCells(m_Controller.m_Scorller) == 0) { var _dogzCfgs = DogzConfig.GetValues(); m_Controller.Refresh(); for (int i = 0; i < _dogzCfgs.Count; i++) { m_Controller.AddCell(ScrollerDataType.Header, _dogzCfgs[i].ID); } m_Controller.Restart(); } int jumpIndex = model.presentSelectDogz - 2 > 0 ? model.presentSelectDogz - 2 : 0; m_Controller.JumpIndex(jumpIndex); } private void SetDefalutDogzEquipState() { for (int i = 0; i < sliderImglist.Count; i++) { ItemModel itemModel = null; bool isPut = model.TryGetDogzEquip(model.presentSelectDogz, model.GetDogzEquipPlaceByIndex(i), out itemModel); if (!isPut) { sliderImglist[i].fillAmount = 0; sliderImglist[i].SetActive(false); } else { sliderImglist[i].fillAmount = 1; sliderImglist[i].SetActive(true); } } } private void UpdateSelectDogzEvent() { m_Controller.m_Scorller.RefreshActiveCellViews(); UpdateDogzSkill(); UpdateDogzEquip(); UpdateDogzProperty(); UpdateDogzBtn(); SetDefalutDogzEquipState(); assistBtnRedBehav.redpointId = model.GetDogzAssistRedpointById(model.presentSelectDogz).id; } private void UpdateDogzSkill() { var _dogzCfg = DogzConfig.Get(model.presentSelectDogz); if (_dogzCfg != null) { for (int i = 0; i < m_DogzSkills.Count; i++) { if (_dogzCfg.HelpBattleSkills == null || _dogzCfg.HelpBattleSkills.Length == 0 || i >= _dogzCfg.HelpBattleSkills.Length) { m_DogzSkills[i].SetEnable(false); } else { m_DogzSkills[i].SetEnable(true); var _skillCfg = SkillConfig.Get(_dogzCfg.HelpBattleSkills[i]); m_DogzSkills[i].Icon.SetSprite(_skillCfg.IconName); m_DogzSkills[i].Lv.text = Language.Get("Z1024", _skillCfg.SkillLV); m_DogzSkills[i].SkillBtn.RemoveAllListeners(); m_DogzSkills[i].SkillBtn.AddListener(()=> { int fightPower = 0; if (_skillCfg.FightPower > 0) { fightPower = _skillCfg.FightPower; } SkillDetails.ShowSkillDetails(_skillCfg.SkillID, SkillDetails.SkillSourceType.DogzSkill, fightPower); }); } } } } private void RefreshDogzEquipEvent(int dogzId) { if (dogzId != model.presentSelectDogz) return; m_Controller.m_Scorller.RefreshActiveCellViews(); UpdateDogzEquip(); UpdateDogzProperty(); UpdateDogzBtn(); SetDefalutDogzEquipState(); } private void UpdateDogzEquip() { var _dogzCfg = DogzConfig.Get(model.presentSelectDogz); m_DogzHeadIcon.SetSprite(_dogzCfg.HeadIcon); m_DogzHeadIcon.SetNativeSize(); var _dogzEquips = model.GetDogzEquips(model.presentSelectDogz); alreadyAssistEffect.Stop(); if (_dogzEquips != null && _dogzEquips.Count == 5) { m_DogzHeadIcon.material = MaterialUtility.GetUIDefaultGraphicMaterial(); if(model.TryGetAssistDogzState(model.presentSelectDogz)) { if(!alreadyAssistEffect.IsPlaying) { alreadyAssistEffect.Play(); } } } else { m_DogzHeadIcon.material = MaterialUtility.GetDefaultSpriteGrayMaterial(); } for (int i = 0; i < m_DogzEquips.Count; i++) { ItemModel _data; bool _equiped = model.TryGetDogzEquip(model.presentSelectDogz, i+101, out _data); m_DogzUnEquipBtns[i].DogzUnEquipBtn.SetActive(!_equiped); m_DogzUnEquipBtns[i].RedpointBeh.redpointId = model.GetDogzEquipPlaceRedpointById(model.presentSelectDogz,i).id; m_DogzEquips[i].SetActive(_equiped); if (_equiped) { m_DogzEquips[i].Display(_data); } } } private void UpdateDogzProperty() { var _dogzCfg = DogzConfig.Get(model.presentSelectDogz); bool isAddAttr = model.GetDogzEquips(model.presentSelectDogz) != null && model.GetDogzEquips(model.presentSelectDogz).Count == 5 ? true : false; if(isAddAttr) { model.GetDogzEquipAddAttr(model.presentSelectDogz); } for (int i = 0; i < m_PropertyTypes.Count; i++) { m_PropertyTypes[i].SetActive(i < _dogzCfg.BaseAttrTypes.Length); m_PropertyValues[i].SetActive(i < _dogzCfg.BaseAttrTypes.Length); string addAttrStr = ""; string baseAttrStr = ""; if (i < _dogzCfg.BaseAttrTypes.Length) { var _propertyCfg = PlayerPropertyConfig.Get(_dogzCfg.BaseAttrTypes[i]); m_PropertyTypes[i].text = _propertyCfg.Name; int attrValue = _dogzCfg.BaseAttrValues[i]; if (isAddAttr && model.m_DogzEquipAttrDict[_propertyCfg.ID] > 0) { baseAttrStr = StringUtility.Contact(UIHelper.ReplacePercentage(_dogzCfg.BaseAttrValues[i], _propertyCfg.ISPercentage) , _propertyCfg.ISPercentage == 1 ? "%" : string.Empty); addAttrStr = StringUtility.Contact("+", UIHelper.ReplacePercentage(model.m_DogzEquipAttrDict[_propertyCfg.ID], _propertyCfg.ISPercentage) , _propertyCfg.ISPercentage == 1 ? "%" : string.Empty); } else { baseAttrStr = StringUtility.Contact(UIHelper.ReplacePercentage(_dogzCfg.BaseAttrValues[i], _propertyCfg.ISPercentage) , _propertyCfg.ISPercentage == 1 ? "%" : string.Empty); } } if(model.TryGetAssistDogzState(model.presentSelectDogz)) { m_PropertyTypes[i].color = UIHelper.s_NavyBrown; if(addAttrStr != "") { m_PropertyValues[i].text = StringUtility.Contact("", baseAttrStr, "", "", addAttrStr, ""); } else { m_PropertyValues[i].text = StringUtility.Contact("", baseAttrStr, ""); } } else { m_PropertyTypes[i].color = UIHelper.s_BrightWhiteColor; if (addAttrStr != "") { m_PropertyValues[i].text = StringUtility.Contact("", baseAttrStr, "", "", addAttrStr, ""); } else { m_PropertyValues[i].text = StringUtility.Contact("", baseAttrStr, ""); } } } } private void UpdateDogzAssistCnt() { m_Controller.m_Scorller.RefreshActiveCellViews(); m_DogzAssistCnt.text = Language.Get("TreasurePrivilege_Dogz_1", StringUtility.Contact(model.GetAssistDogzCount(), "/", model.curSumAssistNum)); UpdateDogzBtn(); UpdateDogzProperty(); UpdateDogzEquip(); } private void UpdateDogzBtn() { var _dogzEquips = model.GetDogzEquips(model.presentSelectDogz); m_TakeOffEquipBtn.SetActive(_dogzEquips != null && _dogzEquips.Count > 0); m_CallBackBtnTxt.text = model.TryGetAssistDogzState(model.presentSelectDogz) ? Language.Get("DogzFunc104") : Language.Get("DogzFunc105"); } private void AddAssist() { if(model.IsAddMaxAssist()) { SysNotifyMgr.Instance.ShowTip("DogzNumLimit"); return; } var _itemConfig = ItemConfig.Get(model.AddAssistItem); ConfirmCancel.ShowItemConfirm(Language.Get("DogzFunc102", _itemConfig.ItemName, model.GetAssistItemCnt()), model.AddAssistItem, model.GetAssistItemCnt(), () => { model.SendBuyAssistCnt(); if (model.curSumAssistNum + 1 >= model.DogzAssistMaxCnt) { SysNotifyMgr.Instance.ShowTip("DogzNumLimit"); } }); } private void TakeOffEquip() { model.CheckPutOff(0); } private void OpenEquipPack() { WindowCenter.Instance.Open(); } private void CallBackDogz() { List models = model.GetDogzEquips(model.presentSelectDogz); if(models != null && models.Count == 5) { if(!model.TryGetAssistDogzState(model.presentSelectDogz)) { if(model.GetAssistDogzCount() < model.curSumAssistNum) { assistEffect.Play(); assistTextEffect.Play(); model.SendChangeDogzAssist(1,model.presentSelectDogz); } else { int minAssistDogzId = model.GetMinAssistDogzId(); if(model.presentSelectDogz > minAssistDogzId) { model.SendChangeDogzAssist(0,minAssistDogzId); model.SendChangeDogzAssist(1,model.presentSelectDogz); } else { SysNotifyMgr.Instance.ShowTip("AssistDogzReachMax"); } } } else { model.SendChangeDogzAssist(0,model.presentSelectDogz); } } else { SysNotifyMgr.Instance.ShowTip("DogzCantHelp"); } } private void OpenDogzEquip(int index) { WindowCenter.Instance.Open(); } [Serializable] public class DogzSkillData { [SerializeField] RectTransform m_SkillContainer; public void SetEnable(bool _enable) { m_SkillContainer.SetActive(_enable); } [SerializeField] Image m_SkillIcon; public Image Icon { get { return m_SkillIcon; } } [SerializeField] Text m_SkillLv; public Text Lv { get { return m_SkillLv; } } [SerializeField] Button m_SkillBtn; public Button SkillBtn { get { return m_SkillBtn; } } } [Serializable] public class DogzUnEquip { [SerializeField] Button m_DogzUnEquipBtn; public Button DogzUnEquipBtn { get { return m_DogzUnEquipBtn; } } [SerializeField] RedpointBehaviour m_RedpointBeh; public RedpointBehaviour RedpointBeh { get { return m_RedpointBeh; } } } } }