ItsMods
[Tutorial] Eventmanager - Printable Version

+- ItsMods (https://www.itsmods.com)
+-- Forum: Archive (https://www.itsmods.com/Forum-Archive.html)
+--- Forum: Archive (https://www.itsmods.com/Forum-Archive--64.html)
+--- Thread: [Tutorial] Eventmanager (/Thread-Tutorial-Eventmanager.html)

Pages: 1 2


Eventmanager - Justin - 08-28-2011

Got my idea from openwarfare, but made my own version. In my opinion does it make your code more clear and consisting of lesser code. Here's my version:
Code:
init() { level.event = []; level.event[ "connecting" ] = []; level.event[ "connected" ] = []; level.event[ "spawned" ] = []; level.event[ "death" ] = []; level.event[ "killed" ] = []; level.event[ "disconnected" ] = []; level.event[ "joined_team" ] = []; level.event[ "joined_spectators" ] = []; level.event[ "menu_response" ] = []; level.on = ::addEvent; [[level.on]]( "connected", ::onPlayerSpawned ); [[level.on]]( "connected", ::onPlayerDeath ); [[level.on]]( "connected", ::onPlayerKilled ); [[level.on]]( "connected", ::onPlayerSpawned ); [[level.on]]( "connected", ::onPlayerJoinedSpectators ); [[level.on]]( "connected", ::onPlayerJoinedTeam ); [[level.on]]( "connected", ::onPlayerMenuResponse ); thread onPlayerConnecting(); thread onPlayerConnected(); } addEvent( event, process ) { if( !isdefined( level.event[ event ] ) || !isdefined( process )) return; level.event[ event ][ level.event[ event ].size ] = process; } onPlayerConnecting() { while(1) { level waittill( "connecting", player ); for( i=0; i<level.event[ "connecting" ].size; i++ ) player thread [[level.event[ "connecting" ][i]]](); } } onPlayerConnected() { while(1) { level waittill( "connected", player ); for( i=0; i<level.event[ "connected" ].size; i++ ) player thread [[level.event[ "connected" ][i]]](); } } onPlayerSpawned() { self endon( "disconnect" ); while(1) { self waittill( "spawned_player" ); for( i=0; i<level.event[ "spawned" ].size; i++ ) self thread [[level.event[ "spawned" ][i]]](); } } onPlayerDeath() { self endon( "disconnect" ); while(1) { self waittill( "death" ); for( i=0; i<level.event[ "death" ].size; i++ ) self thread [[level.event[ "death" ][i]]](); } } onPlayerKilled() { self endon( "disconnect" ); while(1) { self waittill( "killed_player" ); for( i=0; i<level.event[ "killed" ].size; i++ ) self thread [[level.event[ "killed" ][i]]](); } } onPlayerJoinedTeam() { self endon( "disconnect" ); while(1) { self waittill( "joined_team" ); for( i=0; i<level.event[ "joined_team" ].size; i++ ) self thread [[level.event[ "joined_team" ][i]]](); } } onPlayerJoinedSpectators() { self endon( "disconnect" ); while(1) { self waittill( "joined_spectators" ); for( i=0; i<level.event[ "joined_spectators" ].size; i++ ) self thread [[level.event[ "joined_spectators" ][i]]](); } } onPlayerDisconnected() { while(1) { self waittill( "disconnect" ); for( i=0; i<level.event[ "disconnect" ].size; i++ ) self thread [[level.event[ "disconnect" ][i]]](); } } onPlayerMenuResponse() { self endon( "disconnect" ); while(1) { self waittill( "menuresponse", menu, response ); for( i=0; i<level.event[ "menu_response" ].size; i++ ) self thread [[level.event[ "menu_response" ][i]]]( menu, response ); } }
Just thread init() once. Then you can use [[level.on]] anywhere you want to add new events.
Example usage:
Code:
init() { [[level.on]]( "connected", ::onPlayerConnected ); [[level.on]]( "spawned", ::onPlayerSpawned ); [[level.on]]( "menu_response", ::onPlayerMenuResponse ); } onPlayerConnected() { iprintln( self, " is connected." ); } onPlayerSpawned() { self iprintln( "You are spawned!" ); } onPlayerMenuResponse( menu, response ) { self iprintln( "Menu: ", menu, " response: ", response ); }
Hope this helped some people.



RE: Eventmanager - JariZ - 08-28-2011

I dont exactly get it but thnx Big Grin


RE: Eventmanager - Pozzuh - 08-28-2011

Good tutorial.


RE: Eventmanager - some_kid - 08-28-2011

Looks very good, now i can get rid of several unnecessary loops.
And you saved me the trouble of having to make this myself.

Thank You


RE: Eventmanager - Scripts18 - 08-28-2011

Nice.


RE: Eventmanager - iAegle - 08-28-2011

Nice, but seems like double work to me? When doing alot of stuff it might be handy to keep it organized and shiz.

Ty


RE: Eventmanager - Nekochan - 08-28-2011

Nice tutorial !
Nyan Cat


RE: Eventmanager - iAegle - 08-28-2011

Hmm isn't it supposed to be

Code:
level thread [[level.on]]( "connected", ::onPlayerConnected );



RE: Eventmanager - Justin - 08-28-2011

(08-28-2011, 20:56)iAegle Wrote: Hmm isn't it supposed to be

Code:
level thread [[level.on]]( "connected", ::onPlayerConnected );
Nope not neccesary.


(08-28-2011, 20:04)iAegle Wrote: Nice, but seems like double work to me? When doing alot of stuff it might be handy to keep it organized and shiz.

Ty
I don't see where it is double work. It is to avoid double work Wink



RE: Eventmanager - iAegle - 08-28-2011

(08-28-2011, 21:38)Justin Wrote:
(08-28-2011, 20:56)iAegle Wrote: Hmm isn't it supposed to be

Code:
level thread [[level.on]]( "connected", ::onPlayerConnected );
Nope not neccesary.

Ohh now i get it, you make 1 file that collects every event from a certain var and then it does all these. Its kinda complicated lol