"J. A. Aczel" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] | Hello all. I think I should explain my problem in detail, so everyone | understands what I'm trying to do and why. There may be a better | approach to the whole problem then I am using. | | I am working on a game, with most of my AI code & such divided up into | generator functions (really coroutines that don't take any input) | stored in a dictionary called Director.tasks, and handled by a simple | cooperative multitasking engine. The dictionary key is the generator | object to be advanced, and the value is the frame number at which it | should next be executed. The generator objects yield the delay before | their next execution. | | def realtick(self): | Director.frame += 1 | for task in Director.tasks.items(): | if task[1] <= Director.frame: | try: | result = task[0].next() | if result == -1: | Director.tasks.pop(task[0]) | else: | Director.tasks[task[0]] = Director.frame + result | except: | Director.tasks.pop(task[0]) | | Why did I use a dictionary? Originally I had a list of lists, but I | thought converting it to a dictionary would make removing tasks from | the queue easier, the main difficulty I'm having. But it didn't, | because I can't identify the
The standard way of storing multiple tasks for future execution at a varietyu of times is a priority queue. Python's heap class (module) is one way to implement such. | Due to the framework I'm using, I think (or possibly just the Python | language?) in-game objects aren't actually destroyed when they're | removed from the game world. Thus, when an enemy or something with | associated tasks 'dies', the tasks merrily continue executing... and | the game will have a bunch of enemies who no longer have sprites, | movement abilities or collision checks, but otherwise are none the | worse for wear for having been destroyed. It's a big mess. So I need a | way to remove all tasks associated with a game object from the queue, | upon the object's 'destruction'. I suspect you need to keep a list of tasks associated with a creature with each creature. When creature dies, remove them from the queue or keep a set of dead tasks that tasks removed from the queue are checked against before being executed. Good luck. tjr -- http://mail.python.org/mailman/listinfo/python-list