/// <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); } }
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); }
/// <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); } }
public static bool Update <T>(this UniquePriorityQueue <T> upq, T item) { if (upq.Remove(item)) { upq.Enqueue(item); return(true); } return(false); }