public static void BroadcastEvent(GlobalEventType eventType) { if (_instance.GameManagerEvent != null) { _instance.GameManagerEvent(eventType); } }
/// <summary> /// 注销单个全局事件 /// </summary> /// <param name="type"></param> /// <param name="call"></param> public static void UnBind(GlobalEventType type, UnityAction call) { if (actionTree.ContainsKey(type.ToString())) { UnityAction tmpCall = actionTree[type.ToString()]; if (tmpCall != null) { try { tmpCall -= call; } catch (System.Exception e) { Debug.LogError(e.ToString()); } if (tmpCall == null) { actionTree.Remove(type.ToString()); } } } else { Debug.LogError("UnBind Error, no such call be bind == " + call.Method.Name); } }
//>----------------------------------------------------------------------------- //> 移除监听 public void RemoveListener(GlobalEventType eType, FuncCallback funcCB) { //ProfilerSample.BeginSample("RemoveListener"); List <EventListener> listenerList = null; if (!listenerMap.TryGetValue(eType, out listenerList)) { //ProfilerSample.EndSample(); return; } int idx = listenerList.FindIndex(x => x.funcCB == funcCB); if (idx >= 0) { EventListener listener = listenerList[idx]; if (null != listener) { listenerList.RemoveAt(idx); } if (listenerList.Count <= 0) { listenerMap.Remove(eType); } } //ProfilerSample.EndSample(); }
public GlobalEvent(int starSystemIndex, GlobalEventType @event, int eventValue, DateTime date) { StarSystemIndex = starSystemIndex; Event = @event; EventValue = eventValue; EventDate = date; }
public GlobalEvent(StarSystemModel starSystem, GlobalEventType @event, int eventValue, DateTime date) { StarSystemIndex = starSystem.Coords.Y * GameConfig.CurrentGalaxySizeX + starSystem.Coords.X; Event = @event; EventValue = eventValue; EventDate = date; }
public void Broadcast(GlobalEventType type, object obj) { Console.WriteLine($"Broadcast global event type {type}"); for (int i = _observers.Count - 1; i >= 0; --i) { _observers[i].callback(type, obj); } }
/// <summary> /// 执行指定类型的事件 /// </summary> /// <param name="type">事件类型</param> /// <param name="args">参数</param> public void SendEvent(GlobalEventType type, params object[] args) { var handlers = _globalHandler[(int)type].ToArray(); for (int i = 0; i < handlers.Length; i++) { var t = handlers[i]; t(type, args); } }
/// <summary> /// 注销某类全局事件 /// </summary> /// <param name="type"></param> public static void UnBind(GlobalEventType type) { if (actionTree.ContainsKey(type.ToString())) { UnityAction tmpCall = actionTree[type.ToString()]; tmpCall = null; actionTree.Remove(type.ToString()); } else { Debug.LogError("UnBind Error, no such type == " + type.ToString()); } }
/// <summary> /// 响应全局事件 /// </summary> /// <param name="type">全局事件类型</param> public static void Fire(GlobalEventType type) { if (actionTree.ContainsKey(type.ToString())) { if (actionTree[type.ToString()] != null) { actionTree[type.ToString()](); } } else { Debug.LogError("No Such Event == " + type.ToString()); } }
//>----------------------------------------------------------------------------- //> 派发消息(常规用法) public void Dispatch(GlobalEventType eType, params object[] data) { //1. 尝试使用TryGetValue,字典只会遍历一次 //2. 防止dispatch时候remove掉元素报错,可以从后往前遍历,所以监听方法的优先级要反过来排 List <EventListener> funcList; if (listenerMap.TryGetValue(eType, out funcList)) { int count = funcList.Count; for (int i = count - 1; i >= 0; i--) { //ProfilerSample.BeginSample(funcList[i].funcCB.Method.Name); funcList[i].funcCB(data); //ProfilerSample.EndSample(); } } }
/// <summary> /// 注册全局事件 /// </summary> /// <param name="type"></param> /// <param name="call"></param> public static void Bind(GlobalEventType type, UnityAction call) { if (actionTree.ContainsKey(type.ToString())) { if (actionTree[type.ToString()] == null) { actionTree[type.ToString()] = call; } else { actionTree[type.ToString()] += call; } } else { actionTree.Add(type.ToString(), call); } }
public void OnGlobalEvent(GlobalEventType type, object obj) { if (type == GlobalEventType.GameStateChange) { if (!(obj is Game.State)) { Console.WriteLine($"ERR - UI expected a Game.State event type"); return; } Game.State state = (Game.State)obj; switch (state) { case Game.State.Limbo: _gameMessage.Text = string.Empty; playerStatus.Hide(); break; case Game.State.Pregame: _gameMessage.Text = "Press fire to start"; playerStatus.Hide(); break; case Game.State.Gamplay: _gameMessage.Text = string.Empty; playerStatus.Show(); break; case Game.State.PostGame: _gameMessage.Text = "Level complete."; playerStatus.Hide(); break; case Game.State.GameOver: _gameMessage.Text = "Press fire to retry"; playerStatus.Hide(); break; } } }
public void OnGlobalEvent(GlobalEventType type, object obj) { switch (type) { case GlobalEventType.MapChange: _mapName = obj as string; // Clear any records of entities as they are about to be freed PurgeRegisters(); // Enter a 'no game rules' state. SetGameState(State.Limbo); // Remove all children from game root node for (int i = root.GetChildCount() - 1; i >= 0; --i) { root.GetChild(i).QueueFree(); } break; case GlobalEventType.PlayerDied: _main.cam.DetachFromCustomParent(); SetGameState(State.GameOver); break; } }
//>----------------------------------------------------------------------------- //> 监听消息 public void AddListener(GlobalEventType eType, FuncCallback funcCB, bool insertFirst = false) { if (GlobalEventType.None == eType) { return; } // ProfilerSample.BeginSample("AddListener"); EventListener newListener = new EventListener(funcCB); List <EventListener> listenerList; if (listenerMap.TryGetValue(eType, out listenerList)) { if (null != listenerList.Find(x => x.funcCB == funcCB)) { Debug.LogError("Already Contains Event:" + eType + ", Function:" + funcCB); return; } if (insertFirst) { listenerList.Insert(0, newListener); } else { listenerList.Add(newListener); } } else { listenerList = new List <EventListener>() { newListener }; listenerMap.Add(eType, listenerList); } //ProfilerSample.EndSample(); }
/// <summary> /// 删除事件回调函数 /// </summary> /// <param name="type">事件类型</param> /// <param name="handler">指定函数</param> public void RemoveHandler(GlobalEventHandler handler, GlobalEventType type) { _globalHandler[(int)type].Remove(handler); }
public void SetData(Hashtable ht) { this.eventType = (GlobalEventType)System.Enum.Parse(typeof(GlobalEventType), (string)ht["type"]); if(ht.ContainsKey("timeout")) { this.timeout = float.Parse((string)ht["timeout"]); } if(ht.ContainsKey("inpause")) { this.inPause = bool.Parse((string)ht["inpause"]); } int count = int.Parse((string)ht["prefabs"]); this.prefabName = new string[count]; this.prefab = new GameObject[count]; for(int i=0; i<count; i++) this.prefabName[i] = ""; count = int.Parse((string)ht["audioclips"]); this.audioName = new string[count]; this.audioClip = new AudioClip[count]; for(int i=0; i<count; i++) this.audioName[i] = ""; if(ht.ContainsKey(XMLHandler.NODES)) { ArrayList s = ht[XMLHandler.NODES] as ArrayList; foreach(Hashtable ht2 in s) { if(ht2[XMLHandler.NODE_NAME] as string == GlobalEvent.EVENTFILE) { this.eventFile = ht2[XMLHandler.CONTENT] as string; } else if(ht2[XMLHandler.NODE_NAME] as string == GlobalEvent.CONTROLTYPE) { int id = int.Parse((string)ht2["id"]); if(id < this.controlType.Length) this.controlType[id] = true; } else if(ht2[XMLHandler.NODE_NAME] as string == GlobalEvent.VARIABLES) { this.variables.SetData(ht2); } else if(ht2[XMLHandler.NODE_NAME] as string == GlobalEvent.PREFAB) { int id = int.Parse((string)ht2["id"]); if(id < this.prefabName.Length) { this.prefabName[id] = ht2[XMLHandler.CONTENT] as string; } } else if(ht2[XMLHandler.NODE_NAME] as string == GlobalEvent.AUDIOCLIP) { int id = int.Parse((string)ht2["id"]); if(id < this.audioName.Length) { this.audioName[id] = ht2[XMLHandler.CONTENT] as string; } } } } this.LoadEvent(); }
public StarSystemModel Get_RandomSystemForEvent(GlobalEventType @event) { var allSystemsNormal = Get_AllSystems().Where(a => a.CurrentEvent == GlobalEventType.Normal).ToArray(); switch (@event) { case GlobalEventType.AlienInvasion: return allSystemsNormal.Where(a => a.Name != StarSystems[ZFrontier.Player.PosY, ZFrontier.Player.PosX].Name).GetRandom(); case GlobalEventType.LevelUp : return allSystemsNormal.Where(a => a.TechLevel < GameConfig.TechLevelRange.Max).GetRandom(); case GlobalEventType.LevelDown : return allSystemsNormal.Where(a => a.TechLevel > GameConfig.TechLevelRange.Min).GetRandom(); case GlobalEventType.IllegalAdd : return allSystemsNormal.Where(a => a.IllegalGoods.Count < Enums.All_MerchandiseIllegal.Count).GetRandom(); case GlobalEventType.IllegalRemove: return allSystemsNormal.Where(a => a.IllegalGoods.Count > 0).GetRandom(); default: return allSystemsNormal.GetRandom(); } }
public void UnBind(GlobalEventType evetnType) { GlobalEventSystem.UnBind(evetnType); }
public void UnBind(GlobalEventType evetnType, UnityAction action) { GlobalEventSystem.UnBind(evetnType, action); }
/// <summary> /// 清空指定类型的事件回调函数 /// </summary> /// <param name="type"></param> public void ClearCallBack(GlobalEventType type) { _globalHandler[(int)type].Clear(); }
public void Fire(GlobalEventType evetnType) { GlobalEventSystem.Fire(evetnType); }
public void EmitGlobalEvent(GlobalEventType eventType, object payload) { if (OnGlobalEvent != null) OnGlobalEvent(eventType, payload); }