public GameObject Spawn(T key) { if (pool.ContainsKey(key)) { List <GameObject> list = pool[key]; if (list.Count == 0) { return(this.CreateFunc(key)); } GameObject obj = list[0]; list.RemoveAt(0); obj.transform.parent = null; return(obj); } return(this.CreateFunc(key)); }
public void RegisterLogicFunc(MethodInfo method, int CMD, string MethodName, object attvalue, ScriptTarget target) { if (ScriptDic.ContainsKey(CMD)) { SimpleDictionary <int, ScriptPkg> dic = this.ScriptDic[CMD]; if (dic.ContainsKey((int)target)) { LogMgr.LogErrorFormat("重复注册逻辑函数 {0}", CMD); } else { if (target == ScriptTarget.Sharp) { dic[(int)target] = ScriptPkg.CreateSharp(method, MethodName); } else if (target == ScriptTarget.Lua) { #if TOLUA dic[(int)target] = ScriptPkg.CreateLua(attvalue); #else throw new FrameWorkException("Missing Lua"); #endif } } } else { SimpleDictionary <int, ScriptPkg> dic = new SimpleDictionary <int, ScriptPkg>(); if (target == ScriptTarget.Sharp) { dic[(int)target] = ScriptPkg.CreateSharp(method, MethodName); } else if (target == ScriptTarget.Lua) { #if TOLUA dic[(int)target] = ScriptPkg.CreateLua(attvalue); #else LogMgr.LogError("Missing Lua"); #endif } this.ScriptDic.Add(CMD, dic); } }
public void AddLayout(AbstractLayout lay) { if (!layouts.ContainsKey(lay.LayoutName)) { layouts.Add(lay.LayoutName, lay); } else { LogMgr.LogErrorFormat("{0} 为已经注册的Layout", lay.LayoutName); } }
void TryAdd(string key, BundlePkgInfo pkg) { if (caches.ContainsKey(key)) { LogMgr.LogErrorFormat("{0} will replace {1}", pkg.BundleName, caches[key].BundleName); } else { caches[key] = pkg; } }
/// <summary> /// 强制移除 /// </summary> /// <param name="CMD">CM.</param> /// <param name="target">Target.</param> public void UnRegisterLogicFunc(int CMD, ScriptTarget target = ScriptTarget.Sharp) { if (this.ScriptDic.ContainsKey(CMD)) { SimpleDictionary <int, ScriptPkg> dic = this.ScriptDic[CMD]; if (dic.ContainsKey((int)target)) { dic[(int)target].Dispose(); dic.RemoveKey((int)target); } } }
private void DispathCommand() { try { while (CommandQueue != null && CommandQueue.Count > 0) { ScriptCommand cmd = CommandQueue.Dequeue(); if (cmd.isDone) { continue; } #if DYNAMIC_REGISTER if (cmd.HasInitParams) { if (FrameWorkConfig.Open_DEBUG) { LogMgr.Log("will make a loader for script"); } Registernew(cmd); } #endif if (this.ScriptDic.ContainsKey(cmd.CMD)) { SimpleDictionary <int, ScriptPkg> dic = this.ScriptDic[cmd.CMD]; int target = (int)cmd.target; //double check if (dic.ContainsKey(target)) { if (cmd.HasCallParams) { cmd.ReturnParams = dic[target].Invoke(cmd.CallParams); } else { cmd.ReturnParams = dic[target].Invoke(null); } if (cmd.ReturnParams == null) { cmd.Release(true); } else { cmd.Release(false); } } else { if (cmd.target == ScriptTarget.Unknown) { List <int> keys = dic.Keys; List <ScriptPkg> values = dic.Values; for (int i = 0; i < keys.Count; ++i) { if (keys[i] != target) { //LogMgr.LogFormat("it will invoke {0} pkg cmd:{1}", (ScriptTarget)keys[i],cmd.CMD); if (cmd.HasCallParams) { cmd.ReturnParams = values[i].Invoke(cmd.CallParams); } else { cmd.ReturnParams = values[i].Invoke(null); } if (cmd.ReturnParams == null) { cmd.Release(true); } else { cmd.Release(false); } break; } } ListPool.TryDespawn(keys); ListPool.TryDespawn(values); } } } else { LogMgr.LogErrorFormat("命令消息错误:{0},未发现匹配的函数", cmd.CMD); } } } catch (FrameWorkException ex) { LogMgr.LogException(ex); ex.RaiseExcption(); } catch (Exception ex) { LogMgr.LogException(ex); } }