Exemplo n.º 1
0
    void addEventToQueue(GIIEvent e, int cmdLevel)
    {
        Queue <GIIEvent> q = null;

        if (_pendingCommandEvents.Count < cmdLevel + 1)
        {
            // 扩容
            for (int i = _pendingCommandEvents.Count; i < cmdLevel + 1; i++)
            {
                _pendingCommandEvents.Add(new Queue <GIIEvent> ());
            }
        }

        q = _pendingCommandEvents [cmdLevel];
        q.Enqueue(e);
    }
Exemplo n.º 2
0
    // 立即执行指定命令
    public void ExecuteCommand(GIIEvent command)
    {
        lock (_commandLock)
        {
            if (_allCommands.ContainsKey(command.Name))
            {
                var handler = _allCommands [command.Name];
                if (handler != null)
                {
                    var cmd = handler(command);


                    if (!cmd.NeedsClosure())
                    {
//						// 立即执行,并且结束 !!(所以对于 MacroCommand,如果有一个操作需要等待,则整个操作都不立即执行)
//						cmd.ExecuteInCommandCenter(this);
//
//						// 处理由该Command产生的消息
//						sendPendingEvents (_inProcessingCommands + 1);

                        processCommand(cmd);
                    }
                    else
                    {
                        // 延后执行
                        _pendingCommands.Push(cmd);
                    }
                }
            }
            else
            {
                // not registered
                Debug.LogWarningFormat("Command [{0}] has no handler", command.Name);
            }

            runPendingCommands();
        }
    }
Exemplo n.º 3
0
 public EventPair(GIIEvent e, int l)
 {
     _Event        = e;
     _CommandLevel = l;
 }