//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Tuesday, November 14, 2017 //-------------------------------------------------------- using UnityEngine; using System.Collections; using System.Collections.Generic; using UnityEngine.UI; using System.Linq; using System; using vnxbqy.UI; //灵宠属性 namespace vnxbqy.UI { public class PetAttributeWin : Window { [SerializeField] ScrollerController m_ScrollerController; [SerializeField] UIEffect _uiEffect;//特效播放 [SerializeField] UIEffect m_LevelUpEffect; [SerializeField] PetAttributeMethods _PetAttributeMethods; [SerializeField] GameObject m_PetTrainBtnObj; List sortlist = new List();//灵兽顺序排列 PetModel m_petModel; PetModel petmodel { get { return m_petModel ?? (m_petModel = ModelCenter.Instance.GetModel()); } } PackModel _playerPack; PackModel playerPack { get { return _playerPack ?? (_playerPack = ModelCenter.Instance.GetModel()); } } RidingAndPetActivationModel ridingAndPetActivationModel { get { return ModelCenter.Instance.GetModel(); } } public static event Action IsRedPointCultivate; public AchievementGuideEffect AchievementGuideEffect1; public AchievementGuideEffect AchievementGuideEffect2; private int PetLv = 0;//获取当前选中灵宠的等级 private int TypePetID = 0;//用来标记当前选中的灵宠ID private bool inLevelUp = false; private bool isOpenFirst = true; private List petinfo = new List(); protected override void BindController() { petinfo = PetInfoConfig.GetValues(); } protected override void AddListeners() { } protected override void OnPreOpen() { inLevelUp = false; ToAddSorting(); isOpenFirst = true; petmodel.Wait = true; PetModel.Event_H0704Add += AddPet; PetModel.Event_H0704Update += PetUpdate; PetModel.Event_SpiritPetPlay += OnSpiritPetPlay; m_ScrollerController.OnRefreshCell += OnRefreshGridCell; OptionIsSelected();//默认赋值 OnCreateGridLineCell(m_ScrollerController); m_ScrollerController.JumpIndex(JunpIndex()); } protected override void OnActived() { HandleAchievement(); ClickSelectPetBtn(TypePetID); } protected override void OnAfterOpen() { } protected override void OnPreClose() { StopCoroutine("IeWait"); AchievementGoto.achievementType = 0; PetModel.Event_H0704Add -= AddPet; m_ScrollerController.OnRefreshCell -= OnRefreshGridCell; PetModel.Event_SpiritPetPlay -= OnSpiritPetPlay; PetModel.Event_H0704Update -= PetUpdate; } protected override void OnAfterClose() { if (PlayerDatas.Instance.baseData.LV >= 1500 && IsRedPointCultivate != null) { IsRedPointCultivate(); } if (ItemOperateUtility.Instance.useItemModel != null) { ItemOperateUtility.Instance.useItemModel = null; } } private void AddPet()//灵宠添加 { m_ScrollerController.m_Scorller.RefreshActiveCellViews();//刷新可见 ridingAndPetActivationModel.RidingAndPetActivationSet(RidingAndPetActivation.PetActivation, TypePetID); } List PetSkillLv = new List(); List PetSkill = new List(); private void PetUpdate(int _PetID)//灵宠刷新 { petmodel.Wait = true; PetInfoConfig petInfo = PetInfoConfig.Get(_PetID); if (petmodel._DicPetBack.ContainsKey(_PetID)) { PetSkillLv.Clear(); PetSkill.Clear(); int[] petSkillLvStrList = petInfo.SkillUnLock; int[] petSkillStrList = petInfo.SkillID; for (int i = 0; i < petSkillLvStrList.Length; i++) { PetSkillLv.Add(petSkillLvStrList[i]); } for (int i = 0; i < petSkillStrList.Length; i++) { PetSkill.Add(petSkillStrList[i]); } if (_PetID== TypePetID && petmodel._DicPetBack[_PetID].PetClass > PetLv && PetSkillLv.Contains((petmodel._DicPetBack[_PetID].PetClass))) { int Index = PetSkillLv.IndexOf((petmodel._DicPetBack[_PetID].PetClass)); ridingAndPetActivationModel.RidingAndPetActivationSet(RidingAndPetActivation.PetSkillActivates, _PetID, PetSkill[Index], petmodel._DicPetBack[_PetID].PetClass); } } m_ScrollerController.m_Scorller.RefreshActiveCellViews();//刷新可见 } private void OnSpiritPetPlay(int _toPlay) { m_ScrollerController.m_Scorller.RefreshActiveCellViews();//刷新可见 } void OnCreateGridLineCell(ScrollerController gridCtrl) { gridCtrl.Refresh(); for (int i = 0; i < sortlist.Count; i++) { gridCtrl.AddCell(ScrollerDataType.Header, sortlist[i].ID); } gridCtrl.Restart(); } private void OnRefreshGridCell(ScrollerDataType type, CellView cell) { PetButton petButton = cell.GetComponent(); int petId = cell.index; Image chooseImg = petButton.ChoosenImg.GetComponent(); Image unChooseImg = petButton.UnchooseBtn1.GetComponent(); PetInfoConfig petConfig = PetInfoConfig.Get(petId); if (petConfig.Quality == 7) { unChooseImg.SetSprite("mhLCBQ1"); chooseImg.SetSprite("mhLCBQ2"); } else { unChooseImg.SetSprite("ListBtn_UnSelect"); chooseImg.SetSprite("ListBtn_Select"); } petButton.ButtonAssignment(petId); if (TypePetID == petId) { if (petmodel._DicPetBack.ContainsKey(petId)) { PetLv = petmodel._DicPetBack[petId].PetClass; } else { PetLv = 0; } petButton.ChoosenImg.SetActive(true); petButton.UnchooseBtn1.SetActive(false); if (petmodel._DicPetBack.ContainsKey(petId) && petmodel.PetNow != petId) { petButton.PlayedButton.SetActive(true); petButton.PlayedButton.RemoveAllListeners(); PetBackpack petPack = petmodel._DicPetBack[petId]; if (petPack.PetClass >= petConfig.UseNeedRank) { petButton.Played_Text.text = Language.Get("PetText2"); petButton.PlayedButton.AddListener(() => { petmodel.SendPetSwitchQuest(petPack.ItemPlace); }); } else { petButton.Played_Text.text = Language.Get("PetText1", petConfig.UseNeedRank); petButton.PlayedButton.AddListener(() => { ScrollTip.ShowTip(Language.Get("Z1821", petConfig.Name, petConfig.UseNeedRank)); }); } } else { petButton.PlayedButton.SetActive(false); } } else { petButton.PlayedButton.SetActive(false); petButton.ChoosenImg.SetActive(false); petButton.UnchooseBtn1.SetActive(true); } petButton.PetButton1.RemoveAllListeners(); petButton.PetButton1.AddListener(() => { StartCoroutine("IeWait", petId); //ClickSelectPetBtn(petId); //m_ScrollerController.m_Scorller.RefreshActiveCellViews(); }); } IEnumerator IeWait(int petId) { yield return new WaitForSeconds(0.3f); ClickSelectPetBtn(petId); m_ScrollerController.m_Scorller.RefreshActiveCellViews(); } private void ClickSelectPetBtn(int petId) { if (isOpenFirst) { isOpenFirst = false; } else { if (TypePetID == petId) { return; } } TypePetID = petId; _PetAttributeMethods.ModelShow(petId); ModelCenter.Instance.GetModel().TypePetID = petId; } private bool IsStreetful()//判断是否有满阶灵宠 { bool isBool = false; if (m_petModel._DicPetBack.Count == 0) { return false; } foreach (int key in m_petModel._DicPetBack.Keys) { int petMaxLv = PetInfoConfig.Get(key).MaxRank; if (m_petModel._DicPetBack[key].PetClass >= petMaxLv) { isBool = true; } } return isBool; } void ToAddSorting()//灵宠排序 { // sortlist.Clear(); if (sortlist.Count <= 0) { sortlist = PetInfoConfig.GetValues(); } sortlist.Sort(Compare); } int Compare(PetInfoConfig x, PetInfoConfig y)//数组排列 { int havex = NoFullLv(x.ID); int havey = NoFullLv(y.ID); bool have_x = IsFullLv(x.ID); bool have_y = IsFullLv(y.ID); if (havex.CompareTo(havey) != 0) { return -havex.CompareTo(havey); } if (have_x.CompareTo(have_y) != 0) { return -have_x.CompareTo(have_y); } if (x.Sort.CompareTo(y.Sort) != 0) { return x.Sort.CompareTo(y.Sort); } return 1; } private int NoFullLv(int petID)//未满街 { PetInfoConfig PetConfig = PetInfoConfig.Get(petID); int MaterialNumber = playerPack.GetItemCountByID(PackType.Item, PetConfig.UnLockNeedItemID);//获取背包解锁材料的数量 if (MaterialNumber != 0 && !petmodel._DicPetBack.ContainsKey(petID)) { return 3; } if (petmodel.PetNow == petID) return 2; if (petmodel._DicPetBack.ContainsKey(petID)) { if (PetConfig.MaxRank > petmodel._DicPetBack[petID].PetClass) { return 1; } else { return 0; } } return 0; } private bool IsFullLv(int petID)//满阶 { PetInfoConfig PetConfig = PetInfoConfig.Get(petID); if (petmodel._DicPetBack.ContainsKey(petID)) { if (PetConfig.MaxRank <= petmodel._DicPetBack[petID].PetClass) { return true; } else { return false; } } return false; } private void OptionIsSelected()//跳转选择 { if (ItemOperateUtility.Instance.useItemModel != null)//灵宠单 { int ItemId = ItemOperateUtility.Instance.useItemModel.itemId; if (ItemId == 4151) { int Pet = petmodel.GetMinPetExp(); if (Pet != 0) { TypePetID = Pet; return; } } } if (ItemOperateUtility.Instance.useItemModel != null)//坐骑碎片 { int ItemId = ItemOperateUtility.Instance.useItemModel.itemId; //var petinfo = PetInfoConfig.GetValues(); foreach (var Value in petinfo) { if (Value.UnLockNeedItemID == ItemId) { TypePetID = Value.ID; return; } } } foreach (var key in petmodel.DeblockingRedPoint.Keys)//灵宠解锁 { if (petmodel.DeblockingRedPoint[key].state == RedPointState.Simple) { TypePetID = key; return; } } foreach (var key in petmodel.CultivateRedPoint.Keys)//灵宠培养 { if (petmodel.CultivateRedPoint[key].state == RedPointState.Simple) { TypePetID = key; return; } } if (petmodel.PetNow != 0) { TypePetID = petmodel.PetNow; } else { TypePetID = sortlist[0].ID; } } private int JunpIndex() { int Index = 0; Index = sortlist.FindIndex((x) => { return x.ID == TypePetID; }); if (Index == -1) { Index = 0; } return JumpSelect(Index); } private void HandleAchievement() { if (AchievementGoto.achievementType == AchievementGoto.SpiritPetAdvanced)//灵宠培养 { AchievementGoto.achievementType = 0; SuccessConfig successConfig = SuccessConfig.Get(AchievementGoto.guideAchievementId); int[] petID = successConfig.Condition; // var PetModel = PetInfoConfig.GetValues(); foreach (var value in petinfo) { if (value.ID == petID[0]) { TypePetID = petID[0]; } } //m_ScrollerController.m_Scorller.RefreshActiveCellViews();//刷新可见 OnCreateGridLineCell(m_ScrollerController); m_ScrollerController.JumpIndex(JunpIndex()); if (petmodel._DicPetBack.ContainsKey(TypePetID)) { int haveCnt = playerPack.GetItemCountByID(PackType.Item, 4151); if (haveCnt > 0) { AchievementGuideEffect2 = AchievementGuideEffectPool.Require(1); AchievementGuideEffect2.transform.SetParentEx(m_PetTrainBtnObj.transform, Vector3.zero, Vector3.zero, Vector3.one); } else { SysNotifyMgr.Instance.ShowTip("PetShowTipAchievement2"); } } else { SysNotifyMgr.Instance.ShowTip("PetShowTipAchievement1"); } } } private int JumpSelect(int Index) { if (Index <= 4) { return 0; } return Index; } } }