X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fround_handler.qc;h=70d2d144d984c5c3220c0d8da9cc7a9c25f159dc;hb=77f03e6ce033bef39ac19e0e7cb6e606ffcb26db;hp=0883847815cf2cb348ea7265732d2e2bab7263d4;hpb=2183ba664c674c396a5c37a69a944f4c698eea70;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/round_handler.qc b/qcsrc/server/round_handler.qc index 088384781..70d2d144d 100644 --- a/qcsrc/server/round_handler.qc +++ b/qcsrc/server/round_handler.qc @@ -1,3 +1,13 @@ +#if defined(CSQC) +#elif defined(MENUQC) +#elif defined(SVQC) + #include "../dpdefs/progsdefs.qh" + #include "../dpdefs/dpextensions.qh" + #include "../common/util.qh" + #include "defs.qh" + #include "round_handler.qh" +#endif + void round_handler_Think() { float f; @@ -17,10 +27,10 @@ void round_handler_Think() if(self.wait) { - reset_map(TRUE); - self.wait = FALSE; + self.wait = false; self.cnt = self.count + 1; // init countdown round_starttime = time + self.count; + reset_map(true); } if(self.cnt > 0) // countdown running @@ -33,7 +43,7 @@ void round_handler_Think() if(f == 0) { self.cnt = 0; - self.round_endtime = time + self.round_timelimit; + self.round_endtime = (self.round_timelimit) ? time + self.round_timelimit : 0; self.nextthink = time; if(self.roundStart) self.roundStart(); @@ -52,7 +62,7 @@ void round_handler_Think() if(self.canRoundEnd()) { // schedule a new round - self.wait = TRUE; + self.wait = true; self.nextthink = time + self.delay; } else @@ -62,7 +72,24 @@ void round_handler_Think() } } -void round_handler_Spawn(float() canRoundStart_func, float() canRoundEnd_func, void() roundStart_func, float the_delay, float the_count, float the_round_timelimit) +void round_handler_Init(float the_delay, float the_count, float the_round_timelimit) +{ + round_handler.delay = (the_delay > 0) ? the_delay : 0; + round_handler.count = fabs(floor(the_count)); + round_handler.cnt = round_handler.count + 1; + round_handler.round_timelimit = (the_round_timelimit > 0) ? the_round_timelimit : 0; +} + +// NOTE: this is only needed because if round_handler spawns at time 1 +// gamestarttime isn't initialized yet +void round_handler_FirstThink() +{ + round_starttime = max(time, game_starttime) + round_handler.count; + round_handler.think = round_handler_Think; + round_handler.nextthink = max(time, game_starttime); +} + +void round_handler_Spawn(float() canRoundStart_func, float() canRoundEnd_func, void() roundStart_func) { if(round_handler) { @@ -72,49 +99,18 @@ void round_handler_Spawn(float() canRoundStart_func, float() canRoundEnd_func, v round_handler = spawn(); round_handler.classname = "round_handler"; - round_handler.think = round_handler_Think; + round_handler.think = round_handler_FirstThink; round_handler.canRoundStart = canRoundStart_func; round_handler.canRoundEnd = canRoundEnd_func; round_handler.roundStart = roundStart_func; - round_handler.delay = (the_delay > 0) ? the_delay : 0; - round_handler.count = fabs(floor(the_count)); - round_handler.wait = FALSE; - round_handler.cnt = round_handler.count + 1; - round_handler.round_timelimit = the_round_timelimit; - // if round_handler spawns at time 1 gamestarttime isn't initialized yet - //round_handler.nextthink = max(time, game_starttime + 1); + round_handler.wait = false; + round_handler_Init(5, 5, 180); round_handler.nextthink = time; - round_starttime = time + round_handler.count; -} - -float round_handler_IsActive() -{ - return (round_handler != world); -} - -float round_handler_AwaitingNextRound() -{ - return (round_handler.wait); -} - -float round_handler_CountdownRunning() -{ - return (!round_handler.wait && round_handler.cnt); -} - -float round_handler_IsRoundStarted() -{ - return (!round_handler.wait && !round_handler.cnt); -} - -float round_handler_GetTimeLeft() -{ - return (round_handler.round_endtime - time); } void round_handler_Reset(float next_think) { - round_handler.wait = FALSE; + round_handler.wait = false; if(round_handler.count) if(round_handler.cnt < round_handler.count + 1) round_handler.cnt = round_handler.count + 1;