Page 1 of 1

Guarantee an event listener to be called before other listeners of the same event?

Posted: Thu Jul 02, 2015 1:12 pm
by Mahi
How would I ensure that my player_spawn event listener gets called before others?
I'm trying to reset every player's gravity to 1.0 whenever they spawn, and I want to make sure it happens before other player_spawn functions modify the gravity again.

Here's an easy example code of what I have:

Syntax: Select all

# ../plugins/foo/bar.py
@Event
def player_spawn(game_event):
player = PlayerEntity(index_from_userid(game_event.get_int('userid')))
player.gravity = 1.0

# ../plugins/foo/foo.py
@Event
def player_spawn(game_event):
player = PlayerEntity(index_from_userid(game_event.get_int('userid')))
player.gravity -= 0.5
and I need to make sure that player's gravity gets reset in bar.py before it's reduced by 0.5 in foo.py

Posted: Thu Jul 02, 2015 1:22 pm
by stonedegg
You could do something like this:


Syntax: Select all

# ../plugins/foo/bar.py

grav = {}

@Event
def player_spawn(game_event):
userid = game_event.get_int('userid')
player = PlayerEntity(index_from_userid(userid))
player.gravity = 1.0
grav[userid] = 1



# ../plugins/foo/foo.py

from foo.bar import grav

@Event
def player_spawn(game_event):
userid = game_event.get_int('userid')
if userid in grav and grav[userid] == 1:
# delay this or something
player = PlayerEntity(index_from_userid(userid))
player.gravity -= 0.5
grav[userid] = 0



Also, i'm fairly sure that whichever plugin gets loaded first, will execute events first.

Posted: Thu Jul 02, 2015 1:25 pm
by satoon101
The first one registered is the first one called. Just make sure your imports are set so that the one you want first gets imported first. Either that, or create a pre-event hook and change it there.