/// <summary>Processes this instance.</summary> public override void Process() { Entity[] entities; QueueManager queueManager = QueuesManager[this.Id]; queueManager.AcquireLock(); { int count = queueManager.Queue.Count; if (count > queueManager.EntitiesToProcessEachFrame) { entities = new Entity[queueManager.EntitiesToProcessEachFrame]; for (int index = 0; index < queueManager.EntitiesToProcessEachFrame; ++index) { entities[index] = queueManager.Queue.Dequeue(); } } else { entities = queueManager.Queue.ToArray(); queueManager.Queue.Clear(); } } queueManager.ReleaseLock(); foreach (Entity item in entities) { this.Process(item); } }
/// <summary>Adds to queue.</summary> /// <param name="ent">The entity.</param> /// <param name="entitySystemType">Type of the entity system.</param> public static void AddToQueue(Entity ent, Type entitySystemType) { QueueManager queueManager = QueuesManager[entitySystemType]; queueManager.AcquireLock(); queueManager.Queue.Enqueue(ent); queueManager.ReleaseLock(); }
/// <summary>Sets the queue processing limit.</summary> /// <param name="limit">The limit.</param> /// <param name="entitySystemType">Type of the entity system.</param> public static void SetQueueProcessingLimit(int limit, Type entitySystemType) { QueueManager queueManager = QueuesManager[entitySystemType]; queueManager.AcquireLock(); queueManager.EntitiesToProcessEachFrame = limit; queueManager.ReleaseLock(); }
/// <summary>Queues the count.</summary> /// <param name="entitySystemType">Type of the entity system.</param> /// <returns>The number of queues.</returns> public static int QueueCount(Type entitySystemType) { QueueManager queueManager = QueuesManager[entitySystemType]; queueManager.AcquireLock(); int result = queueManager.Queue.Count; queueManager.ReleaseLock(); return(result); }
/// <summary>Gets the queue processing limit.</summary> /// <param name="entitySystemType">Type of the entity system.</param> /// <returns>The limit.</returns> public static int GetQueueProcessingLimit(Type entitySystemType) { QueueManager queueManager = QueuesManager[entitySystemType]; queueManager.AcquireLock(); int result = queueManager.EntitiesToProcessEachFrame; queueManager.ReleaseLock(); return(result); }