Core/GameEngine/Model/Config/SkillFrameAnimationConfig.cs
New file @@ -0,0 +1,44 @@ //-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Tuesday, January 22, 2019 //-------------------------------------------------------- using UnityEngine; using System; namespace TableConfig { public partial class SkillFrameAnimationConfig : ConfigBase { public int skillTypeId { get ; private set ; } public int totalTime { get ; private set ; } public string[] spriteKeys; public override string getKey() { return skillTypeId.ToString(); } public override void Parse() { try { skillTypeId=IsNumeric(rawContents[0]) ? int.Parse(rawContents[0]):0; totalTime=IsNumeric(rawContents[1]) ? int.Parse(rawContents[1]):0; spriteKeys = rawContents[2].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries); } catch (Exception ex) { DebugEx.Log(ex); } } } } Core/GameEngine/Model/Config/SkillFrameAnimationConfig.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: d2052f17dcdee634082ca8f214df0ecd timeCreated: 1548147951 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/JadeDynastyKnapSack/JadeDynastyKnapSackWin.cs
@@ -7,6 +7,7 @@ public class JadeDynastyKnapSackWin : Window { [SerializeField] FunctionButton funcEquip; [SerializeField] FunctionButton m_JadeDynastySkill; [SerializeField] FunctionButtonGroup funcGroup; [SerializeField] Button closeBtn; [SerializeField] Button leftBtn; @@ -23,6 +24,7 @@ leftBtn.AddListener(ClickLeft); rightBtn.AddListener(ClickRight); funcEquip.AddListener(ClickFuncEquip); m_JadeDynastySkill.AddListener(OpenJadeDynastySkill); } protected override void OnPreOpen() @@ -74,6 +76,13 @@ functionOrder = funcEquip.order; } private void OpenJadeDynastySkill() { CloseSubWindows(); WindowCenter.Instance.Open<JadeDynastySkillWin>(); functionOrder = m_JadeDynastySkill.order; } private void ClickClose() { CloseSubWindows(); System/JadeDynastySkill.meta
New file @@ -0,0 +1,9 @@ fileFormatVersion: 2 guid: 2f9ea79536d2476479a4288b9329e172 folderAsset: yes timeCreated: 1548126896 licenseType: Pro DefaultImporter: userData: assetBundleName: assetBundleVariant: System/JadeDynastySkill/JadeDynastySkillCell.cs
New file @@ -0,0 +1,82 @@ using System.Collections; using System.Collections.Generic; using TableConfig; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class JadeDynastySkillCell : CellView { [SerializeField] Transform m_ContainerSelect; [SerializeField] Image m_SkillIcon; [SerializeField] Text m_SkillName; [SerializeField] Transform m_ContainerSkillLock; [SerializeField] Text m_Condition; [SerializeField] Text[] m_EquipPlaceNames; [SerializeField] Transform m_ContainerLock; [SerializeField] Transform m_ContainerUnlockable; [SerializeField] Button m_Unlock; [SerializeField] Transform m_ContainerUnlocked; JadeDynastySkillModel model { get { return ModelCenter.Instance.GetModel<JadeDynastySkillModel>(); } } public void Display(int skillId) { m_ContainerSelect.gameObject.SetActive(skillId == model.selectSkill); m_Unlock.RemoveAllListeners(); var skillConfig = Config.Instance.Get<SkillConfig>(skillId); if (skillConfig != null) { m_SkillIcon.SetSprite(skillConfig.IconName); m_SkillName.text = skillConfig.SkillName; } var skillState = model.GetSkillState(skillId); m_ContainerSkillLock.gameObject.SetActive(skillState != JadeDynastySkillState.Unlocked); JadeDynastySkillCondition condition; var index = 0; if (model.TryGetSkillCondition(skillId, out condition)) { m_Condition.text = Language.Get("JadeDynastySkillContition", condition.level); foreach (var equipPlace in condition.equipPlaces) { if (index < m_EquipPlaceNames.Length) { m_EquipPlaceNames[index].gameObject.SetActive(true); m_EquipPlaceNames[index].text = Language.Get("", equipPlace); m_EquipPlaceNames[index].color = skillState == JadeDynastySkillState.Unlocked || model.IsSatisfyEquipLevel(equipPlace, condition.level) ? UIHelper.GetUIColor(TextColType.DarkGreen) : UIHelper.GetUIColor(TextColType.Gray, true); } index++; } } for (int i = index; i < m_EquipPlaceNames.Length; i++) { m_EquipPlaceNames[i].gameObject.SetActive(false); } m_ContainerLock.gameObject.SetActive(skillState == JadeDynastySkillState.Lock); m_ContainerUnlockable.gameObject.SetActive(skillState == JadeDynastySkillState.Unlockable); m_ContainerUnlocked.gameObject.SetActive(skillState == JadeDynastySkillState.Unlocked); if (skillState == JadeDynastySkillState.Unlockable) { m_Unlock.AddListener(() => { C0304_tagCAddSkillPoint pak = new C0304_tagCAddSkillPoint(); pak.SkillID = (ushort)skillId; GameNetSystem.Instance.SendInfo(pak); }); } } } } System/JadeDynastySkill/JadeDynastySkillCell.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: 173092759a751964e8bce56c5d62f138 timeCreated: 1548143731 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/JadeDynastySkill/JadeDynastySkillModel.cs
New file @@ -0,0 +1,260 @@ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using TableConfig; using UnityEngine; namespace Snxxz.UI { public class JadeDynastySkillModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk { Dictionary<int, List<int>> jadeDynastySkills = new Dictionary<int, List<int>>(); Dictionary<int, JadeDynastySkillCondition> skillConditions = new Dictionary<int, JadeDynastySkillCondition>(); Dictionary<int, Sprite[]> skillFrames = new Dictionary<int, Sprite[]>(); List<int> alreadyUnlockSkills = new List<int>(); bool serverInited = false; public List<int> 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<int>(); } 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<int> skillRefresh; public event Action<int> selectSkillRefresh; PlayerPackModel packModel { get { return ModelCenter.Instance.GetModel<PlayerPackModel>(); } } public override void Init() { ParseConfig(); packModel.RefreshItemCountAct += RefreshItemCountAct; FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent; } public void OnBeforePlayerDataInitialize() { alreadyUnlockSkills.Clear(); serverInited = false; } public void OnPlayerLoginOk() { serverInited = true; UpdateRedpoint(); } public override void UnInit() { packModel.RefreshItemCountAct -= RefreshItemCountAct; FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent; } void ParseConfig() { { var config = Config.Instance.Get<FuncConfigConfig>("EquipZhuXian"); var json = LitJson.JsonMapper.ToObject(config.Numerical3); foreach (var skillIdKey in json.Keys) { var skillTypeId = int.Parse(skillIdKey); var skillConfig = Config.Instance.Get<SkillConfig>(skillTypeId); if (skillConfig == null) { continue; } List<int> list; if (!jadeDynastySkills.TryGetValue(skillConfig.UseType, out list)) { list = new List<int>(); 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<int>(LitJson.JsonMapper.ToObject<int[]>(json[skillIdKey][levelKey].ToJson())), }); } } foreach (var skills in jadeDynastySkills.Values) { skills.Sort(Compare); } } public bool IsSatisfyEquipLevel(int equipPlace, int level) { var itemModel = packModel.GetItemModelByIndex(PackType.rptJadeDynastyEquip, equipPlace); if (itemModel != null) { return itemModel.chinItemModel.LV >= 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 = Config.Instance.Get<SkillFrameAnimationConfig>(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 = Config.Instance.Get<SkillConfig>(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<RealmPropertyUpWin>()) { 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) { if (packType == PackType.rptJadeDynastyEquip) { UpdateRedpoint(); } } 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<int> equipPlaces; } public enum JadeDynastySkillState { Lock, Unlockable, Unlocked, } } System/JadeDynastySkill/JadeDynastySkillModel.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: 54964ff87641376429f6b467cf990d8e timeCreated: 1548127288 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/JadeDynastySkill/JadeDynastySkillWin.cs
New file @@ -0,0 +1,141 @@ //-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Tuesday, January 22, 2019 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using TableConfig; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class JadeDynastySkillWin : Window { [SerializeField] Text m_SkillDescription; [SerializeField] Text m_SkillFightPower; [SerializeField] FrameEffect m_SkillFrame; [SerializeField] ScrollerController m_ScrollerControl; JadeDynastySkillModel model { get { return ModelCenter.Instance.GetModel<JadeDynastySkillModel>(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_ScrollerControl.OnRefreshCell += OnRefreshCell; } protected override void OnPreOpen() { SetDefaultSelect(); Display(); model.selectSkillRefresh += SelectSkillRefresh; model.skillRefresh += SkillRefresh; } protected override void OnAfterOpen() { } protected override void OnPreClose() { model.selectSkillRefresh -= SelectSkillRefresh; model.skillRefresh -= SkillRefresh; } protected override void OnAfterClose() { } #endregion void SetDefaultSelect() { foreach (var skill in model.mySkills) { if (model.GetSkillState(skill) == JadeDynastySkillState.Unlockable) { model.selectSkill = skill; return; } } model.selectSkill = model.mySkills[0]; } void Display() { DisplaySkills(); DisplaySkillDetail(); } void DisplaySkills() { m_ScrollerControl.Refresh(); foreach (var skill in model.mySkills) { m_ScrollerControl.AddCell(ScrollerDataType.Header, skill,OnSelectSkill); } m_ScrollerControl.Restart(); var index = model.mySkills.IndexOf(model.selectSkill); if (index != -1) { m_ScrollerControl.JumpIndex(index); } } void DisplaySkillDetail() { var skillConfig = Config.Instance.Get<SkillConfig>(model.selectSkill); if (skillConfig != null) { m_SkillDescription.text = skillConfig.Description; m_SkillFightPower.text = StringUtility.Contact("+", skillConfig.FightPower); Sprite[] sprites; if (model.TryGetSkillFrames(model.selectSkill, out sprites)) { var config = Config.Instance.Get<SkillFrameAnimationConfig>(model.selectSkill); m_SkillFrame.SetSprites(sprites, (float)config.totalTime / 1000); } } } private void SelectSkillRefresh(int skillId) { DisplaySkillDetail(); m_ScrollerControl.m_Scorller.RefreshActiveCellViews(); } private void OnSelectSkill(CellView cell) { model.selectSkill = cell.index; } private void SkillRefresh(int id) { m_ScrollerControl.RefreshSingleCellView(id); } private void OnRefreshCell(ScrollerDataType type, CellView cell) { var skillCell = cell as JadeDynastySkillCell; skillCell.Display(cell.index); } } } System/JadeDynastySkill/JadeDynastySkillWin.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: 6ed84d1a53f9ac844be81ad82535b43e timeCreated: 1548139898 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/Realm/ActivateShow.cs
@@ -361,6 +361,26 @@ } } public static void JadeDynastySkillUnlock(int skillId) { activateType = ActivateFunc.JadeDynastySkill; skills.Clear(); fightPower = 0; skills.Add(skillId); titleIconKey = "UI_JH_6"; var config = Config.Instance.Get<SkillConfig>(skillId); if (config != null) { fightPower = config.FightPower; } if (!WindowCenter.Instance.IsOpen<RealmPropertyUpWin>()) { WindowCenter.Instance.Open<RealmPropertyUpWin>(); } } public static void PrepareSkillFly() { if (prepareFlySkillEvent != null) @@ -384,6 +404,7 @@ Stove, //炼丹炉升级 TreasureSoul,//法宝魂领取属性 GodWeaponEffect, JadeDynastySkill, } public struct PropertyCompare System/Realm/RealmPropertyUpWin.cs
@@ -30,6 +30,7 @@ [SerializeField] SkillBehaviour[] m_Skills; [SerializeField] RectTransform m_ContainerNewGotSkill; [SerializeField] SkillBehaviour m_NewGotSkill; [SerializeField] FrameEffect m_NewGotSkillFrame; [SerializeField] RectTransform m_NewGotSkillPoint; [SerializeField] RectTransform m_ContainerRealm; [SerializeField] RectTransform m_ContainerRealmUp; @@ -73,6 +74,7 @@ m_ContainerRealm.gameObject.SetActive(false); m_ContainerTreasureSoul.gameObject.SetActive(false); m_ContainerGodWeaponEffect.gameObject.SetActive(false); m_NewGotSkillFrame.gameObject.SetActive(false); m_DisplayAlphaTween.SetStartState(); flying = false; startFly = false; @@ -162,6 +164,10 @@ DisplayFightPower(); DisplayLv(); DisplayGodWeaponEffect(); DisplayNewGotSkill(); break; case ActivateShow.ActivateFunc.JadeDynastySkill: DisplayFightPower(); DisplayNewGotSkill(); break; } @@ -365,6 +371,15 @@ } } break; case ActivateShow.ActivateFunc.JadeDynastySkill: m_ContainerNewGotSkill.gameObject.SetActive(ActivateShow.skills.Count > 0); if (ActivateShow.skills.Count == 0) { return; } m_NewGotSkill.DisplayNewGot(ActivateShow.skills[0]); DisplaySkillFrame(ActivateShow.skills[0]); break; default: { m_ContainerNewGotSkill.gameObject.SetActive(ActivateShow.skills.Count > 0); @@ -400,6 +415,18 @@ m_GodWeaponStage.text = Language.Get("MagicWin_9", config.Name, stage); } void DisplaySkillFrame(int skillId) { m_NewGotSkillFrame.gameObject.SetActive(true); var model = ModelCenter.Instance.GetModel<JadeDynastySkillModel>(); Sprite[] sprites; if (model.TryGetSkillFrames(skillId, out sprites)) { var config = Config.Instance.Get<SkillFrameAnimationConfig>(skillId); m_NewGotSkillFrame.SetSprites(sprites, (float)config.totalTime / 1000); } } void PrepareFly(int _skillId) { ActivateShow.PrepareSkillFly(); UI/Common/FrameEffect.cs
@@ -45,6 +45,11 @@ timer += Time.deltaTime; tempSumTime -= Time.deltaTime; if (m_Sprites == null || m_Sprites.Length == 0) { return; } if(tempSumTime > 0) { if (timer > interval) @@ -68,6 +73,23 @@ } } public void SetSprites(Sprite[] sprites,float _totalTime) { m_Sprites = sprites; onceTime = _totalTime; sumTime = _totalTime; if (m_Sprites != null && m_Sprites.Length > 0) { interval = onceTime / m_Sprites.Length; index = 0; timer = 0f; tempSumTime = sumTime; m_Behaviour.overrideSprite = m_Sprites[index]; m_Behaviour.SetNativeSize(); } } } }