Exemple #1
0
    /// <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);
        }
Exemple #5
0
    /// <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);
        }
    }
Exemple #6
0
    /// <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);
        }
    }
Exemple #7
0
    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);
        }
    }
Exemple #8
0
    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);
    }
Exemple #9
0
 /// <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));
 }