Core/GameEngine/Model/Config/VipPrivilegeInfoConfig.cs
New file @@ -0,0 +1,223 @@ //-------------------------------------------------------- // [Author]: Fish // [ Date ]: Monday, June 10, 2019 //-------------------------------------------------------- using System.Collections.Generic; using System.IO; using System.Threading; using System; using UnityEngine; [XLua.LuaCallCSharp] public partial class VipPrivilegeInfoConfig { public readonly int id; public readonly string name; public readonly int displayType; public readonly string[] label; public readonly int dataType; public readonly int privilegeId; public readonly int[] datas; public VipPrivilegeInfoConfig() { } public VipPrivilegeInfoConfig(string input) { try { var tables = input.Split('\t'); int.TryParse(tables[0],out id); name = tables[1]; int.TryParse(tables[2],out displayType); label = tables[3].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries); int.TryParse(tables[4],out dataType); int.TryParse(tables[5],out privilegeId); string[] datasStringArray = tables[6].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries); datas = new int[datasStringArray.Length]; for (int i=0;i<datasStringArray.Length;i++) { int.TryParse(datasStringArray[i],out datas[i]); } } catch (Exception ex) { DebugEx.Log(ex); } } static Dictionary<string, VipPrivilegeInfoConfig> configs = new Dictionary<string, VipPrivilegeInfoConfig>(); public static VipPrivilegeInfoConfig Get(string id) { if (!inited) { Debug.Log("VipPrivilegeInfoConfig 还未完成初始化。"); return null; } if (configs.ContainsKey(id)) { return configs[id]; } VipPrivilegeInfoConfig config = null; if (rawDatas.ContainsKey(id)) { config = configs[id] = new VipPrivilegeInfoConfig(rawDatas[id]); rawDatas.Remove(id); } return config; } public static VipPrivilegeInfoConfig Get(int id) { return Get(id.ToString()); } public static List<string> GetKeys() { var keys = new List<string>(); keys.AddRange(configs.Keys); keys.AddRange(rawDatas.Keys); return keys; } public static List<VipPrivilegeInfoConfig> GetValues() { var values = new List<VipPrivilegeInfoConfig>(); values.AddRange(configs.Values); var keys = new List<string>(rawDatas.Keys); foreach (var key in keys) { values.Add(Get(key)); } return values; } public static bool Has(string id) { return configs.ContainsKey(id) || rawDatas.ContainsKey(id); } public static bool Has(int id) { return Has(id.ToString()); } public static bool inited { get; private set; } protected static Dictionary<string, string> rawDatas = new Dictionary<string, string>(); public static void Init(bool sync=false) { inited = false; var path = string.Empty; if (AssetSource.refdataFromEditor) { path = ResourcesPath.CONFIG_FODLER +"/VipPrivilegeInfo.txt"; } else { path = AssetVersionUtility.GetAssetFilePath("config/VipPrivilegeInfo.txt"); } configs.Clear(); var tempConfig = new VipPrivilegeInfoConfig(); var preParse = tempConfig is IConfigPostProcess; if (sync) { var lines = File.ReadAllLines(path); if (!preParse) { rawDatas = new Dictionary<string, string>(lines.Length - 3); } for (int i = 3; i < lines.Length; i++) { try { var line = lines[i]; var index = line.IndexOf("\t"); if (index == -1) { continue; } var id = line.Substring(0, index); if (preParse) { var config = new VipPrivilegeInfoConfig(line); configs[id] = config; (config as IConfigPostProcess).OnConfigParseCompleted(); } else { rawDatas[id] = line; } } catch (System.Exception ex) { Debug.LogError(ex); } } inited = true; } else { ThreadPool.QueueUserWorkItem((object _object) => { var lines = File.ReadAllLines(path); if (!preParse) { rawDatas = new Dictionary<string, string>(lines.Length - 3); } for (int i = 3; i < lines.Length; i++) { try { var line = lines[i]; var index = line.IndexOf("\t"); if (index == -1) { continue; } var id = line.Substring(0, index); if (preParse) { var config = new VipPrivilegeInfoConfig(line); configs[id] = config; (config as IConfigPostProcess).OnConfigParseCompleted(); } else { rawDatas[id] = line; } } catch (System.Exception ex) { Debug.LogError(ex); } } inited = true; }); } } } Core/GameEngine/Model/Config/VipPrivilegeInfoConfig.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: 53554b87ef95b1240a6528d2b10fba27 timeCreated: 1560132767 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Core/GameEngine/Model/TelPartialConfig/PartialVipPrivilegeInfoConfig.cs
New file @@ -0,0 +1,45 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; public partial class VipPrivilegeInfoConfig : IConfigPostProcess { public void OnConfigParseCompleted() { } public static int GetPrivilegeData(int id, int level) { var config = Get(id); if (config != null) { if (config.dataType == 1) { return VipPrivilegeConfig.GetVipPrivilegeData(id, level); } if (config.datas != null && config.datas.Length > 0) { var index = level - 1; var min = Mathf.Min(index, config.datas.Length - 1); return config.datas[min]; } } return 0; } public static string GetPrivilegeLabel(int id, int level) { var config = Get(id); if (config != null) { if (config.label != null && config.label.Length > 0) { var index = level - 1; var min = Mathf.Min(index, config.label.Length - 1); return config.label[min]; } } return string.Empty; } } Core/GameEngine/Model/TelPartialConfig/PartialVipPrivilegeInfoConfig.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: f828955cf37b539439655d82c0d05b48 timeCreated: 1560131589 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Core/GameEngine/Model/TelPartialConfig/tagVipPrivilegeConfig.cs
@@ -4,11 +4,11 @@ public partial class VipPrivilegeConfig : IConfigPostProcess { private static Dictionary<VipPrivilegeType, Dictionary<int, int>> vipPrivilegeDic = new Dictionary<VipPrivilegeType, Dictionary<int, int>>(); private static Dictionary<int, Dictionary<int, int>> vipPrivilegeDic = new Dictionary<int, Dictionary<int, int>>(); public void OnConfigParseCompleted() { if (!vipPrivilegeDic.ContainsKey((VipPrivilegeType)VIPPrivilege)) if (!vipPrivilegeDic.ContainsKey(VIPPrivilege)) { Dictionary<int, int> dic = new Dictionary<int, int>(); dic.Add(0, VIP0); @@ -27,19 +27,24 @@ dic.Add(13, VIP13); dic.Add(14, VIP14); dic.Add(15, VIP15); vipPrivilegeDic.Add((VipPrivilegeType)VIPPrivilege, dic); vipPrivilegeDic.Add(VIPPrivilege, dic); } } public static int GetVipPrivilegeData(VipPrivilegeType type, int vipLv) { return vipPrivilegeDic[type][vipLv]; return vipPrivilegeDic[(int)type][vipLv]; } public static int GetVipPrivilegeData(int id, int vipLv) { return vipPrivilegeDic[id][vipLv]; } public static Dictionary<int, int> GetVipPrivilegeDic(VipPrivilegeType type) { Dictionary<int, int> dic = null; vipPrivilegeDic.TryGetValue(type, out dic); vipPrivilegeDic.TryGetValue((int)type, out dic); return dic; } } System/Vip/VipPrivilegeBehaviour.cs
New file @@ -0,0 +1,44 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class VipPrivilegeBehaviour : MonoBehaviour { [SerializeField] Image m_Bottom; [SerializeField] List<VipPrivilegeWidget> m_VipPrivileges; VipModel model { get { return ModelCenter.Instance.GetModel<VipModel>(); } } public void Display(int id,bool bottom) { m_Bottom.gameObject.SetActive(bottom); for (int i = 0; i < m_VipPrivileges.Count; i++) { m_VipPrivileges[i].gameObject.SetActive(i < model.vipMaxLv); if (i < model.vipMaxLv) { m_VipPrivileges[i].Display(id, i + 1); } } } public void CreateElements(int count) { if (count > m_VipPrivileges.Count) { var delta = count - m_VipPrivileges.Count; for (int i = 0; i < delta; i++) { var go = GameObject.Instantiate(m_VipPrivileges[0].gameObject); go.transform.SetParent(transform); go.transform.localScale = Vector3.one; var instance = go.GetComponent<VipPrivilegeWidget>(); m_VipPrivileges.Add(instance); } } } } } System/Vip/VipPrivilegeBehaviour.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: adc6b483ed1a3294e8aa90462a7fb450 timeCreated: 1559804518 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/Vip/VipPrivilegeInfoWin.cs
New file @@ -0,0 +1,152 @@ //-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Thursday, June 06, 2019 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class VipPrivilegeInfoWin : Window { [SerializeField] ScrollRectGroup m_ScrollGroup; [SerializeField] RectTransform m_ContainerPrivilegeTitles; [SerializeField] RectTransform m_ContainerVip; [SerializeField] RectTransform m_ContainerPrivileges; [SerializeField] List<Text> m_VipLevels; [SerializeField] List<VipPrivilegeTitleBehaviour> m_VipPrivilegeTitles; [SerializeField] List<VipPrivilegeBehaviour> m_VipPrivileges; [SerializeField] Button m_Close; VipModel model { get { return ModelCenter.Instance.GetModel<VipModel>(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_Close.AddListener(CloseClick); } protected override void OnPreOpen() { } protected override void OnActived() { base.OnActived(); CreateVipElements((int)model.vipMaxLv); var configs = VipPrivilegeConfig.GetValues(); CreatePrivilegeElements(configs.Count); m_ScrollGroup.Initialize(); Display(); } protected override void OnAfterOpen() { } protected override void OnPreClose() { } protected override void OnAfterClose() { } #endregion void Display() { var configs = VipPrivilegeInfoConfig.GetValues(); for (int i = 0; i < m_VipPrivilegeTitles.Count; i++) { m_VipPrivilegeTitles[i].gameObject.SetActive(i < configs.Count); if (i < configs.Count) { m_VipPrivilegeTitles[i].Display(configs[i].name, i % 2 == 1); } } for (int i = 0; i < m_VipPrivileges.Count; i++) { m_VipPrivileges[i].gameObject.SetActive(i < configs.Count); if (i < configs.Count) { m_VipPrivileges[i].Display(configs[i].id, i % 2 == 1); } } for (int i = 0; i < m_VipLevels.Count; i++) { m_VipLevels[i].gameObject.SetActive(i < model.vipMaxLv); if (i < model.vipMaxLv) { m_VipLevels[i].text = "VIP" + (i + 1); } } } void CreateVipElements(int count) { for (int i = 0; i < m_VipPrivileges.Count; i++) { m_VipPrivileges[i].CreateElements(count); } if (count > m_VipLevels.Count) { var delta = count - m_VipLevels.Count; for (int i = 0; i < delta; i++) { var go = GameObject.Instantiate(m_VipLevels[0]); go.transform.SetParent(m_ContainerVip); var instance = go.GetComponent<Text>(); m_VipLevels.Add(instance); } } } void CreatePrivilegeElements(int count) { if (count > m_VipPrivilegeTitles.Count) { var delta = count - m_VipPrivilegeTitles.Count; for (int i = 0; i < delta; i++) { var go = GameObject.Instantiate(m_VipPrivilegeTitles[0]); go.transform.SetParent(m_ContainerPrivilegeTitles); go.transform.localScale = Vector3.one; var instance = go.GetComponent<VipPrivilegeTitleBehaviour>(); m_VipPrivilegeTitles.Add(instance); } } if (count > m_VipPrivileges.Count) { var delta = count - m_VipPrivileges.Count; for (int i = 0; i < delta; i++) { var go = GameObject.Instantiate(m_VipPrivileges[0]); go.transform.SetParent(m_ContainerPrivileges); go.transform.localScale = Vector3.one; var instance = go.GetComponent<VipPrivilegeBehaviour>(); m_VipPrivileges.Add(instance); } } } } } System/Vip/VipPrivilegeInfoWin.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: efc8e4b10cd5b144998862c29ba3e887 timeCreated: 1559802425 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/Vip/VipPrivilegeTitleBehaviour.cs
New file @@ -0,0 +1,20 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class VipPrivilegeTitleBehaviour : MonoBehaviour { [SerializeField] Text m_Title; [SerializeField] Image m_Bottom; public void Display(string label,bool bottom) { m_Title.text = label; m_Bottom.gameObject.SetActive(bottom); } } } System/Vip/VipPrivilegeTitleBehaviour.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: 8e82b7bd18dd63c44bc22d2c4a4bebba timeCreated: 1559812931 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/Vip/VipPrivilegeWidget.cs
New file @@ -0,0 +1,70 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class VipPrivilegeWidget : MonoBehaviour { [SerializeField] Image m_Symbol; [SerializeField] Image m_NullSymbol; [SerializeField] Text m_Description; public void Display(int id, int level) { var config = VipPrivilegeInfoConfig.Get(id); var value = VipPrivilegeInfoConfig.GetPrivilegeData(id, level); var label = VipPrivilegeInfoConfig.GetPrivilegeLabel(id, level); m_Symbol.gameObject.SetActive(false); m_NullSymbol.gameObject.SetActive(false); m_Description.gameObject.SetActive(config.displayType > 1); switch (config.displayType) { case 2: if (!string.IsNullOrEmpty(label)) { m_Description.text = string.Format(label, value); } else { m_Description.text = value.ToString(); } break; case 3: if (!string.IsNullOrEmpty(label)) { m_Description.text = string.Format(label, value / 100); } else { m_Description.text = (value / 100).ToString(); } break; case 4: m_Description.text = label; break; case 5: m_NullSymbol.gameObject.SetActive(value == 0); m_Description.gameObject.SetActive(value > 0); if (value > 0) { if (!string.IsNullOrEmpty(label)) { m_Description.text = string.Format(label, value); } else { m_Description.text = value.ToString(); } } break; case 1: default: m_Symbol.gameObject.SetActive(value > 0); m_NullSymbol.gameObject.SetActive(value == 0); break; } } } } System/Vip/VipPrivilegeWidget.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: d1879416c67d6d44e9dc2befeb0ccfd9 timeCreated: 1559804552 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/Vip/VipWin.cs
@@ -448,8 +448,7 @@ private void ViewPrivilege() { VipPrivilegeWin.selectVipLevel = model.presentSelectVip; WindowCenter.Instance.Open<VipPrivilegeWin>(); WindowCenter.Instance.Open<VipPrivilegeInfoWin>(); } } } UI/Common/ScrollRectGroup.cs
New file @@ -0,0 +1,149 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; public class ScrollRectGroup : MonoBehaviour, IInitializePotentialDragHandler, IBeginDragHandler, IEndDragHandler, IDragHandler { [SerializeField] ScrollRect[] m_ScrollRects; [SerializeField] float m_Offset = 100f; Dictionary<Direction, ScrollRect> scrollRects = new Dictionary<Direction, ScrollRect>(); Direction m_Direction = Direction.None; Direction direction { get { return m_Direction; } set { if (value != m_Direction) { m_Direction = value; scrollRects[Direction.Horizontal].horizontal = direction == Direction.Horizontal || direction == Direction.Both; scrollRects[Direction.Vertical].vertical = direction == Direction.Vertical || direction == Direction.Both; scrollRects[Direction.Both].horizontal = direction == Direction.Horizontal || direction == Direction.Both; scrollRects[Direction.Both].vertical = direction == Direction.Vertical || direction == Direction.Both; } } } Vector2 m_StartPosition = Vector2.zero; private void Awake() { for (int i = 0; i < m_ScrollRects.Length; i++) { var scrollRect = m_ScrollRects[i]; if (scrollRect.horizontal && scrollRect.vertical) { scrollRects.Add(Direction.Both, scrollRect); } else if (scrollRect.horizontal) { scrollRects.Add(Direction.Horizontal, scrollRect); } else { scrollRects.Add(Direction.Vertical, scrollRect); } } Initialize(); } public void Initialize() { direction = Direction.Both; scrollRects[Direction.Both].horizontalNormalizedPosition = 0f; scrollRects[Direction.Both].verticalNormalizedPosition = 1f; scrollRects[Direction.Horizontal].horizontalNormalizedPosition = 0f; scrollRects[Direction.Vertical].verticalNormalizedPosition = 1f; } public void OnBeginDrag(PointerEventData eventData) { direction = Direction.Both; foreach (var scrollRect in m_ScrollRects) { scrollRect.OnBeginDrag(eventData); } m_StartPosition = eventData.position; } public void OnDrag(PointerEventData eventData) { var position = eventData.position; if (direction == Direction.Both) { var horizontal = Mathf.Abs(position.x - m_StartPosition.x) > m_Offset; var vertical = !horizontal && Mathf.Abs(position.y - m_StartPosition.y) > m_Offset; if (horizontal || vertical) { var _direction = horizontal ? Direction.Horizontal : Direction.Vertical; if (_direction != direction) { direction = _direction; foreach (var scrollRect in m_ScrollRects) { scrollRect.OnBeginDrag(eventData); } } } } if (direction != Direction.Both) { foreach (var scrollRect in m_ScrollRects) { scrollRect.OnDrag(eventData); } } } public void OnEndDrag(PointerEventData eventData) { foreach (var scrollRect in m_ScrollRects) { scrollRect.OnEndDrag(eventData); } } public void OnInitializePotentialDrag(PointerEventData eventData) { foreach (var scrollRect in m_ScrollRects) { scrollRect.OnInitializePotentialDrag(eventData); } } #if UNITY_EDITOR [ContextMenu("CloseRayAccepter")] void BatchCloseRayAccepter() { var componenst = transform.GetComponentsInChildren<Graphic>(true); for (int i = 0; i < componenst.Length; i++) { componenst[i].raycastTarget = false; } } #endif enum Direction { None, Horizontal, Vertical, Both, } } UI/Common/ScrollRectGroup.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: a6e59bf3eba4a5b469f728041f8f421e timeCreated: 1559791936 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Utility/ConfigInitiator.cs
@@ -293,7 +293,8 @@ normalTasks.Add(new ConfigInitTask("CollectNpcConfig", () => { CollectNpcConfig.Init(); }, () => { return CollectNpcConfig.inited; })); normalTasks.Add(new ConfigInitTask("TreasureChapterConfig", () => { TreasureChapterConfig.Init(); }, () => { return TreasureChapterConfig.inited; })); normalTasks.Add(new ConfigInitTask("TaskFeedbackConfig", () => { TaskFeedbackConfig.Init(); }, () => { return TaskFeedbackConfig.inited; })); normalTasks.Add(new ConfigInitTask("TaskFeedbackFuncConfig", () => { TaskFeedbackFuncConfig.Init(); }, () => { return TaskFeedbackFuncConfig.inited; })); normalTasks.Add(new ConfigInitTask("TaskFeedbackFuncConfig", () => { TaskFeedbackFuncConfig.Init(); }, () => { return TaskFeedbackFuncConfig.inited; })); normalTasks.Add(new ConfigInitTask("VipPrivilegeInfoConfig", () => { VipPrivilegeInfoConfig.Init(); }, () => { return VipPrivilegeInfoConfig.inited; })); } static List<ConfigInitTask> doingTasks = new List<ConfigInitTask>();