+#include "round_handler.qh"
+#include "_all.qh"
+
+#include "command/vote.qh"
+#include "../common/util.qh"
+
void round_handler_Think()
{
float f;
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
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();
if(self.canRoundEnd())
{
// schedule a new round
- self.wait = TRUE;
+ self.wait = true;
self.nextthink = time + self.delay;
}
else
}
}
-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)
{
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;