TGC Codebase Backup



Message queue system by Phaelax

20th May 2004 3:48
Summary

Similar style of message system seen on games like Unreal Tournament.



Description



Code
                                    ` This code was downloaded from The Game Creators
                                    ` It is reproduced here with full permission
                                    ` http://www.thegamecreators.com
                                    
                                    REM Message queue system
REM Coded by: Phaelax (phaelax@hotmail.com)
REM ---------------------------------------
set display mode 800,600,16
sync on
backdrop on

REM create array to hold messages
dim messageQueue$(0) as string
REM create array to hold the time the message was created
dim messageTimer(0) as integer
REM max number of messages allowed on screen at one time
GLOBAL _max_messages = 10

c = 0

do

   REM test for adding message to the queue
   if spacekey() and key = 0
      key = 1
      inc c
      addMessage("This is test number "+str$(c))
   endif

   if spacekey() = 0 then key = 0


   REM handle the queue
   handleMessages(0,400,4000)

   REM draw some line(show where text starts)
   ink rgb(255,255,255),0
   line 0,410,600,410


   sync
loop



REM Add a new message onto the queue
function addMessage(s$ as string)
   rem get current number of messages
   count = array count(messageQueue$(0))
   rem if queue is already full, delete oldest message
   rem to make room for the newer message
   if count = _max_messages
      removeMessage()
   endif
   rem add new message to queue
   add to queue messageQueue$(0)
   last = array count(messageQueue$(0))
   messageQueue$(last) = s$
   rem save the time the message was created
   add to queue messageTimer(0)
   messageTimer(last) = timer()
endfunction


REM Removes oldest message from the queue
function removeMessage()
   remove from queue messageQueue$(0)
   remove from queue messageTimer(0)
endfunction


REM Called within the main loop. Handles displaying and updating
REM the message queue
REM x, y is position of newest message, with older message displayed above
REM delay is how long in milliseconds to display a message
function handleMessages(x as integer, y as integer, delay as integer)
   rem number of messages
   count = array count(messageQueue$(0))
   rem
   offset = y - count*10
   ink rgb(255,0,0), 0
   rem display messages, newest on bottom, oldest at top
   for i = 1 to count
      text x,offset+i*10,messageQueue$(i)
   next i

   rem check how long message has been displayed
   rem remove message from queue if time is up
   for i = 1 to count
      if messageTimer(i) + delay < timer()
         removeMessage()
         dec count
         dec i
      endif
   next i
endfunction