]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/server/round_handler.qc
Remove compiler warnings
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / round_handler.qc
1 void round_handler_Think()
2 {
3         entity e;
4         float f;
5
6         if(time <= game_starttime)
7         {
8                 round_handler_Reset(game_starttime + 1);
9                 return;
10         }
11
12         if(gameover)
13         {
14                 round_handler_Reset(0);
15                 round_handler_Remove();
16                 return;
17         }
18
19         if(self.wait)
20         {
21                 reset_map(TRUE);
22                 self.wait = FALSE;
23                 self.cnt = self.count + 1; // init countdown
24         }
25
26         if(self.cnt > 0) // countdown running
27         {
28                 if(self.canRoundStart())
29                 {
30                         f = self.cnt - 1;
31                         if(f == 5) Announce("prepareforbattle");
32                         else if(f == 3) Announce("3");
33                         else if(f == 2) Announce("2");
34                         else if(f == 1) Announce("1");
35                         else if(f == 0)
36                         {
37                                 Announce("begin");
38                                 FOR_EACH_REALCLIENT(e)
39                                         Send_CSQC_Centerprint_Generic(e, CPID_ROUND_STARTING, "^1Begin!", 1, 0);
40                                 self.cnt = 0;
41                                 self.round_endtime = time + self.round_timelimit;
42                                 self.nextthink = time;
43                                 if(self.roundStart)
44                                         self.roundStart();
45                                 return;
46                         }
47
48                         FOR_EACH_REALCLIENT(e)
49                                 Send_CSQC_Centerprint_Generic(e, CPID_ROUND_STARTING, "Round will start in %d", 1, f);
50                         self.cnt = self.cnt - 1;
51                 }
52                 else
53                 {
54                         round_handler_Reset(0);
55                 }
56                 self.nextthink = time + 1; // canRoundStart every second
57         }
58         else
59         {
60                 if(self.canRoundEnd())
61                 {
62                         // schedule a new round
63                         self.wait = TRUE;
64                         self.nextthink = time + self.delay;
65                 }
66                 else
67                 {
68                         self.nextthink = time; // canRoundEnd every frame
69                 }
70         }
71 }
72
73 void round_handler_Spawn(float() canRoundStart_func, float() canRoundEnd_func, void() roundStart_func, float the_delay, float the_count, float the_round_timelimit)
74 {
75         if(round_handler)
76         {
77                 backtrace("Can't spawn round_handler again!");
78                 return;
79         }
80         round_handler = spawn();
81         round_handler.classname = "round_handler";
82
83         round_handler.think = round_handler_Think;
84         round_handler.canRoundStart = canRoundStart_func;
85         round_handler.canRoundEnd = canRoundEnd_func;
86         round_handler.roundStart = roundStart_func;
87         round_handler.delay = (the_delay > 0) ? the_delay : 0;
88         round_handler.count = fabs(floor(the_count));
89         round_handler.wait = FALSE;
90         round_handler.cnt = round_handler.count + 1;
91         round_handler.round_timelimit = the_round_timelimit;
92         round_handler.nextthink = max(time, game_starttime + 1);
93 }
94
95 float round_handler_IsActive()
96 {
97         return (round_handler != world);
98 }
99
100 float round_handler_AwaitingNextRound()
101 {
102         return (round_handler.wait);
103 }
104
105 float round_handler_CountdownRunning()
106 {
107         return (!round_handler.wait && round_handler.cnt);
108 }
109
110 float round_handler_IsRoundStarted()
111 {
112         return (!round_handler.wait && !round_handler.cnt);
113 }
114
115 float round_handler_GetTimeLeft()
116 {
117         return (round_handler.round_endtime - time);
118 }
119
120 void round_handler_Reset(float next_think)
121 {
122         entity e;
123         round_handler.wait = FALSE;
124         if(round_handler.count)
125         if(round_handler.cnt < round_handler.count + 1)
126         {
127                 FOR_EACH_REALCLIENT(e)
128                         Send_CSQC_Centerprint_Generic_Expire(e, CPID_ROUND_STARTING);
129                 round_handler.cnt = round_handler.count + 1;
130         }
131         round_handler.nextthink = next_think;
132 }
133
134 void round_handler_Remove()
135 {
136         remove(round_handler);
137         round_handler = world;
138 }
139