]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/server/generator.qc
dd7ab19c519b50c1fdb957391c4ed514be0fcacc
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / generator.qc
1 #ifdef CSQC
2 void generator_precache()
3 {
4         precache_model("models/onslaught/generator.md3");
5         precache_model("models/onslaught/generator_dead.md3");
6         precache_sound("onslaught/generator_underattack.wav");
7 }
8
9 void generator_die()
10 {
11         setmodel(self, "models/onslaught/generator_dead.md3");
12 }
13
14 void generator_draw() { } // TODO
15
16 void generator_construct()
17 {       
18         self.netname = "Generator";
19
20         setorigin(self, self.origin);
21         setmodel(self, "models/onslaught/generator.md3");
22         setsize(self, GENERATOR_MIN, GENERATOR_MAX);
23         
24         self.move_movetype      = MOVETYPE_NOCLIP;
25         self.health                     = 255;
26         self.solid                      = SOLID_BBOX;
27         self.movetype           = MOVETYPE_NOCLIP; 
28         self.move_origin        = self.origin;
29         self.move_time          = time;
30         self.drawmask           = MASK_NORMAL;  
31         self.alpha                      = 1;
32         self.draw                       = generator_draw;
33 }
34
35 .vector glowmod;
36 void generator_changeteam()
37 {       
38         switch(self.team - 1)
39         {
40                 case NUM_TEAM_1: // Red
41                 {
42                         self.glowmod = '2 0 0';
43                         self.teamradar_color = '1 0 0';
44                         break;
45                 }
46                 case NUM_TEAM_2: // Blue
47                 {
48                         self.glowmod = '0 0 2';
49                         self.teamradar_color = '0 0 1';
50                         break;
51                 }
52                 case NUM_TEAM_3: // Yellow
53                 {
54                         self.glowmod = '1 1 0';
55                         self.teamradar_color = '1 1 0';
56                         break;
57                 }
58                 case NUM_TEAM_4: // Pink
59                 {
60                         self.glowmod = '1 0 1';
61                         self.teamradar_color = '1 0 1';
62                         break;
63                 }
64         }
65         
66         if(self.team)
67                 self.colormap = 1024 + (self.team - 1) * 17;
68 }
69
70 void ent_generator()
71 {
72         float sf;
73         sf = ReadByte();
74
75         if(sf & GSF_SETUP)
76         {
77                 self.origin_x = ReadCoord();
78                 self.origin_y = ReadCoord();
79                 self.origin_z = ReadCoord();
80                 setorigin(self, self.origin);
81                 
82                 generator_precache();
83                 generator_construct();
84                 self.colormap = 1024;
85                 self.glowmod = '1 1 0'; 
86         }
87
88         if(sf & GSF_STATUS)
89         {
90                 float _tmp;
91                 _tmp = ReadByte();
92                 if(_tmp != self.team)
93                 {                       
94                         self.team = _tmp;                               
95                         generator_changeteam();
96                 }
97                 
98                 _tmp = ReadByte();
99                 
100                 if(_tmp == 0 && self.health != 0)
101                         generator_die();
102
103                 self.health = _tmp;
104         }
105 }
106 #endif // CSQC
107
108 #ifdef SVQC
109 float generator_send(entity to, float sf)
110 {
111         WriteByte(MSG_ENTITY, ENT_CLIENT_GENERATOR);    
112         WriteByte(MSG_ENTITY, sf);
113         if(sf & GSF_SETUP)
114         {
115             WriteCoord(MSG_ENTITY, self.origin_x);
116             WriteCoord(MSG_ENTITY, self.origin_y);
117             WriteCoord(MSG_ENTITY, self.origin_z);
118     }
119     
120     if(sf & GSF_STATUS)
121     {
122                 WriteByte(MSG_ENTITY, self.team);
123         
124         if(self.health <= 0)
125             WriteByte(MSG_ENTITY, 0);
126         else
127             WriteByte(MSG_ENTITY, ceil((self.health / self.max_health) * 255));
128     }
129     
130         return TRUE;
131 }
132
133 void generator_link(void() spawnproc)
134 {
135     Net_LinkEntity(self, TRUE, 0, generator_send);
136     self.think      = spawnproc;
137     self.nextthink  = time;
138 }
139 #endif // SVQC