]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Begin csqc'ing tturrets
authorJakob MG <jakob_mg@hotmail.com>
Sat, 9 Apr 2011 05:29:13 +0000 (07:29 +0200)
committerJakob MG <jakob_mg@hotmail.com>
Sat, 9 Apr 2011 05:29:13 +0000 (07:29 +0200)
14 files changed:
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_flac.qc
qcsrc/server/tturrets/units/unit_fusionreactor.qc
qcsrc/server/tturrets/units/unit_hellion.qc
qcsrc/server/tturrets/units/unit_hk.qc
qcsrc/server/tturrets/units/unit_machinegun.qc
qcsrc/server/tturrets/units/unit_mlrs.qc
qcsrc/server/tturrets/units/unit_phaser.qc
qcsrc/server/tturrets/units/unit_plasma.qc
qcsrc/server/tturrets/units/unit_tessla.qc
qcsrc/server/tturrets/units/unit_walker.qc

index 8cdd0f5097b581f00cda055d8a70d8c27d976fd7..14173b4c82acb463fc830fac28dcb0c81d1e6a3b 100644 (file)
@@ -2,8 +2,8 @@
 #define TTURRETS_ENABLED
 
 #ifdef TTURRETS_ENABLED
-
-#message "with tZork turrets"
+#ifdef SVQC
+//#message "with tZork turrets"
 
 float turret_count;
 
@@ -464,8 +464,22 @@ void turret_do_updates(entity e_turret);
 .vector tur_shotdir_updated;
 
 void turrets_precash();
-
-
+#endif // SVQC
+
+.float turret_type;
+float TID_EWHEEL        = 1;
+float TID_FLAC          = 2;
+float TID_FUSION        = 3;
+float TID_HELLION       = 4;
+float TID_HK            = 5;
+float TID_MACHINEGUN    = 6;
+float TID_MLRS          = 7;
+float TID_PHASER        = 8;
+float TID_PLASMA        = 9;
+float TID_PLASMA_DUAL   = 10;
+float TID_TESLA         = 11;
+float TID_WALKER        = 12;
+float TID_LAST          = 12;
 
 #endif // TTURRETS_ENABLED
 
index c7f25a4467825f6b9c6eefbd7ba9f4fc96b73289..4c8b1c2c8bf347c885156f4ccbc36f2748ebdd00 100644 (file)
@@ -248,7 +248,15 @@ void turret_stdproc_respawn()
     self.ammo                   = self.ammo_max;
 
     self.nextthink  = time + self.ticrate;
-    self.think      = turret_think;
+    
+    if(self.SendEntity)
+    {
+        self.SendFlags  = TNSF_FULL_UPDATE;
+        self.think      = turret_link;  // CSQC?
+    }
+        
+    else
+        self.think      = turret_think; // Or not?
 
     if (self.turret_respawnhook)
         self.turret_respawnhook();
@@ -304,4 +312,9 @@ void turret_stdproc_damage (entity inflictor, entity attacker, float damage, flo
         self.nextthink = time;
         self.think = turret_stdproc_die;
     }
+    
+    // CSQC
+    if(self.SendEntity)
+        self.SendFlags  = TNSF_STATUS;
+
 }
index 7d023e99ef199d9049f3954a9779e4847fa61881..e65d3897e774435a87861a5151208963fbdd7505 100644 (file)
@@ -1,23 +1,48 @@
 #define cvar_base "g_turrets_unit_"
 
-/*
-float turret_customizeentityforclient()
-{
-}
+float TNSF_UPDATE       = 2;
+float TNSF_STATUS       = 4;
+float TNSF_SETUP        = 8;
 
-float Turret_SendEntity(entity to, float sf)
-{
+float TNSF_ANG1         = 16;
+float TNSF_AVEL1        = 32;
+float TNSF_ANG2         = 64;
+float TNSF_AVEL2        = 128;
 
+float TNSF_FULL_UPDATE  = 16777215;
+float turret_send(entity to, float sf)
+{
        WriteByte(MSG_ENTITY, ENT_CLIENT_TURRET);
-       WriteCoord(MSG_ENTITY, self.tur_head.angles_x);
-       WriteCoord(MSG_ENTITY, self.tur_head.angles_y);
-    WriteByte(MSG_ENTITY, self.tur_head.frame);
-
-       //WriteCoord(MSG_ENTITY, self.tur_head.angles_z);
-
+       
+       WriteByte(MSG_ENTITY, sf);
+       if(sf & TNSF_SETUP)
+       {
+           WriteByte(MSG_ENTITY, self.turret_type);
+           
+           WriteCoord(MSG_ENTITY, self.origin_x);
+           WriteCoord(MSG_ENTITY, self.origin_y);
+           WriteCoord(MSG_ENTITY, self.origin_z);
+           
+           WriteAngle(MSG_ENTITY, self.angles_x);
+           WriteAngle(MSG_ENTITY, self.angles_y);
+    }
+    
+    if(sf & TNSF_UPDATE)
+    {        
+        WriteAngle(MSG_ENTITY, self.tur_head.angles_x);
+           WriteAngle(MSG_ENTITY, self.tur_head.angles_y);         
+           WriteAngle(MSG_ENTITY, self.tur_head.avelocity_x);
+           WriteAngle(MSG_ENTITY, self.tur_head.avelocity_y);
+    }
+    
+    if(sf & TNSF_STATUS)
+    {        
+        WriteByte(MSG_ENTITY, self.team);
+        WriteByte(MSG_ENTITY, rint((self.health / self.tur_health) * 255));
+    }
+    
        return TRUE;
 }
-*/
 
 void load_unit_settings(entity ent, string unitname, float is_reload)
 {
@@ -116,8 +141,6 @@ void turret_do_updates(entity t_turret)
             self.tur_dist_impact_to_aimpos = 0;
         else
             self.tur_dist_impact_to_aimpos = vlen(trace_endpos - self.tur_aimpos);
-
-
     }
     else
         tracebox(self.tur_shotorg, '-1 -1 -1','1 1 1', self.tur_shotorg + (self.tur_shotdir_updated * self.tur_dist_aimpos),MOVE_NORMAL,self);
@@ -204,7 +227,10 @@ void turret_stdproc_track()
     vector target_angle; // This is where we want to aim
     vector move_angle;   // This is where we can aim
     float f_tmp;
-
+    vector v1, v2;
+    v1 = self.tur_head.angles;
+    v2 = self.tur_head.avelocity;
+    
     if (self.track_flags == TFL_TRACK_NO)
         return;
 
@@ -252,7 +278,10 @@ void turret_stdproc_track()
                 if(self.tur_head.angles_y  < -self.aim_maxrot)
                     self.tur_head.angles_y = self.aim_maxrot;
             }
-
+            
+            // CSQC
+            if(self.SendEntity)
+                self.SendFlags  = TNSF_STATUS;
             return;
 
         case TFL_TRACKTYPE_FLUIDINERTIA:
@@ -830,7 +859,7 @@ void turret_stdproc_use()
 
 void turret_link()
 {
-    //Net_LinkEntity(self, FALSE, 0, Turret_SendEntity);
+    Net_LinkEntity(self, TRUE, 0, turret_send);
     self.think      = turret_think;
     self.nextthink  = time;
 }
@@ -863,15 +892,21 @@ void turrets_manager_think()
 * (unless you have a very good reason not to)
 * if the return value is 0, the turret should be removed.
 */
-float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base, string head)
+float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base, string head, float _turret_type)
 {
        entity e, ee;
 
     // Are turrets allowed?
     if (autocvar_g_turrets == 0)
         return 0;
-
-
+    
+    if(_turret_type < 1 || _turret_type > TID_LAST)
+    {
+        dprint("Invalid / Unkown turret type\"", ftos(_turret_type), "\", aborting!\n");
+        return 0;
+    }    
+    self.turret_type = _turret_type;
+    
     e = find(world, classname, "turret_manager");
     if not (e)
     {
@@ -895,17 +930,20 @@ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base
         e.nextthink = time + 2;
     }
 
+    /*
     if(csqc_shared)
     {
         dprint("WARNING: turret requested csqc_shared but this is not implemented. Expect strange things to happen.\n");
         csqc_shared = 0;
     }
-
+    */
+    
     if not (self.spawnflags & TSF_SUSPENDED)
         droptofloor_builtin();
 
     // Terrainbase spawnflag. This puts a enlongated model
     // under the turret, so it looks ok on uneaven surfaces.
+    /*  TODO: Handle this with CSQC
     if (self.spawnflags & TSF_TERRAINBASE)
     {
         entity tb;
@@ -914,9 +952,10 @@ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base
         setorigin(tb,self.origin);
         tb.solid = SOLID_BBOX;
     }
+    */
 
     self.cvar_basename = cvar_base_name;
-    load_unit_settings(self,self.cvar_basename, 0);
+    load_unit_settings(self, self.cvar_basename, 0);
 
     // Handle turret teams.
     if (autocvar_g_assault != 0)
@@ -1208,12 +1247,6 @@ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base
     self.use = turret_stdproc_use;
     self.bot_attack = TRUE;
 
-    // Initiate the main AI loop
-    if(csqc_shared)
-        self.think     = turret_link;
-    else
-        self.think     = turret_think;
-
     ++turret_count;
     self.nextthink = time + 1;
     self.nextthink +=  turret_count * sys_frametime;
@@ -1244,8 +1277,15 @@ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base
         activator = ee;
         self.use();
     }
-       
+    
        turret_stdproc_respawn();
+       
+    // Initiate the main AI loop
+    if(csqc_shared)
+        self.think     = turret_link;
+    else
+        self.think     = turret_think;
+
     return 1;
 }
 
index 02c0ffa6016291288e71014f89b9dd53574f9c57..df728166f1d467882e35b91c0cf350083d5f6656 100644 (file)
@@ -283,7 +283,7 @@ void turret_ewheel_dinit()
 
     self.turret_diehook = ewheel_diehook;
 
-    if (turret_stdproc_init("ewheel_std",0,"models/turrets/ewheel-base2.md3","models/turrets/ewheel-gun1.md3") == 0)
+    if (turret_stdproc_init("ewheel_std", TRUE, "models/turrets/ewheel-base2.md3", "models/turrets/ewheel-gun1.md3", TID_EWHEEL) == 0)
     {
         remove(self);
         return;
index 0c874fb504d99f5d14534a6978b9a7bb9b975448..e0580658224105e5029e7825e707bcdd2b71f2d4 100644 (file)
@@ -89,7 +89,7 @@ void turret_flac_dinit()
     self.ammo_flags     = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE;
     self.aim_flags      = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE;
 
-    if (turret_stdproc_init("flac_std",0,"models/turrets/base.md3","models/turrets/flac.md3") == 0)
+    if (turret_stdproc_init("flac_std", TRUE, "models/turrets/base.md3", "models/turrets/flac.md3", TID_FLAC) == 0)
     {
         remove(self);
         return;
index 03b0c40ad91cc49b873ee48344a18c250d6eeb0a..968410780b15207803749a4c78244f5224e75a24 100644 (file)
@@ -68,7 +68,7 @@ void turret_fusionreactor_dinit()
     self.track_flags         = TFL_TRACK_NO;
     // self.turret_respawnhook  = turret_fusionreactor_respawnhook;
 
-    if (turret_stdproc_init("fusreac_std",0,"models/turrets/base.md3","models/turrets/reactor.md3") == 0)
+    if (turret_stdproc_init("fusreac_std", TRUE,"models/turrets/base.md3", "models/turrets/reactor.md3", TID_FUSION) == 0)
     {
         remove(self);
         return;
index 1e2890f6ea6c9bce6d1653bd1b5989d9c4b5c8b4..ea7eabecb8a06cdcda68b7b95fa4f71beeceeb7c 100644 (file)
@@ -188,7 +188,7 @@ void turret_hellion_dinit()
     self.firecheck_flags = TFL_FIRECHECK_WORLD | TFL_FIRECHECK_DEAD | TFL_FIRECHECK_DISTANCES | TFL_FIRECHECK_TEAMCECK | TFL_FIRECHECK_REFIRE | TFL_FIRECHECK_AFF | TFL_FIRECHECK_OWM_AMMO;
     self.ammo_flags = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE;
 
-    if (turret_stdproc_init("hellion_std",0,"models/turrets/base.md3","models/turrets/hellion.md3") == 0)
+    if (turret_stdproc_init("hellion_std", TRUE, "models/turrets/base.md3", "models/turrets/hellion.md3", TID_HELLION) == 0)
     {
         remove(self);
         return;
index 2b8e0f6a38089da861aa43ef9c2f1524a0163cd4..df8b47d757c356df16ac81f2c82a778e156542e5 100644 (file)
@@ -408,7 +408,7 @@ void turret_hk_dinit()
 
     self.shoot_flags = TFL_SHOOT_CLEARTARGET;
 
-    if (turret_stdproc_init("hk_std",0,"models/turrets/base.md3","models/turrets/hk.md3") == 0)
+    if (turret_stdproc_init("hk_std", TRUE, "models/turrets/base.md3", "models/turrets/hk.md3", TID_HK) == 0)
     {
         remove(self);
         return;
index f6426fce25efdab96a268ee0f6b1a513db1bd7ae..6b3a3f91501285d3cdca2333f8f20180a17db5d3 100644 (file)
@@ -28,7 +28,7 @@ void turret_machinegun_std_init()
        if not (autocvar_g_antilag_bullets)
                self.turrcaps_flags |= TFL_TURRCAPS_HITSCAN;
 
-    if (turret_stdproc_init("machinegun_std",0,"models/turrets/base.md3","models/turrets/machinegun.md3") == 0)
+    if (turret_stdproc_init("machinegun_std", TRUE, "models/turrets/base.md3", "models/turrets/machinegun.md3", TID_MACHINEGUN) == 0)
     {
         remove(self);
         return;
index 499d6de2352c15c55d591d762cca0d40eb1f32f1..667a67e90896fac930704502a95a0ba41e965ee5 100644 (file)
@@ -101,7 +101,7 @@ void turret_mlrs_dinit()
     self.ammo_flags = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE;
     self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE;// | TFL_AIM_GROUND2;
 
-    if (turret_stdproc_init("mlrs_std",0,"models/turrets/base.md3","models/turrets/mlrs.md3") == 0)
+    if (turret_stdproc_init("mlrs_std", TRUE, "models/turrets/base.md3", "models/turrets/mlrs.md3", TID_MLRS) == 0)
     {
         remove(self);
         return;
index 9c5ca071d8d5ce8489f233986ba62fe6577a2684..ba3c676332d41290efdf2f67214c3ef9188978fb 100644 (file)
@@ -116,7 +116,7 @@ void turret_phaser_dinit()
     self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
     self.aim_flags = TFL_AIM_LEAD;
 
-    if (turret_stdproc_init("phaser_std",0,"models/turrets/base.md3","models/turrets/phaser.md3") == 0)
+    if (turret_stdproc_init("phaser_std", TRUE, "models/turrets/base.md3","models/turrets/phaser.md3", TID_PHASER) == 0)
     {
         remove(self);
         return;
index 63466084a54d88a1bda1ef292bcb3f24f1a4dc8f..a19ccfe4ede34e9a430c4ebeace414aa258ccd1b 100644 (file)
@@ -124,7 +124,7 @@ void turret_plasma_std_init()
     self.aim_flags      = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_GROUND2;
     self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MISSILEKILL;
 
-    if (turret_stdproc_init("plasma_std",FALSE,"models/turrets/base.md3","models/turrets/plasma.md3") == 0)
+    if (turret_stdproc_init("plasma_std", TRUE, "models/turrets/base.md3", "models/turrets/plasma.md3", TID_PLASMA) == 0)
     {
         remove(self);
         return;
@@ -156,7 +156,7 @@ void turret_plasma_dual_init()
     self.aim_flags      = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE  | TFL_AIM_GROUND2 ;
     self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL;
 
-    if (turret_stdproc_init("plasma_dual",0,"models/turrets/base.md3","models/turrets/plasmad.md3") == 0)
+    if (turret_stdproc_init("plasma_dual", TRUE, "models/turrets/base.md3", "models/turrets/plasmad.md3", TID_PLASMA_DUAL) == 0)
     {
         remove(self);
         return;
index 443cd8b5626ef15645bdb0beb8c76c6811979dae..d05fb47c6ba1137a31d981ea16917f7ac8990996 100644 (file)
@@ -145,7 +145,7 @@ void turret_tesla_dinit()
     self.aim_flags           = TFL_AIM_NO;
     self.track_flags         = TFL_TRACK_NO;
 
-    if (turret_stdproc_init("tesla_std",0,"models/turrets/tesla_base.md3","models/turrets/tesla_head.md3") == 0)
+    if (turret_stdproc_init("tesla_std", TRUE, "models/turrets/tesla_base.md3", "models/turrets/tesla_head.md3", TID_TESLA) == 0)
     {
         remove(self);
         return;
index d1d48c46cdb82b4f5d90746ea7ab8c5d42afe041..72d117f4eaec7ab978799e12698ab2a4c8d2e949 100644 (file)
@@ -704,7 +704,7 @@ void turret_walker_dinit()
     self.turret_diehook = walker_diehook;
 
     self.ticrate = 0.05;
-    if (turret_stdproc_init("walker_std",FALSE,"models/turrets/walker_body.md3","models/turrets/walker_head_minigun.md3") == 0)
+    if (turret_stdproc_init("walker_std", TRUE, "models/turrets/walker_body.md3", "models/turrets/walker_head_minigun.md3", TID_WALKER) == 0)
     {
         remove(self);
         return;