]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
crude but sorta working support for csqc walker & ewheel
authorJakob MG <jakob_mg@hotmail.com>
Tue, 14 Jun 2011 00:03:44 +0000 (02:03 +0200)
committerJakob MG <jakob_mg@hotmail.com>
Tue, 14 Jun 2011 00:03:44 +0000 (02:03 +0200)
qcsrc/client/tturrets.qc
qcsrc/server/tturrets/include/turrets_early.qh
qcsrc/server/tturrets/system/system_damage.qc
qcsrc/server/tturrets/system/system_main.qc
qcsrc/server/tturrets/units/unit_ewheel.qc
qcsrc/server/tturrets/units/unit_walker.qc

index 17bd12c7b0bdcc91536c83de02c1e7018a78af70..ffbae2a56ce539bdf2aae989eda0c1cbadb094b2 100644 (file)
@@ -80,6 +80,34 @@ void turret_draw()
     self.drawmask = MASK_NORMAL;
 }
 
+void turret_moving_head_draw()
+{        
+    self.drawmask = MASK_NORMAL;
+}
+
+void turret_moving_draw()
+{        
+    float dt;
+        
+    dt = time - self.move_time;
+    self.move_time = time;
+    if(dt <= 0)
+        return;
+    
+    setorigin(self, self.origin + self.velocity * dt);
+    if(self.turret_type == TID_WALKER)
+        setorigin(self.tur_head, gettaginfo(self, gettagindex(self, "tag_head")));
+    else
+        setorigin(self.tur_head, self.origin);
+    self.tur_head.angles += dt * self.tur_head.move_avelocity;
+    
+    if (self.health < 127)
+    if(random() < 0.25)
+        te_spark(self.origin + '0 0 40', randomvec() * 256 + '0 0 256', 16);
+    
+    self.drawmask = MASK_NORMAL;
+}
+
 string tid2info_base;
 string tid2info_head;
 vector  tid2info_min;
@@ -172,6 +200,19 @@ void turret_construct()
     self.draw               = turret_draw;
     self.tur_head.draw      = turret_head_draw;
     self.entremove          = turret_remove;
+
+    if(self.turret_type == TID_EWHEEL || self.turret_type == TID_WALKER)
+    {
+        self.gravity = 1;
+        self.move_movetype = MOVETYPE_BOUNCE;
+        self.move_origin = self.origin;                
+        self.move_time = time;        
+   
+        self.movetype           = MOVETYPE_NOCLIP;
+        self.tur_head.movetype  = MOVETYPE_NOCLIP;    
+        self.draw               = turret_moving_draw;
+        self.tur_head.draw      = turret_moving_head_draw;
+    }
 }
 
 entity turret_gibtoss(string _model, vector _from, vector _to, vector _cmod, float _explode);
@@ -180,6 +221,7 @@ void turret_gibboom();
 void turret_gib_draw()
 {
     Movetype_Physics_MatchTicrate(autocvar_cl_gibs_ticrate, autocvar_cl_gibs_sloppy);
+    
     self.drawmask = MASK_NORMAL;
        
        if(self.cnt)
@@ -308,6 +350,31 @@ void ent_turret()
         self.tur_head.move_avelocity_y = ReadShort();            
     }
     
+    if(sf & TNSF_AVEL)
+    {        
+        //WriteShort(MSG_ENTITY, rint(self.tur_head.avelocity_x));
+        //WriteShort(MSG_ENTITY, rint(self.tur_head.avelocity_y));
+    }
+    
+    if(sf & TNSF_MOVE)
+    {
+        self.origin_x = ReadShort();
+        self.origin_y = ReadShort();
+        self.origin_z = ReadShort();
+        setorigin(self, self.origin);
+        
+        self.velocity_x = ReadShort();
+        self.velocity_y = ReadShort();
+        self.velocity_z = ReadShort();
+        
+        self.angles_y = ReadShort();
+        
+        self.move_time = time;
+        self.move_velocity = self.velocity;
+        self.move_origin = self.origin;
+    }
+    
+
     if(sf & TNSF_STATUS)
     {        
         float _team;
@@ -321,6 +388,7 @@ void ent_turret()
         }
     } 
     
-    if(sf == TNSF_DIE)
+    //if(sf == TNSF_DIE)
+    if(self.health == 0)
         turret_die();
 }
index 45a487c167eaa6449267fa6c8e61093306314a51..eeccd73d2bdd3826ea465b5218d7f295fee21826 100644 (file)
@@ -474,8 +474,8 @@ float TNSF_STATUS       = 4;
 float TNSF_SETUP        = 8;
 float TNSF_ANG          = 16;
 float TNSF_AVEL         = 32;
-float TNSF_DIE          = 64;
-float TNSF_FIRE         = 128;
+float TNSF_MOVE         = 64;
+float TNSF_ANIM         = 128;
 
 float TNSF_FULL_UPDATE  = 16777215;
 
index 10a1b9a599e53b9a188c08104033c420df8cd900..7459db357268e1230bc48a4a214976505adf9f49 100644 (file)
@@ -64,7 +64,7 @@ void turret_stdproc_die()
     else
     {
                // Setup respawn
-        self.SendFlags      = TNSF_DIE;
+        self.SendFlags      |= TNSF_STATUS;
         self.nextthink      = time + 0.2;
         self.think          = turret_hide;
         
index fb79f5442fffd036ba08b56425209ffc9f57e6e8..8d4867fdfddf7423f1e25b69987fb1802a9cfb7f 100644 (file)
@@ -29,10 +29,31 @@ float turret_send(entity to, float sf)
         WriteShort(MSG_ENTITY, rint(self.tur_head.avelocity_y));
     }
     
+    if(sf & TNSF_MOVE)
+    {
+        WriteShort(MSG_ENTITY, rint(self.origin_x));
+        WriteShort(MSG_ENTITY, rint(self.origin_y));
+        WriteShort(MSG_ENTITY, rint(self.origin_z));
+
+        WriteShort(MSG_ENTITY, rint(self.velocity_x));
+        WriteShort(MSG_ENTITY, rint(self.velocity_y));
+        WriteShort(MSG_ENTITY, rint(self.velocity_z));        
+        
+        WriteShort(MSG_ENTITY, rint(self.angles_y));        
+    }
+    
+    if(sf & TNSF_ANIM)
+    {
+        
+    }
+    
     if(sf & TNSF_STATUS)
     {        
         WriteByte(MSG_ENTITY, self.team);
-        WriteByte(MSG_ENTITY, rint((self.health / self.tur_health) * 255)); // Send health as 0-255 insted of real value, where 255 = 100%
+        if(self.health <= 0)
+            WriteByte(MSG_ENTITY, 0);
+        else
+            WriteByte(MSG_ENTITY, rint((self.health / self.tur_health) * 255)); // Send health as 0-255 insted of real value, where 255 = 100%
     }
     
        return TRUE;
index cd062aa5f1403e253e9f879f98111b793d8d4336..8a493668e1fd5581a8a6ef628e2a484ec62cd85a 100644 (file)
@@ -210,6 +210,9 @@ void ewheel_postthink()
 
 
     self.velocity_z = vz;
+    
+    if(vlen(self.velocity))
+        self.SendFlags |= TNSF_MOVE;
 }
 
 void ewheel_respawnhook()
@@ -290,9 +293,8 @@ void turret_ewheel_dinit()
     }
 
     self.target_select_flags   = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
-    self.target_select_flags   = TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
-    self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;// | TFL_TARGETSELECT_LOS;
-    self.target_validate_flags = TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;// | TFL_TARGETSELECT_LOS;
+    self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
+
     self.damage_flags          |= TFL_DMG_DEATH_NOGIBS;
 
     self.iscreature = TRUE;
index d5bedc5cd8a64ab0bb134eccb73b57c8aeac5549..ea61cf987a83c7487a0a3e05eb5742e47c29e7c8 100644 (file)
@@ -609,8 +609,11 @@ void walker_postthink()
             walker_move_enemy();
     }
 
-
     walker_animate();
+    
+    //if(vlen(self.velocity))
+    self.SendFlags |= TNSF_MOVE;
+
 }
 
 void walker_attack()