/// <summary> /// 添加缓存组件 /// </summary> /// <param name="dataID">缓存的唯一id</param> /// <param name="lookup">缓存组件</param> public void AddLookup(string dataID, DataLookup lookup) { // //EB.Debug.LogLookup("<<添加_缓存组件_AddLookup:" + lookup.name + "___" + ((lookup.GetComponentsInChildren<UnityEngine.Renderer>(true).Length > 0) ? "带有渲染器" : "无")); // if (dataID == null || IsLookupRegistered(lookup, dataID)) { return; } if (!lookups.ContainsKey(dataID)) { lookups.Add(dataID, new List <DataLookup>()); } lookups [dataID].Add(lookup); foreach (string inlineDataID in GetDataIDInlineParts(dataID)) { AddLookup(inlineDataID, lookup); if (!inlineLookups.ContainsKey(inlineDataID)) { inlineLookups.Add(inlineDataID, new InlineLookupEntry() { Lookups = new List <DataLookup>() }); } inlineLookups[inlineDataID].Lookups.Add(lookup); } }
public bool ContainsData(string dataName) { if (!DataLookup.ContainsKey(dataName.ToLower())) { return(FileNameLookup.ContainsKey(dataName)); } return(true); }
public T GetData(string dataName) { T d; if (!DataLookup.TryGetValue(dataName.ToLower(), out d)) { return(FileNameLookup.TryGetValue(dataName, out d) ? d : null); } return(d); }
public TV GetData <TV>(string dataName) where TV : class, T { T d; if (!DataLookup.TryGetValue(dataName.ToLower(), out d)) { return(FileNameLookup.TryGetValue(dataName, out d) ? (TV)d : null); } return((TV)d); }
/// <summary> /// 更新缓存数据 /// </summary> /// <param name="dataID">数据的唯一id</param> /// <param name="incomingValue">刷新的数据对象</param> private void UpdateLookups(string dataID, object incomingValue) { //刷新的缓存数据一定要先存在 if (dataID != null && lookups.ContainsKey(dataID)) { //获取所有在激活状态及允许更新的缓存对象 IEnumerable <DataLookup> lookupsToUpdate = lookups[dataID].Where(arg => arg != null && arg.gameObject.activeInHierarchy && arg.AllowLookupUpdate); //foreach(DataLookup lookup in lookupsToUpdate) for (int i = 0; i < lookupsToUpdate.Count(); i++) { DataLookup lookup = lookupsToUpdate.ElementAt(i); if (lookup != null) { lookup.OnLookupUpdate(dataID, incomingValue); } } } if (dataID != null && inlineLookups.ContainsKey(dataID)) { string finalDataID; bool inlineFound = SearchDataByID <string>(dataID, out finalDataID); if (!inlineFound) { // todo } InlineLookupEntry inlineEntry = inlineLookups[dataID]; string previousCachedInlineValue = inlineEntry.CachedValue; if (!AreDataIDEqual(previousCachedInlineValue, finalDataID)) { inlineEntry.CachedValue = finalDataID; inlineLookups[dataID] = inlineEntry; foreach (DataLookup lookup in inlineEntry.Lookups.Where(arg => arg != null)) { if (lookup != null) { RemoveLookup(previousCachedInlineValue, lookup); AddLookup(finalDataID, lookup); } } } } //背包数据变更通知 if (dataID == "inventory") { GlobalUtils.CallStaticHotfix("Hotfix_LT.MessengerAdapter", "Data_InventoryChanged", incomingValue); } }
/// <summary> /// 移除缓存组件 /// </summary> /// <param name="dataID">移动的唯一id</param> /// <param name="lookup">缓存组件</param> public void RemoveLookup(string dataID, DataLookup lookup) { //EB.Debug.LogLookup(">>移除_缓存组件_RemoveLookup:" + lookup.name + "___" + ((lookup.GetComponentsInChildren<UnityEngine.Renderer>(true).Length > 0) ? "带有渲染器" : "无")); if (dataID == null || !IsLookupRegistered(lookup, dataID)) { return; } lookups [dataID].Remove(lookup); foreach (string inlineDataID in GetDataIDInlineParts(dataID)) { inlineLookups[inlineDataID].Lookups.Remove(lookup); } }
public void ClearLookup(DataLookup lookup) { // //EB.Debug.LogLookup("移除_缓存组件_ClearLookup_name:" + lookup.name); UnityEngine.Object.Destroy(lookup); foreach (List <DataLookup> lookupsList in lookups.Values) { lookupsList.Remove(lookup); } foreach (InlineLookupEntry entry in inlineLookups.Values) { entry.Lookups.Remove(lookup); } }
private void OnNPCFullPacket(NPCFullPacket packet) { var agentData = DataLookup.GetData <NPCAgentData>(packet.AgentID); var configData = DataLookup.GetData <NPCConfigData>(packet.ConfigID); if (agentData == null) { Debug.LogErrorFormat("Unable to spawn NPC as we can't find the agentData from id: {0}", packet.AgentID); return; } var go = GameObject.Instantiate(agentData.clientPrefab, packet.position.Get(), Quaternion.Euler(packet.rotation.Get())); if (configData != null) { var configurator = go.GetComponent <NPCConfigurator>(); if (configurator != null) { configurator.Configure(agentData, configData); } else { Debug.LogWarningFormat("Unable to find NPCConfigurator component on {0}", agentData.name); } } else { Debug.LogErrorFormat("Unable to find config data, id: {0} on {1}", packet.ConfigID, agentData.name); } var playerObj = go.GetComponent <ClientNPC>(); if (playerObj == null) { playerObj = go.AddComponent <ClientNPC>(); Debug.LogWarningFormat("Adding ClientNPC component to {0}", agentData.name); } playerObj.Init(client, packet.entityId); worldEntityManager.AddWorldEntity(playerObj); }
/// <summary> /// 判断是否注册过这个缓存组件 /// </summary> /// <param name="lookup">缓存组件</param> /// <param name="dataID">缓存的唯一id</param> /// <returns></returns> public bool IsLookupRegistered(DataLookup lookup, string dataID) { return(lookups.ContainsKey(dataID) && lookups[dataID].Contains(lookup)); }