Python Event Timing, send stuff to the future!!

Post your own tutorials, guides and demos.

Post » Thu Nov 22, 2012 3:08 pm

class EventTimer:
     iClock = 0 #incremented each frame
     Events = [] #[iTime, cCodeToExec]

     def AddEvent(self, iTime, cCodeToExec): #keep it neat, add events with this function

     def CallEvents(self): #run once each frame
          for n in range(0, (len(self.Events))):
                    if self.Events[n][0] <= self.iClock:
                         text1.text = self.Events[n][1] #i suggest trying it first to make messages not events
                         #exec self.Events[n][1] #Now this bit is YOUR job xD, exec can run strings as code
                         del self.Events[n]
               except:#when the del is called it reduces the list size, causing an exception, another thing is certain events can be missed until the next frame because of this

Events = EventTimer() #create a class, keep it neat!

Events.AddEvent(200, "Hello") #here some examples, note this is just next, you could call functions in here and run with the exec
Events.AddEvent(400, "There")
Events.AddEvent(600, "Good")
Events.AddEvent(800, "Sir")

#In your game loop, I suggest every frame calling this

Events.iClock += 1 #increment the clock

Hello, my first "tutorial", I hope you enjoy this little demo of how one would go about causing things to happen in the future in Python. Shock horror you may have added "import time" and found it freezes the game! What you need is an eventing system. Released under the do what the frak you like license.

Now it's presented as a text messaging system because exec is a troublesome command, it's really up to you if you opt for this or some other solution. Me personally this is my first dynamically typed language so exec it makes me a bit uneasy but I am starting to see how epic it can be for scripting a game.

A few words about the exception, the list shortens with the del command WHILE we are still in the for loop, now this is a little bit of bad practise but I code this way as it's more efficient. You may need to bear in mind some events could be missed on a cycle, they will get called next frame (notice the greater or equal than comparison)...I decided this was the best way for my stuff, something to ponder
Posts: 31
Reputation: 562

Return to Your tutorials & example files

Who is online

Users browsing this forum: No registered users and 0 guests