]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/vehicles/vehicle/bumblebee_weapons.qc
Use the effect entity instead of strings for vehicle projectile muzzle effects
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / vehicles / vehicle / bumblebee_weapons.qc
index 14f4fbf6af9565b271b438c18095f35cb8b1a57a..81fd93aa02d5e2da6178ac312b0a056cbcfee878 100644 (file)
@@ -1,30 +1,15 @@
-#ifndef VEHICLE_BUMBLEBEE_WEAPONS_H
-#define VEHICLE_BUMBLEBEE_WEAPONS_H
-
-#include <common/weapons/all.qh>
-
-#endif
-
-#ifdef IMPLEMENTATION
+#include "bumblebee_weapons.qh"
 
+#ifdef GAMEQC
 REGISTER_NET_LINKED(ENT_CLIENT_BUMBLE_RAYGUN)
+#endif
 
 #ifdef SVQC
 
-float autocvar_g_vehicle_bumblebee_cannon_cost = 2;
-float autocvar_g_vehicle_bumblebee_cannon_damage = 60;
-float autocvar_g_vehicle_bumblebee_cannon_radius = 225;
-float autocvar_g_vehicle_bumblebee_cannon_refire = 0.2;
-float autocvar_g_vehicle_bumblebee_cannon_speed = 20000;
-float autocvar_g_vehicle_bumblebee_cannon_spread = 0.02;
-float autocvar_g_vehicle_bumblebee_cannon_force = -35;
-
-bool bumble_raygun_send(entity this, entity to, int sf);
-
-void bumblebee_fire_cannon(entity _gun, string _tagname, entity _owner)
+void bumblebee_fire_cannon(entity this, entity _gun, string _tagname, entity _owner)
 {
     vector v = gettaginfo(_gun, gettagindex(_gun, _tagname));
-    vehicles_projectile(EFFECT_BIGPLASMA_MUZZLEFLASH.eent_eff_name, SND_VEH_BUMBLEBEE_FIRE,
+    vehicles_projectile(this, EFFECT_BIGPLASMA_MUZZLEFLASH, SND_VEH_BUMBLEBEE_FIRE,
                         v, normalize(v_forward + randomvec() * autocvar_g_vehicle_bumblebee_cannon_spread) * autocvar_g_vehicle_bumblebee_cannon_speed,
                         autocvar_g_vehicle_bumblebee_cannon_damage, autocvar_g_vehicle_bumblebee_cannon_radius, autocvar_g_vehicle_bumblebee_cannon_force,  0,
                         DEATH_VH_BUMB_GUN.m_id, PROJECTILE_BUMBLE_GUN, 0, true, true, _owner);
@@ -37,23 +22,19 @@ bool bumble_raygun_send(entity this, entity to, float sf)
     WriteByte(MSG_ENTITY, sf);
     if(sf & BRG_SETUP)
     {
-        WriteByte(MSG_ENTITY, etof(self.realowner));
-        WriteByte(MSG_ENTITY, self.realowner.team);
-        WriteByte(MSG_ENTITY, self.cnt);
+        WriteByte(MSG_ENTITY, etof(this.realowner));
+        WriteByte(MSG_ENTITY, this.realowner.team);
+        WriteByte(MSG_ENTITY, this.cnt);
     }
 
     if(sf & BRG_START)
     {
-        WriteCoord(MSG_ENTITY, self.hook_start_x);
-        WriteCoord(MSG_ENTITY, self.hook_start_y);
-        WriteCoord(MSG_ENTITY, self.hook_start_z);
+        WriteVector(MSG_ENTITY, this.hook_start);
     }
 
     if(sf & BRG_END)
     {
-        WriteCoord(MSG_ENTITY, self.hook_end_x);
-        WriteCoord(MSG_ENTITY, self.hook_end_y);
-        WriteCoord(MSG_ENTITY, self.hook_end_z);
+        WriteVector(MSG_ENTITY, this.hook_end);
     }
 
     return true;
@@ -65,41 +46,40 @@ bool bumble_raygun_send(entity this, entity to, float sf)
 
 void bumble_raygun_draw(entity this);
 
+.vector bumble_origin;
+
 NET_HANDLE(ENT_CLIENT_BUMBLE_RAYGUN, bool isnew)
 {
     int sf = ReadByte();
 
     if(sf & BRG_SETUP)
     {
-        self.cnt  = ReadByte();
-        self.team = ReadByte();
-        self.cnt  = ReadByte();
+        this.cnt  = ReadByte();
+        this.team = ReadByte();
+        this.count  = ReadByte();
 
-        if(self.cnt)
-            self.colormod = '1 0 0';
+        if(this.count)
+            this.colormod = '1 0 0';
         else
-            self.colormod = '0 1 0';
+            this.colormod = '0 1 0';
 
-        self.traileffect = EFFECT_BUMBLEBEE_HEAL_MUZZLEFLASH.m_id;
-        self.lip = particleeffectnum(EFFECT_BUMBLEBEE_HEAL_IMPACT);
+        this.traileffect = EFFECT_BUMBLEBEE_HEAL_MUZZLEFLASH.m_id;
+        this.lip = particleeffectnum(EFFECT_BUMBLEBEE_HEAL_IMPACT);
 
-        self.draw = bumble_raygun_draw;
+        this.draw = bumble_raygun_draw;
+        if (isnew) IL_PUSH(g_drawables, this);
     }
 
 
     if(sf & BRG_START)
     {
-        self.origin_x = ReadCoord();
-        self.origin_y = ReadCoord();
-        self.origin_z = ReadCoord();
-        setorigin(self, self.origin);
+        this.origin = ReadVector();
+        setorigin(this, this.origin);
     }
 
     if(sf & BRG_END)
     {
-        self.move_origin_x = ReadCoord();
-        self.move_origin_y = ReadCoord();
-        self.move_origin_z = ReadCoord();
+        this.bumble_origin = ReadVector();
     }
     return true;
 }
@@ -111,13 +91,13 @@ void bumble_raygun_draw(entity this)
     vector _dir;
     vector _vtmp1, _vtmp2;
 
-    _len = vlen(this.origin - this.move_origin);
-    _dir = normalize(this.move_origin - this.origin);
+    _len = vlen(this.origin - this.bumble_origin);
+    _dir = normalize(this.bumble_origin - this.origin);
 
     if(this.bumble_raygun_nextdraw < time)
     {
         boxparticles(particleeffectnum(Effects_from(this.traileffect)), this, this.origin, this.origin + _dir * -64, _dir * -_len , _dir * -_len, 1, PARTICLES_USEALPHA);
-        boxparticles(this.lip, this, this.move_origin, this.move_origin + _dir * -64, _dir * -200 , _dir * -200, 1, PARTICLES_USEALPHA);
+        boxparticles(this.lip, this, this.bumble_origin, this.bumble_origin + _dir * -64, _dir * -200 , _dir * -200, 1, PARTICLES_USEALPHA);
         this.bumble_raygun_nextdraw = time + 0.1;
     }
 
@@ -139,10 +119,8 @@ void bumble_raygun_draw(entity this)
         _vtmp1 += randomvec() * (_len * 0.2) * (frametime * 10);     //this.raygun_l3;
         Draw_CylindricLine(_vtmp2, _vtmp1, sz, "gfx/colors/white.tga", 1, 1, this.colormod, al, df, view_origin);
 
-        Draw_CylindricLine(_vtmp1, this.move_origin +  randomvec() * 32, sz, "gfx/colors/white.tga", 1, 1, this.colormod, al, df, view_origin);
+        Draw_CylindricLine(_vtmp1, this.bumble_origin +  randomvec() * 32, sz, "gfx/colors/white.tga", 1, 1, this.colormod, al, df, view_origin);
     }
 }
 
 #endif
-
-#endif