/// <summary>
        /// Sends a message from one entity to another
        /// </summary>
        /// <param name="senderID">The sender ID</param>
        /// <param name="recieverID">The reciever ID</param>
        /// <param name="delayTime">The delay time of the message in ticks</param>
        /// <param name="type">The message type</param>
        /// <param name="extraInfo">Extra info for the message</param>
        public void SendMessage(int senderID, int recieverID, double delayTime, MessageType type, object extraInfo)
        {
            Message      message;
            IMessageable entity;

            message = new Message(senderID, recieverID, type, delayTime, extraInfo);

            //If the message has no delay then call the delegate handler
            if (delayTime == 0)
            {
                //Test if the entity can handle the message
                entity = EntityManager.Instance[recieverID] as IMessageable;
                if (entity == null)
                {
                    return;
                }

                entity.HandleMessage(message);
            }

            //If the message was a delayed one, calculate its future time and put it in the message queue
            else
            {
                message.dispatchTime = System.DateTime.Now.Ticks + delayTime;
                messageQueue.Enqueue(message);
            }
        }
Esempio n. 2
0
        public static void Test()
        {
            UniquePriorityQueue <int> queue = new UniquePriorityQueue <int>();

            Assert.IsTrue(queue.Enqueue(2));
            Assert.IsTrue(queue.Enqueue(3));
            Assert.IsTrue(queue.Enqueue(0));
            Assert.IsTrue(queue.Enqueue(1));

            Assert.AreEqual(queue.Count, 4);
            Assert.AreEqual(queue.Dequeue(), 3);
            Assert.AreEqual(queue.Dequeue(), 2);
            Assert.AreEqual(queue.Dequeue(), 1);
            Assert.AreEqual(queue.Dequeue(), 0);
            Assert.AreEqual(queue.Count, 0);
        }
Esempio n. 3
0
        /// <summary>
        /// Sends a message from one entity to another
        /// </summary>
        /// <param name="senderID">The sender ID</param>
        /// <param name="recieverID">The reciever ID</param>
        /// <param name="delayTime">The delay time of the message in ticks</param>
        /// <param name="type">The message type</param>
        /// <param name="extraInfo">Extra info for the message</param>
        public void SendMessage(int senderID, int recieverID, double delayTime, MessageType type, object extraInfo)
        {
            Message message;

            message = new Message(senderID, recieverID, type, delayTime, extraInfo);

            //If the message has no delay then call the delegate handler
            if (delayTime == 0)
            {
                if (registeredEntities[type] == null)
                {
                    return;
                }

                if (registeredEntities[type][recieverID] == null)
                {
                    return;
                }

                registeredEntities[type][recieverID](message);
            }

            //If the messaged was a delayed one, calculate its future time and put it in the message queue
            else
            {
                message.dispatchTime = System.DateTime.Now.Ticks + delayTime;
                messageQueue.Enqueue(message);
            }
        }
Esempio n. 4
0
        public static bool Update <T>(this UniquePriorityQueue <T> upq, T item)
        {
            if (upq.Remove(item))
            {
                upq.Enqueue(item);
                return(true);
            }

            return(false);
        }