]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Move td generator model loading to client
authorMario <mario.mario@y7mail.com>
Wed, 17 Apr 2013 05:20:55 +0000 (15:20 +1000)
committerMario <mario.mario@y7mail.com>
Wed, 17 Apr 2013 05:20:55 +0000 (15:20 +1000)
qcsrc/client/Main.qc
qcsrc/client/monsters.qc
qcsrc/client/monsters.qh
qcsrc/common/constants.qh
qcsrc/server/monsters/lib/monsters_early.qh
qcsrc/server/mutators/gamemode_towerdefense.qc
qcsrc/server/mutators/gamemode_towerdefense.qh

index e0d063c8f5add81c64460f4d7e6f73dc0cae4f81..2567373cc5a5779dc6bb4590b078313dbbb50e9f 100644 (file)
@@ -781,6 +781,7 @@ void CSQC_Ent_Update(float bIsNewEntity)
                case ENT_CLIENT_AUXILIARYXHAIR: Net_AuXair2(bIsNewEntity); break;
                case ENT_CLIENT_TURRET: ent_turret(); break; 
                case ENT_CLIENT_MONSTER: ent_monster(); break;
+               case ENT_CLIENT_GENERATOR: ent_td_generator(); break;
                case ENT_CLIENT_MODEL: CSQCModel_Read(bIsNewEntity); break;
                case ENT_CLIENT_ITEM: ItemRead(bIsNewEntity); break;  
                case ENT_CLIENT_BUMBLE_RAYGUN: bumble_raygun_read(bIsNewEntity); break;
index 53292d28ea1e74d3907a428dbc40ca7256641c9f..64dd4f137d5da5c0fe7dc4dbc372d03a8d402bf3 100644 (file)
@@ -382,3 +382,67 @@ void ent_monster()
                self.health = _tmp;
        }
 }
+
+void td_generator_precache()
+{
+       precache_model("models/onslaught/generator.md3");
+       precache_model("models/onslaught/generator_dead.md3");
+       precache_sound("onslaught/generator_underattack.wav");
+}
+
+void td_generator_die()
+{
+       setmodel(self, "models/onslaught/generator_dead.md3");
+       pointparticles(particleeffectnum("explosion_medium"), self.origin, '0 0 0', 1);
+}
+
+void td_generator_draw() { } // TODO
+
+void td_generator_construct()
+{      
+       self.netname = "Generator";
+
+       setorigin(self, self.origin);
+       setmodel(self, "models/onslaught/generator.md3");
+       setsize(self, GENERATOR_MIN, GENERATOR_MAX);
+       
+       self.move_movetype      = MOVETYPE_NOCLIP;
+       self.health                     = 255;
+       self.solid                      = SOLID_BBOX;
+       self.movetype           = MOVETYPE_NOCLIP; 
+       self.move_origin        = self.origin;
+       self.move_time          = time;
+       self.drawmask           = MASK_NORMAL;  
+       self.alpha                      = 1;
+       self.draw                       = td_generator_draw;
+}
+
+void ent_td_generator()
+{
+       float sf;
+       sf = ReadByte();
+
+       if(sf & MSF_SETUP)
+       {
+               self.origin_x = ReadCoord();
+               self.origin_y = ReadCoord();
+               self.origin_z = ReadCoord();
+               setorigin(self, self.origin);
+               
+               td_generator_precache();
+               td_generator_construct();
+               self.colormap = 1024;
+               self.glowmod = '1 1 0'; 
+       }
+
+       if(sf & MSF_STATUS)
+       {
+               float _tmp = ReadByte();
+               
+               if(_tmp == 0 && self.health != 0)
+                       td_generator_die();
+
+               self.health = _tmp;
+       }
+}
+
index 83dac2956fa224faa866c9aed2f06dee99234186..897b0d957d16fbfa04a8206c695ce52c7f49e77c 100644 (file)
@@ -1,2 +1,3 @@
 void ent_monster();
 void Monsters_Precache();
+void ent_td_generator();
index fd894be1f3fe0002ed1ee8658844d10cc26ec6bd..528a7441d1523e40c6155fc4de017604e6fca5f5 100644 (file)
@@ -102,6 +102,7 @@ const float ENT_CLIENT_TURRET = 40;
 const float ENT_CLIENT_AUXILIARYXHAIR = 50;
 const float ENT_CLIENT_VEHICLE = 60;
 const float ENT_CLIENT_MONSTER = 70;
+const float ENT_CLIENT_GENERATOR = 80;
 
 const float SPRITERULE_DEFAULT = 0;
 const float SPRITERULE_TEAMPLAY = 1;
index 3493b44a78f9ad3c246c2732e598727a9186a00d..5059764138ab1b5a063608762eb65c2230a8983d 100644 (file)
@@ -48,4 +48,7 @@ float MSF_SIZE                   = 128;
 
 float MSF_FULL_UPDATE  = 16777215;
 
+#define GENERATOR_MIN '-52 -52 -14'
+#define GENERATOR_MAX '52 52 75'
+
 #endif // CSQC/SVQC
\ No newline at end of file
index 5588d086dc743d96d08a4f0e60148216c48ea3e4..3c31d57b475337b2b09d86f7c8fc65520443241e 100644 (file)
@@ -53,14 +53,11 @@ void td_generator_die()
        
        Send_Notification(NOTIF_ALL, world, MSG_MULTI, MULTI_TD_GENDESTROYED);
        
-       setmodel(self, "models/onslaught/generator_dead.md3");
        self.solid                      = SOLID_NOT;
        self.takedamage         = DAMAGE_NO;
        self.event_damage   = func_null;
        self.enemy                      = world;
        td_gencount                     -= 1;
-               
-       pointparticles(particleeffectnum("explosion_medium"), self.origin, '0 0 0', 1);
        
        WaypointSprite_Kill(self.sprite);
 }
@@ -84,45 +81,86 @@ void td_generator_damage(entity inflictor, entity attacker, float damage, float
                
        if(self.health <= 0) 
                td_generator_die();
+               
+       self.SendFlags |= MSF_STATUS;
 }
 
-void spawnfunc_td_generator() 
+float td_generator_send(entity to, float sf)
 {
-       if not(g_td) { remove(self); return; }
-       
-       gendestroyed = FALSE;
-       
-       if not(self.health)
-               self.health = autocvar_g_td_generator_health;
+       WriteByte(MSG_ENTITY, ENT_CLIENT_GENERATOR);    
+       WriteByte(MSG_ENTITY, sf);
+       if(sf & MSF_SETUP)
+       {
+           WriteCoord(MSG_ENTITY, self.origin_x);
+           WriteCoord(MSG_ENTITY, self.origin_y);
+           WriteCoord(MSG_ENTITY, self.origin_z);
+    }
+    
+    if(sf & MSF_STATUS)
+    {
+        if(self.health <= 0)
+            WriteByte(MSG_ENTITY, 0);
+        else
+            WriteByte(MSG_ENTITY, ceil((self.health / self.max_health) * 255));
+    }
+    
+       return TRUE;
+}
 
-       // precache generator model
-       precache_model("models/onslaught/generator.md3");
-       precache_model("models/onslaught/generator_dead.md3");   
+void td_generator_think()
+{
+       self.think = td_generator_think;
+       self.nextthink = time + 0.5;
+}
+
+void td_generator_setup()
+{
+       
+       self.think = td_generator_think;
+       self.nextthink = time + 0.1;
        
-       self.model                  = "models/onslaught/generator.md3";
-       setmodel(self, self.model);
-       self.classname      = "td_generator";
        self.solid                  = SOLID_BBOX;
        self.takedamage     = DAMAGE_AIM;
        self.event_damage   = td_generator_damage;
        self.enemy                  = world;
-       self.nextthink      = -1;
-       self.think                  = func_null;
        self.max_health     = self.health;
        self.movetype       = MOVETYPE_NONE;
        self.monster_attack = TRUE;
-       td_gencount                += 1;
        self.netname            = "Generator";
        
-       setsize(self, GENERATOR_MIN, GENERATOR_MAX);
-       
-       droptofloor();
+       self.SendFlags |= MSF_SETUP;
        
        WaypointSprite_SpawnFixed(self.netname, self.origin + '0 0 60', self, sprite, RADARICON_OBJECTIVE, '1 0.5 0');  
        WaypointSprite_UpdateMaxHealth(self.sprite, self.max_health);
        WaypointSprite_UpdateHealth(self.sprite, self.health);
 }
 
+void td_generator_link()
+{
+    Net_LinkEntity(self, TRUE, 0, td_generator_send);
+    self.think      = td_generator_setup;
+    self.nextthink  = time;
+}
+
+void spawnfunc_td_generator() 
+{
+       if not(g_td) { remove(self); return; }
+       
+       gendestroyed = FALSE;
+       
+       if not(self.health)
+               self.health = autocvar_g_td_generator_health;
+       
+       self.classname = "td_generator";
+       td_gencount += 1;
+       
+       setsize(self, GENERATOR_MIN, GENERATOR_MAX);
+       
+       droptofloor();
+       
+       td_generator_link();
+}
+
 entity PickGenerator()
 {
        entity generator, head;
index 513cb9287490b5e4ee2bbf59a2cbb3c0e05d3069..7cd0025895142e67af6b870c3ea227a27a534b66 100644 (file)
@@ -57,6 +57,4 @@ float current_phase;
 .float ignoreturrets;
 
 // Generator
-float gendestroyed;
-#define GENERATOR_MIN '-52 -52 -14'
-#define GENERATOR_MAX '52 52 75'
\ No newline at end of file
+float gendestroyed;
\ No newline at end of file