コード例 #1
0
        /// <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);
            }
        }
コード例 #2
0
        /// <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();
        }
コード例 #3
0
        /// <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();
        }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
        /// <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);
        }