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); }
// 立即执行指定命令 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(); } }
public EventPair(GIIEvent e, int l) { _Event = e; _CommandLevel = l; }