}
void Local_Notification_Queue_Run(MSG net_type, entity notif)
-{
+{
switch (net_type)
{
case MSG_ANNCE:
}
void Local_Notification_Queue_Add(MSG net_type, entity notif, float queue_time)
-{
+{
+ // Guess length if required
+ if(queue_time == 0)
+ queue_time = soundlength(AnnouncerFilename(notif.nent_snd));
+
if(queue_time == -1 || time > notif_queue_next_time) {
// Run immediately
Local_Notification_Queue_Run(net_type, notif);
- if(queue_time >= 0)
- notif_queue_next_time = time + (queue_time == 0 ? soundlength(AnnouncerFilename(notif.nent_snd)) : queue_time);
+ notif_queue_next_time = time + queue_time;
} else {
// Put in queue
if(notif_queue_length >= NOTIF_QUEUE_MAX) return;
-
+
notif_queue_type[notif_queue_length] = net_type;
notif_queue_entity[notif_queue_length] = notif;
notif_queue_time[notif_queue_length] = notif_queue_next_time;
-
+
notif_queue_next_time += queue_time;
++notif_queue_length;
}
void Local_Notification_Queue_Process()
{
- if(!notif_queue_length)
+ if(!notif_queue_length || notif_queue_time[0] > time)
return;
- int j;
- if(notif_queue_time[0] <= time) {
- Local_Notification_Queue_Run(notif_queue_type[0], notif_queue_entity[0]);
-
- // Shift queue to the left
- for (j = 0; j < notif_queue_length - 1; j++) {
- notif_queue_type[j] = notif_queue_type[j+1];
- notif_queue_entity[j] = notif_queue_entity[j+1];
- notif_queue_time[j] = notif_queue_time[j+1];
- }
-
- --notif_queue_length;
+ Local_Notification_Queue_Run(notif_queue_type[0], notif_queue_entity[0]);
+
+ // Shift queue to the left
+ --notif_queue_length;
+ for (int j = 0; j < notif_queue_length; ++j) {
+ notif_queue_type[j] = notif_queue_type[j+1];
+ notif_queue_entity[j] = notif_queue_entity[j+1];
+ notif_queue_time[j] = notif_queue_time[j+1];
}
}