public void TriggerEvent(GameEventBase e) { EventDelegate del; if (delegates.TryGetValue(e.GetType(), out del)) { del.Invoke(e); // remove listeners which should only be called once foreach (EventDelegate k in delegates[e.GetType()].GetInvocationList()) { if (onceLookups.ContainsKey(k)) { delegates[e.GetType()] -= k; if (delegates[e.GetType()] == null) { delegates.Remove(e.GetType()); } delegateLookup.Remove(onceLookups[k]); onceLookups.Remove(k); } } } else { Debug.LogWarning("Event: " + e.GetType() + " has no listeners"); } }
private void PrintLog(Game gamest, Plan curPlan) {//输出日志: String strLog = ""; strLog = strLog + GameSystem.GetDate(gamest.GameChapter.StMonth, gamest.GameChapter.StDay + gamest.CurTurn - 1) + ":\r\n"; //按照计划依次执行 for (int i = 0; i < 3; i++) { Course curCourse = curPlan.PlanList[i]; GameEventBase curEvent = curPlan.EventList[i]; strLog += GenSingleLog(i, curCourse, curEvent) + "\r\n"; } if (curPlan.PlanList[3].CourseName != "空") { strLog += GenSingleLog(3, curPlan.PlanList[3], curPlan.EventList[3]) + "\r\n"; if (gamest.IfNight == 2) { strLog += "实在是太困了,所以明天上午可能得好好休息了(明天上午将无法安排计划)。\r\n"; } } if (curGame.Buff == -2) { string curLog = $"过高的压力值使我产生了疲劳。(所有学科的能力值都会有所降低。)\r\n"; strLog += curLog; } if (curGame.Buff == 2) { string curLog = $"较低的压力值使我精神抖擞。(所有学科的能力值都会有所提高。)\r\n"; strLog += curLog; } SlowPrint(strLog); }
/// <summary> /// Get all active and enable listener which subscribe to the target event in currently active scene /// </summary> /// <param name="target">target game event</param> /// <param name="listeners">the list to which the found listeners will be added</param> public static void GetAssosiatedListenersInScene(GameEventBase target, List <Listener> listeners) { listeners.AddRange(GameObject.FindObjectsOfType <Listener>() .Where(listener => listener.GetGameEvents() ?.Where(gameEvent => gameEvent == target). ToArray().Length > 0). ToList()); }
//Inserts the event into the current queue. public bool QueueEvent(GameEventBase evt) { if (!delegates.ContainsKey(evt.GetType())) { //Debug.LogWarning("EventManager: QueueEvent failed due to no listeners for event: " + evt.GetType()); return(false); } m_eventQueue.Enqueue(evt); return(true); }
public void OnEventRaised <T0, T1, T2, T3>(GameEventBase e, T0 arg0, T1 arg1, T2 arg2, T3 arg3) { for (int i = 0; i < eventResponsePairs.Length; i++) { EventResponsePair eventResponsePair = eventResponsePairs[i]; if (e.Equals(eventResponsePair.Event)) { eventResponsePair.LogToConsoleIfEnabled(this); eventResponsePair.Invoke(arg0, arg1, arg2, arg3); } } }
/// <summary> /// Invokes listeners if their event's name matches the name of the passed argument. /// </summary> /// <param name="e">Target event.</param> public void OnEventRaised(GameEventBase e) { for (int i = 0; i < eventResponsePairs.Length; i++) { EventResponsePair eventResponsePair = eventResponsePairs[i]; if (e.Equals(eventResponsePair.Event)) { eventResponsePair.LogToConsoleIfEnabled(this); eventResponsePair.Invoke(); } } }
private static SodaEventBase GetOnRaiseWithParameterEvent(GameEventBase gameEventBaseTarget) { var flags = System.Reflection.BindingFlags.GetField | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public; var field = gameEventBaseTarget.GetType().GetField("onRaiseWithParameter", flags); if (field != null) { return((SodaEventBase)field.GetValue(gameEventBaseTarget)); } return(null); }
public static GameEventBase GetEvent() {//随机生成一个事件。 int code = random.Next(EventWeightSum); foreach (var type in Eventtypes) { GameEventBase baseevent = (GameEventBase)Activator.CreateInstance(type); if (baseevent.Weight > code) { return(baseevent); } code -= baseevent.Weight; } return(new GameEventBase()); }
private void OnZoom(GameEventBase gameEventBase) { InputZoomGameEvent inputZoomGameEvent = (InputZoomGameEvent)gameEventBase; switch (inputZoomGameEvent.ZoomType) { case ZoomType.In: GameEntry.Camera.SetCameraZoom(0); break; case ZoomType.Out: GameEntry.Camera.SetCameraZoom(1); break; } }
private string GenSingleLog(int period, Course course, GameEventBase gameEvent) { string rtn = ""; if (period != 3) { rtn += $"今天{GameSystem.TimeName[period]},"; } else { rtn += "感觉还是需要努把力,所以今天通宵学习,"; } string eventLog = gameEvent.GetLog(course, curGame); rtn += eventLog; return(rtn); }
public static void ReadEvent() {//读取所有事件 var EventList = from t in Assembly.GetCallingAssembly().GetTypes() where t.BaseType != null && t.BaseType == typeof(GameEventBase) select t; Eventtypes = new List <Type>(); foreach (var type in EventList) { GameEventBase baseevent = (GameEventBase)Activator.CreateInstance(type); Eventtypes.Add(type); EventWeightSum += baseevent.Weight; if (baseevent.Load() == -1) { ErrorCode = 1; return; } } }
private void OnMove(GameEventBase gameEventBase) { InputMoveGameEvent inputMoveGameEvent = (InputMoveGameEvent)gameEventBase; switch (inputMoveGameEvent.MoveDir) { case MoveDir.Left: GameEntry.Camera.SetCameraRotate(0, inputMoveGameEvent.Speed); break; case MoveDir.Right: GameEntry.Camera.SetCameraRotate(1, inputMoveGameEvent.Speed); break; case MoveDir.Up: GameEntry.Camera.SetCameraUpAndDown(1); break; case MoveDir.Down: GameEntry.Camera.SetCameraUpAndDown(0); break; } }
//Every update cycle the queue is processed, if the queue processing is limited, //a maximum processing time per update can be set after which the events will have //to be processed next update loop. void Update() { float timer = 0.0f; while (m_eventQueue.Count > 0) { if (LimitQueueProcesing) { if (timer > QueueProcessTime) { return; } } GameEventBase evt = m_eventQueue.Dequeue() as GameEventBase; TriggerEvent(evt); if (LimitQueueProcesing) { timer += Time.deltaTime; } } }
public void Dispose() { this._callback = null; this._evnt.Unregister(this); this._evnt = null; }
private GameEventListenerWrapper(GameEventBase <T> evnt, System.Action <T> callback) { this._callback = callback; this._evnt = evnt; evnt.Register(this); }
public static GameEventListenerWrapper <T> Create(GameEventBase <T> evnt, System.Action <T> callback) { var instance = new GameEventListenerWrapper <T>(evnt, callback); return(instance); }
private void OnPointClick(GameEventBase gameEventBase) { UnityEngine.Debug.Log("点击"); }
private static void PrintLog(GameEventListener eventListener, UnityEventBase unityEvent, GameEventBase gameEvent) { int persistentEventCount = unityEvent.GetPersistentEventCount(); if (persistentEventCount == 0) { Debug.Log(string.Format("<i>{0}</i> event was raised, but no persistent listeners were found on <b>{1}</b>", gameEvent.name, eventListener.gameObject.name)); } else { Object persistentTarget = unityEvent.GetPersistentTarget(0); string invokedOn = persistentTarget ? persistentTarget.name : null; string handlerMethod = unityEvent.GetPersistentMethodName(0); string eventName = gameEvent.name; PrintLog(invokedOn, handlerMethod, eventName, eventListener); } }
/// <summary> /// 派发事件,这是线程安全的 /// </summary> /// <param name="sender">事件发送者,一般填this即可</param> /// <param name="gameEventBase"></param> public void Dispatch(object sender, GameEventBase gameEventBase) { m_EventManager.Dispatch(sender, gameEventBase); }