Exemple #1
0
    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");
        }
    }
Exemple #2
0
        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());
 }
Exemple #4
0
    //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();
         }
     }
 }
Exemple #7
0
        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());
        }
Exemple #9
0
    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;
        }
    }
Exemple #10
0
        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;
                }
            }
        }
Exemple #12
0
    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;
        }
    }
Exemple #13
0
    //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);
        }
Exemple #17
0
 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);
        }
    }
Exemple #19
0
 /// <summary>
 /// 派发事件,这是线程安全的
 /// </summary>
 /// <param name="sender">事件发送者,一般填this即可</param>
 /// <param name="gameEventBase"></param>
 public void Dispatch(object sender, GameEventBase gameEventBase)
 {
     m_EventManager.Dispatch(sender, gameEventBase);
 }