//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Friday, July 27, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using TableConfig; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class ViewPetDetailWin : Window { [SerializeField] ScrollerController m_Controller; [SerializeField] Text m_FightPower; [SerializeField] Text m_PetAtk; [SerializeField] Text m_PetAtkSpeed; [SerializeField] PetSkill[] m_PetSkills; [SerializeField] ScrollerController m_SkillController; [SerializeField] RawImage m_RawModel; [SerializeField] Button m_PetStone; [SerializeField] Button m_CloseBtn; [SerializeField, Header("技能一行个数")] int m_LineCount = 3; public int selectPet { get; private set; } public int lineCount { get { return m_LineCount; } } List skills = new List(); [NonSerialized] public List activeSkills = new List(); RoleParticularModel model { get { return ModelCenter.Instance.GetModel(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_Controller.OnRefreshCell += OnRefreshCell; m_SkillController.OnRefreshCell += OnRefreshSkillCell; m_PetStone.onClick.AddListener(OnPetStone); m_CloseBtn.onClick.AddListener(CloseClick); } protected override void OnPreOpen() { Display(); } protected override void OnAfterOpen() { } protected override void OnPreClose() { } protected override void OnAfterClose() { } #endregion void Display() { RoleParticularModel.ViewPlayerData data = model.GetViewPlayerData(model.viewPlayer); if (data == null) { return; } var pets = data.rolePlusData.pets; selectPet = pets[0].id; m_Controller.Refresh(); for (int i = 0; i < pets.Count; i++) { CellInfo info = CellInfo.Default; info.infoInt1 = pets[i].lv; m_Controller.AddCell(ScrollerDataType.Header, pets[i].id, info); } m_Controller.Restart(); m_FightPower.text = model.GetPetFightPower(pets).ToString(); DisplayModel(selectPet); DisplayProperty(pets, data.rolePlusData.AtkSpeed); DisplaySkills(pets[0].id, pets[0].lv); DisplayTotalSkills(pets); } public void SelectPet(int _id) { selectPet = _id; RoleParticularModel.ViewPlayerData data = model.GetViewPlayerData(model.viewPlayer); if (data == null) { return; } var pets = data.rolePlusData.pets; var pet = pets.Find((x) => { return x.id == selectPet; }); if (!pet.Equals(default(RoleParticularModel.PetInfo))) { DisplaySkills(pet.id, pet.lv); DisplayModel(pet.id); } m_Controller.m_Scorller.RefreshActiveCellViews(); } void DisplayProperty(List pets,int AtkSpeed) { m_PetAtk.text = model.GetPetAtkProperty(pets).ToString(); m_PetAtkSpeed.text = ((float)AtkSpeed / 100).ToString(); } void DisplaySkills(int id, int lv) { PetInfoConfig.GetPetSkills(id, lv, false,ref skills); for (int i = 0; i < m_PetSkills.Length; i++) { if (i < skills.Count) { m_PetSkills[i].SetActive(true); var condition = PetInfoConfig.GetPetSkillCondition(id, skills[i]); m_PetSkills[i].Display(id, skills[i], lv >= condition ? 0 : condition); } else { m_PetSkills[i].SetActive(false); } } } void DisplayTotalSkills(List pets) { activeSkills.Clear(); for (int i = 0; i < pets.Count; i++) { PetInfoConfig.GetPetSkills(pets[i].id, pets[i].lv, true, ref skills); activeSkills.AddRange(skills); } m_SkillController.Refresh(); var line = Mathf.CeilToInt((float)activeSkills.Count / m_LineCount); for (int i = 0; i < line; i++) { m_SkillController.AddCell(ScrollerDataType.Header, i); } m_SkillController.Restart(); } private void OnPetStone() { model.viewPetStone = true; WindowCenter.Instance.Open(); } void DisplayModel(int id) { m_RawModel.gameObject.SetActive(true); var npcConfig = Config.Instance.Get(id); UI3DModelExhibition.Instance.BeginShowNPC(id, npcConfig.UIModeLOffset, npcConfig.UIModelRotation, m_RawModel); if (UI3DModelExhibition.Instance.NpcModelPet != null) { var animator = UI3DModelExhibition.Instance.NpcModelPet.GetComponent(); if (animator != null) { animator.Play(GAStaticDefine.State_Dance); } } } private void OnRefreshCell(ScrollerDataType type, CellView cell) { ViewPetSelectCell selectCell = cell as ViewPetSelectCell; var lv = cell.info.HasValue ? cell.info.Value.infoInt1 : 0; selectCell.Display(cell.index, lv, this); } private void OnRefreshSkillCell(ScrollerDataType type, CellView cell) { ViewPetSkillCell skillCell = cell as ViewPetSkillCell; skillCell.Display(cell.index, this); } [Serializable] public class PetSkill { [SerializeField] RectTransform m_Container; [SerializeField] Button m_SkillBtn; [SerializeField] RectTransform m_ContainerLock; [SerializeField] Text m_Condition; [SerializeField] Image m_SkillIcon; int petId = 0; int skillId = 0; public void Display(int id, int _skillId, int condition) { var config = Config.Instance.Get(_skillId); if (config != null) { m_SkillIcon.SetSprite(config.IconName); } petId = id; skillId = _skillId; m_ContainerLock.gameObject.SetActive(condition > 0); if (condition > 0) { m_Condition.text = Language.Get("LoadIconLV", condition); } m_SkillBtn.RemoveAllListeners(); m_SkillBtn.AddListener(OnClickSkill); } private void OnClickSkill() { PetInfoConfig petInfo = Config.Instance.Get(petId); if (petInfo != null) { var skillConfig = Config.Instance.Get(skillId); SkillDetails.ShowSkillDetails(skillId, SkillDetails.SkillSourceType.ViewHorsePet, skillConfig == null ? 0 : skillConfig.FightPower, Language.Get("pet_SkillTipLv", petInfo.Name, PetInfoConfig.GetPetSkillCondition(petId, skillId))); } } public void SetActive(bool active) { m_Container.gameObject.SetActive(active); } } } }