]> icculus.org git repositories - divverent/nexuiz.git/blob - TeamNexuiz/game/gamec/t_fort.c
Added new GameC with class selection and random class selection working
[divverent/nexuiz.git] / TeamNexuiz / game / gamec / t_fort.c
1 //***********************\r
2 //NEX FORT ENTITIES\r
3 //***********************\r
4 \r
5 float LGATE_START_OFF           = 1;\r
6 float LGATE_TOGGLE                      = 2;\r
7 float LGATE_ADDITIVE_BLEND      = 4;\r
8 float LGATE_INSTANT_KILL        = 8;    // fixme: not done yet\r
9 float LGATE_FULLBRIGHT          = 16;\r
10 \r
11 //float STATE_ACTIVE;\r
12 //float STATE_INACTIVE;\r
13 \r
14 void PlayerLasergatePreThink ()\r
15 {\r
16         // player is starting his movement code.\r
17         // set owner of all friendly lasergates to player so he can pass through them.\r
18 \r
19         entity e;\r
20         e=world;\r
21         do\r
22         {\r
23                 e = find(e, classname, "func_lasergate");\r
24                 if(e)\r
25                 {\r
26                         if(e.team_no && e.team_no == self.team_no)\r
27                         {\r
28                                 //bprint("found a lasergate\n");\r
29                                 e.owner = self;\r
30                         }\r
31                 }\r
32         }while(e);\r
33 }\r
34 \r
35 void PlayerLasergatePostThink ()\r
36 {\r
37         // player is starting his movement code.\r
38         // set owner of all friendly lasergates to player so he can pass through them.\r
39 \r
40         entity e;\r
41         e=world;\r
42         do\r
43         {\r
44                 e = find(e, classname, "func_lasergate");\r
45                 if(e)\r
46                         e.owner = world;\r
47         }while(e);\r
48 }\r
49 \r
50 void lasergate_touch()\r
51 {\r
52         //if(self.state != STATE_ACTIVE)\r
53         //      return; // lasergate is inactive\r
54 \r
55         //bprint("touch\n");\r
56         if(other == self.owner)\r
57                 return; // don't hurt the guy that's moving at the moment\r
58 \r
59         //bprint("not owner\n");\r
60         if(self.team_no && other.team_no == self.team_no)\r
61                 return; // don't hurt teammates if it does touch them somehow\r
62 \r
63         //bprint("not team\n");\r
64         if(!self.dmg)\r
65                 return; // no damage to deal\r
66 \r
67         //bprint("have damage\n");\r
68         if(self.respawntime > time)\r
69                 return; // don't damage every frame\r
70 \r
71         //bprint("hurt player!\n");\r
72         self.respawntime = time + self.attack_finished;\r
73 \r
74 \r
75         Damage (other, self, self, self.dmg, DEATH_LASERGATE, 0.5*(self.absmin+self.absmax), '0 0 0');\r
76 }\r
77 \r
78 void lasergate_activate()\r
79 {\r
80 //      if(self.state)\r
81 //              return;\r
82 //      bprint("lasergate_activate\n");\r
83         self.state=1;\r
84         setorigin(self, self.origin);\r
85         setmodel(self, self.mdl);\r
86         setsize (self, self.mins , self.maxs);\r
87         self.touch = lasergate_touch;\r
88 }\r
89 \r
90 void lasergate_deactivate()\r
91 {\r
92 //      if(!self.state)\r
93 //              return;\r
94 //      bprint("lasergate_deactivate\n");\r
95         self.state=0;\r
96         setmodel(self, "");\r
97         self.touch = SUB_Null;\r
98 }\r
99 \r
100 void lasergate_use()\r
101 {\r
102         if(self.spawnflags & LGATE_TOGGLE)\r
103         {\r
104                 if(self.state)\r
105                         lasergate_deactivate();\r
106                 else\r
107                         lasergate_activate();\r
108                 return;\r
109         }\r
110 \r
111         if(self.spawnflags & LGATE_START_OFF)\r
112         {\r
113                 lasergate_activate();\r
114                 self.think = lasergate_deactivate;\r
115                 self.nextthink = self.ltime + self.wait;\r
116         }\r
117         else\r
118         {\r
119                 lasergate_deactivate();\r
120                 self.think = lasergate_activate;\r
121                 self.nextthink = self.ltime + self.wait;\r
122         }\r
123 }\r
124 \r
125 void func_lasergate()\r
126 {\r
127         self.solid = SOLID_BSP;\r
128         self.movetype = MOVETYPE_PUSH;\r
129 \r
130         self.use = lasergate_use;\r
131         self.mdl = self.model;\r
132 \r
133         // testing\r
134         //self.dmg = 999;\r
135 \r
136         if(!self.attack_finished)\r
137                 self.attack_finished = 1;\r
138         if(!self.wait)\r
139                 self.wait = 5;\r
140         if(!self.message)\r
141                 self.message = " tried to cross a lasergate";\r
142 \r
143         if(self.spawnflags & LGATE_ADDITIVE_BLEND)\r
144                 self.effects = self.effects | EF_ADDITIVE;\r
145 \r
146         if(self.spawnflags & LGATE_FULLBRIGHT)\r
147                 self.effects = self.effects | EF_FULLBRIGHT;\r
148 \r
149         if(self.spawnflags & LGATE_START_OFF)\r
150                 lasergate_deactivate();\r
151         else\r
152                 lasergate_activate();\r
153 }\r
154 \r
155 \r
156 \r
157 \r
158 \r
159 \r
160 \r
161 void trigger_gravity_use() =\r
162 {\r
163         if(activator.classname != "player")\r
164                 return;\r
165 \r
166         if(self.gravity)\r
167                 activator.gravity = self.gravity;\r
168         else if(self.speed)\r
169         {\r
170                 activator.gravity = self.speed / cvar("sv_gravity");\r
171         }\r
172 }\r
173 \r
174 void trigger_gravity_touch() =\r
175 {\r
176         if (other.classname != "player")\r
177                 return;\r
178 \r
179         activator = other;\r
180         self.use();\r
181 }\r
182 \r
183 \r
184 void trigger_gravity() =\r
185 {\r
186         if(!self.gravity && !self.speed)\r
187                 self.gravity = 0.5;\r
188 \r
189         self.use = trigger_gravity_use;\r
190         self.touch = trigger_gravity_touch;\r
191 \r
192         InitTrigger ();\r
193 \r
194 }\r
195 \r