Why are you making events for draw, update start, collisions, etc? Seems like that would just make it more complicated.
Most of your events 'draw', 'end', 'begin', 'update' are states, so you could have a 'game_state' variable that you set as the current state. ( Allows you to branch code if you add a title screen
Then on collisions, I'm calling 'oncollide(other)' on both actors. So they both can do class-specific stuff and know who hit them.
# psuedo-code
class Actor():
def oncollide( self, other ):
# might be useful to know what with or where you where hit.
self.dead = True
def update(self,delta):
self.loc += self.vel *delta # ...
class Game():
def init(self): # do non-__init__ stuff
def loop(self):
"""main loop: events; update(); draw()"""
while not self.done:
for event in eventlist():
self.handle_event(event)
player.handle_event(event)
self.handle_keys()
self.update()
self.draw()
def update(self, delta):
"""physics / collisions"""
for u in self.unit_list[:]: # iterate on copy cause may delete some
u.move(delta)
if u.dead:
self.unit_list.remove( u )
continue
# brute force collision
for other in self.unit_list:
if colliderect( u, other):
a.oncollide(other)
other.oncollide( a )
def draw(self):
draw_it()
for unit in self.unit_list: unit.draw()
display.flip()
def handle_event(self, event):
"""Game()'s handling of events.
events also get copied to anyone else that is 'registered', ie: player.
ATM all types are sent and he just ignores what he doesn't want"""
if key == ESC: self.done = True
def handle_keys(self): # if you need non event input
--
Jake