internal void RequestCycle(IWiredCycleable handler) { lock (requestingUpdates.SyncRoot) { requestingUpdates.Enqueue(handler); } }
//public int Delay; public WiredCycle(IWiredCycleable pIWiredCycleable, RoomUser pUser, Item pItem, int pDelay) { this.IWiredCycleable = pIWiredCycleable; this.User = pUser; this.Item = pItem; this.Cycle = 0; //this.Delay = pDelay; }
internal void OnCycle() { if (doCleanup) { foreach (List <RoomItem> list in actionStacks.Values) { foreach (RoomItem item in list) { if (item.wiredCondition != null) { item.wiredCondition.Dispose(); item.wiredCondition = null; } if (item.wiredHandler != null) { item.wiredHandler.Dispose(); item.wiredHandler = null; } } } actionStacks.Clear(); actionItems.Clear(); requestedTriggers.Clear(); requestingUpdates.Clear(); doCleanup = false; return; } if (requestingUpdates.Count > 0) { List <IWiredCycleable> toAdd = new List <IWiredCycleable>(); lock (requestingUpdates.SyncRoot) { while (requestingUpdates.Count > 0) { IWiredCycleable handler = (IWiredCycleable)requestingUpdates.Dequeue(); if (handler.Disposed()) { continue; } if (handler.OnCycle()) { toAdd.Add(handler); } } foreach (IWiredCycleable cycle in toAdd) { requestingUpdates.Enqueue(cycle); } } } conditionHandler.OnCycle(); }