Example #1
0
 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);
     }
 }
Example #3
0
    //>-----------------------------------------------------------------------------

    //> 移除监听
    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();
    }
Example #4
0
		public GlobalEvent(int starSystemIndex, GlobalEventType @event, int eventValue, DateTime date)
		{
			StarSystemIndex = starSystemIndex;
			Event = @event;
			EventValue = eventValue;
			EventDate = date;
		}
Example #5
0
		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;
		}
Example #6
0
 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);
     }
 }
Example #7
0
    /// <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());
     }
 }
Example #10
0
    //>-----------------------------------------------------------------------------

    //> 派发消息(常规用法)
    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();
            }
        }
    }
Example #11
0
 /// <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);
     }
 }
Example #12
0
    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;
            }
        }
    }
Example #13
0
        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;
            }
        }
Example #14
0
    //>-----------------------------------------------------------------------------

    //> 监听消息
    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();
    }
Example #15
0
 /// <summary>
 /// 删除事件回调函数
 /// </summary>
 /// <param name="type">事件类型</param>
 /// <param name="handler">指定函数</param>
 public void RemoveHandler(GlobalEventHandler handler, GlobalEventType type)
 {
     _globalHandler[(int)type].Remove(handler);
 }
Example #16
0
    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();
    }
Example #17
0
 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();
     }
 }
Example #18
0
 public void UnBind(GlobalEventType evetnType)
 {
     GlobalEventSystem.UnBind(evetnType);
 }
Example #19
0
 public void UnBind(GlobalEventType evetnType, UnityAction action)
 {
     GlobalEventSystem.UnBind(evetnType, action);
 }
Example #20
0
 /// <summary>
 /// 清空指定类型的事件回调函数
 /// </summary>
 /// <param name="type"></param>
 public void ClearCallBack(GlobalEventType type)
 {
     _globalHandler[(int)type].Clear();
 }
Example #21
0
 public void Fire(GlobalEventType evetnType)
 {
     GlobalEventSystem.Fire(evetnType);
 }
Example #22
0
 public void EmitGlobalEvent(GlobalEventType eventType, object payload)
 {
     if (OnGlobalEvent != null)
         OnGlobalEvent(eventType, payload);
 }