using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; namespace vnxbqy.UI { public class JadeDynastySkillModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk { Dictionary> jadeDynastySkills = new Dictionary>(); Dictionary skillConditions = new Dictionary(); Dictionary skillFrames = new Dictionary(); List alreadyUnlockSkills = new List(); bool serverInited = false; public List mySkills { get { var job = PlayerDatas.Instance.baseData.Job; var key = (int)Mathf.Pow(2, job); if (jadeDynastySkills.ContainsKey(key)) { return jadeDynastySkills[key]; } else { jadeDynastySkills[key] = new List(); } return jadeDynastySkills[key]; } } public readonly Redpoint redpoint = new Redpoint(117, 11702); int m_SelectSkill; public int selectSkill { get { return m_SelectSkill; } set { if (m_SelectSkill != value) { m_SelectSkill = value; if (selectSkillRefresh != null) { selectSkillRefresh(value); } } } } public event Action skillRefresh; public event Action selectSkillRefresh; PackModel packModel { get { return ModelCenter.Instance.GetModel(); } } public override void Init() { ParseConfig(); packModel.refreshItemCountEvent += RefreshItemCountAct; FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent; } public void OnBeforePlayerDataInitialize() { alreadyUnlockSkills.Clear(); serverInited = false; } public void OnPlayerLoginOk() { serverInited = true; UpdateRedpoint(); } public override void UnInit() { packModel.refreshItemCountEvent -= RefreshItemCountAct; FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent; } void ParseConfig() { { var config = FuncConfigConfig.Get("EquipZhuXian"); var json = LitJson.JsonMapper.ToObject(config.Numerical3); foreach (var skillIdKey in json.Keys) { var skillTypeId = int.Parse(skillIdKey); var skillConfig = SkillConfig.Get(skillTypeId); if (skillConfig == null) { continue; } List list; if (!jadeDynastySkills.TryGetValue(skillConfig.UseType, out list)) { list = new List(); jadeDynastySkills.Add(skillConfig.UseType, list); } list.Add(skillTypeId); var levelKey = json[skillIdKey].Keys.First(); var level = int.Parse(levelKey); skillConditions.Add(skillTypeId, new JadeDynastySkillCondition() { level = level, equipPlaces = new List(LitJson.JsonMapper.ToObject(json[skillIdKey][levelKey].ToJson())), }); } } foreach (var skills in jadeDynastySkills.Values) { skills.Sort(Compare); } } public bool IsSatisfyEquipLevel(int equipPlace, int level) { return false; } public JadeDynastySkillState GetSkillState(int skillId) { if (alreadyUnlockSkills.Contains(skillId)) { return JadeDynastySkillState.Unlocked; } JadeDynastySkillCondition condition; if (TryGetSkillCondition(skillId, out condition)) { foreach (var equipPlace in condition.equipPlaces) { if (!IsSatisfyEquipLevel(equipPlace, condition.level)) { return JadeDynastySkillState.Lock; } } } return JadeDynastySkillState.Unlockable; } public bool TryGetSkillCondition(int skillId, out JadeDynastySkillCondition condition) { return skillConditions.TryGetValue(skillId, out condition); } public bool TryGetSkillFrames(int skillId, out Sprite[] _sprites) { if (!skillFrames.ContainsKey(skillId)) { var config = SkillFrameAnimationConfig.Get(skillId); if (config != null) { Sprite[] sprites = new Sprite[config.spriteKeys.Length]; for (int i = 0; i < config.spriteKeys.Length; i++) { var sprite = UILoader.LoadSprite(config.spriteKeys[i]); sprites[i] = sprite; } skillFrames.Add(skillId, sprites); } } return skillFrames.TryGetValue(skillId, out _sprites); } public void OnReceivePackage(H0310_tagRoleSkillChange package) { var skillConfig = SkillConfig.Get(package.NewSkillID); if (skillConfig != null && mySkills.Contains(skillConfig.SkillTypeID)) { if (!alreadyUnlockSkills.Contains(skillConfig.SkillTypeID)) { alreadyUnlockSkills.Add(skillConfig.SkillTypeID); if (skillRefresh != null) { skillRefresh(skillConfig.SkillTypeID); } if (serverInited) { if (!NewBieCenter.Instance.inGuiding && !WindowCenter.Instance.IsOpen() && WindowCenter.Instance.IsOpen()) { ActivateShow.JadeDynastySkillUnlock(skillConfig.SkillTypeID); } } } UpdateRedpoint(); } } private int Compare(int lhs, int rhs) { if (skillConditions.ContainsKey(lhs) && skillConditions.ContainsKey(rhs)) { return skillConditions[lhs].level.CompareTo(skillConditions[rhs].level); } return 0; } private void RefreshItemCountAct(PackType packType, int arg2, int arg3) { } private void OnFuncStateChangeEvent(int id) { if (id == 167) { UpdateRedpoint(); } } void UpdateRedpoint() { var unlockable = false; if (FuncOpen.Instance.IsFuncOpen(167)) { foreach (var skill in mySkills) { var state = GetSkillState(skill); if (state == JadeDynastySkillState.Unlockable) { unlockable = true; break; } } } redpoint.state = unlockable ? RedPointState.Simple : RedPointState.None; } } public struct JadeDynastySkillCondition { public int level; public List equipPlaces; } public enum JadeDynastySkillState { Lock, Unlockable, Unlocked, } }