]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Vehicles: factor out some bumblebee attacks
authorTimePath <andrew.hardaker1995@gmail.com>
Wed, 30 Sep 2015 23:40:19 +0000 (09:40 +1000)
committerTimePath <andrew.hardaker1995@gmail.com>
Wed, 30 Sep 2015 23:40:19 +0000 (09:40 +1000)
qcsrc/common/vehicles/vehicle/bumblebee.qc
qcsrc/common/vehicles/vehicle/bumblebee_weapons.qc [new file with mode: 0644]

index b4fcd182df52f20a1296d13ff750aa497ae62cee..7176142133ca0d6da065ccf97d427c9cb12ff4f0 100644 (file)
@@ -2,6 +2,8 @@
 #define VEHICLE_BUMBLEBEE
 #include "bumblebee.qh"
 
+#include "bumblebee_weapons.qc"
+
 CLASS(Bumblebee, Vehicle)
 /* spawnflags */ ATTRIB(Bumblebee, spawnflags, int, VHF_DMGSHAKE);
 /* mins       */ ATTRIB(Bumblebee, mins, vector, '-245 -130 -130');
@@ -17,8 +19,8 @@ CLASS(Bumblebee, Vehicle)
 /* fullname   */ ATTRIB(Bumblebee, vehicle_name, string, _("Bumblebee"));
 /* icon       */ ATTRIB(Bumblebee, m_icon, string, "vehicle_bumble");
 ENDCLASS(Bumblebee)
-
 REGISTER_VEHICLE(BUMBLEBEE, NEW(Bumblebee));
+
 #endif
 
 #ifdef IMPLEMENTATION
@@ -27,6 +29,8 @@ const float BRG_SETUP = 2;
 const float BRG_START = 4;
 const float BRG_END = 8;
 
+#include "bumblebee_weapons.qc"
+
 #ifdef SVQC
 float autocvar_g_vehicle_bumblebee_speed_forward;
 float autocvar_g_vehicle_bumblebee_speed_strafe;
@@ -49,14 +53,6 @@ float autocvar_g_vehicle_bumblebee_shield;
 float autocvar_g_vehicle_bumblebee_shield_regen;
 float autocvar_g_vehicle_bumblebee_shield_regen_pause;
 
-float autocvar_g_vehicle_bumblebee_cannon_cost;
-float autocvar_g_vehicle_bumblebee_cannon_damage;
-float autocvar_g_vehicle_bumblebee_cannon_radius;
-float autocvar_g_vehicle_bumblebee_cannon_refire;
-float autocvar_g_vehicle_bumblebee_cannon_speed;
-float autocvar_g_vehicle_bumblebee_cannon_spread;
-float autocvar_g_vehicle_bumblebee_cannon_force;
-
 float autocvar_g_vehicle_bumblebee_cannon_ammo;
 float autocvar_g_vehicle_bumblebee_cannon_ammo_regen;
 float autocvar_g_vehicle_bumblebee_cannon_ammo_regen_pause;
@@ -98,17 +94,6 @@ vector autocvar_g_vehicle_bumblebee_bouncepain;
 
 bool autocvar_g_vehicle_bumblebee = 0;
 
-float bumble_raygun_send(entity to, int sf);
-
-void bumblebee_fire_cannon(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),
-                                               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, PROJECTILE_BUMBLE_GUN, 0, true, true, _owner);
-}
-
 float bumblebee_gunner_frame()
 {SELFPARAM();
        entity vehic    = self.vehicle.owner;
@@ -738,35 +723,6 @@ void bumblebee_diethink()
        self.nextthink = time + 0.1;
 }
 
-float bumble_raygun_send(entity to, float sf)
-{SELFPARAM();
-       WriteByte(MSG_ENTITY, ENT_CLIENT_BUMBLE_RAYGUN);
-
-       WriteByte(MSG_ENTITY, sf);
-       if(sf & BRG_SETUP)
-       {
-               WriteByte(MSG_ENTITY, num_for_edict(self.realowner));
-               WriteByte(MSG_ENTITY, self.realowner.team);
-               WriteByte(MSG_ENTITY, self.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);
-       }
-
-       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);
-       }
-
-       return true;
-}
-
 void spawnfunc_vehicle_bumblebee()
 {SELFPARAM();
        if(!autocvar_g_vehicle_bumblebee) { remove(self); return; }
@@ -1014,82 +970,6 @@ void CSQC_BUMBLE_GUN_HUD()
                                         string_null);
 }
 
-void bumble_raygun_draw()
-{SELFPARAM();
-       float _len;
-       vector _dir;
-       vector _vtmp1, _vtmp2;
-
-       _len = vlen(self.origin - self.move_origin);
-       _dir = normalize(self.move_origin - self.origin);
-
-       if(self.total_damages < time)
-       {
-               boxparticles(self.traileffect, self, self.origin, self.origin + _dir * -64, _dir * -_len , _dir * -_len, 1, PARTICLES_USEALPHA);
-               boxparticles(self.lip, self, self.move_origin, self.move_origin + _dir * -64, _dir * -200 , _dir * -200, 1, PARTICLES_USEALPHA);
-               self.total_damages = time + 0.1;
-       }
-
-       float i, df, sz, al;
-       for(i = -0.1; i < 0.2; i += 0.1)
-       {
-               df = DRAWFLAG_NORMAL; //((random() < 0.5) ? DRAWFLAG_ADDITIVE : DRAWFLAG_SCREEN);
-               sz = 5 + random() * 5;
-               al = 0.25 + random() * 0.5;
-               _vtmp1 = self.origin + _dir * _len * (0.25 + i);
-               _vtmp1 += (randomvec() * (_len * 0.2) * (frametime * 2));       //self.raygun_l1;
-               Draw_CylindricLine(self.origin, _vtmp1, sz, "gfx/colors/white.tga", 1, 1, self.colormod, al, df, view_origin);
-
-               _vtmp2 = self.origin + _dir * _len * (0.5 + i);
-               _vtmp2 += (randomvec() * (_len * 0.2) * (frametime * 5));       //self.raygun_l2;
-               Draw_CylindricLine(_vtmp1, _vtmp2, sz, "gfx/colors/white.tga", 1, 1, self.colormod, al, df, view_origin);
-
-               _vtmp1 = self.origin + _dir * _len * (0.75 + i);
-               _vtmp1 += randomvec() * (_len * 0.2) * (frametime * 10);     //self.raygun_l3;
-               Draw_CylindricLine(_vtmp2, _vtmp1, sz, "gfx/colors/white.tga", 1, 1, self.colormod, al, df, view_origin);
-
-               Draw_CylindricLine(_vtmp1, self.move_origin +  randomvec() * 32, sz, "gfx/colors/white.tga", 1, 1, self.colormod, al, df, view_origin);
-       }
-}
-
-void bumble_raygun_read(bool bIsNew)
-{SELFPARAM();
-       int sf = ReadByte();
-
-       if(sf & BRG_SETUP)
-       {
-               self.cnt  = ReadByte();
-               self.team = ReadByte();
-               self.cnt  = ReadByte();
-
-               if(self.cnt)
-                       self.colormod = '1 0 0';
-               else
-                       self.colormod = '0 1 0';
-
-               self.traileffect = particleeffectnum(EFFECT_BUMBLEBEE_HEAL_MUZZLEFLASH);
-               self.lip = particleeffectnum(EFFECT_BUMBLEBEE_HEAL_IMPACT);
-
-               self.draw = bumble_raygun_draw;
-       }
-
-
-       if(sf & BRG_START)
-       {
-               self.origin_x = ReadCoord();
-               self.origin_y = ReadCoord();
-               self.origin_z = ReadCoord();
-               setorigin(self, self.origin);
-       }
-
-       if(sf & BRG_END)
-       {
-               self.move_origin_x = ReadCoord();
-               self.move_origin_y = ReadCoord();
-               self.move_origin_z = ReadCoord();
-       }
-}
-
                METHOD(Bumblebee, vr_hud, bool(Bumblebee thisveh))
                {
                        Vehicles_drawHUD(VEH_BUMBLEBEE.m_icon, "vehicle_bumble_weapon1", "vehicle_bumble_weapon2",
@@ -1110,5 +990,5 @@ void bumble_raygun_read(bool bIsNew)
                        return true;
                }
 
-#endif // CSQC
-#endif // REGISTER_VEHICLE
+#endif
+#endif
diff --git a/qcsrc/common/vehicles/vehicle/bumblebee_weapons.qc b/qcsrc/common/vehicles/vehicle/bumblebee_weapons.qc
new file mode 100644 (file)
index 0000000..5838b73
--- /dev/null
@@ -0,0 +1,144 @@
+#ifndef VEHICLE_BUMBLEBEE_WEAPONS_H
+#define VEHICLE_BUMBLEBEE_WEAPONS_H
+
+#include "../../weapons/all.qh"
+
+#endif
+
+#ifdef IMPLEMENTATION
+
+#ifdef SVQC
+
+float autocvar_g_vehicle_bumblebee_cannon_cost;
+float autocvar_g_vehicle_bumblebee_cannon_damage;
+float autocvar_g_vehicle_bumblebee_cannon_radius;
+float autocvar_g_vehicle_bumblebee_cannon_refire;
+float autocvar_g_vehicle_bumblebee_cannon_speed;
+float autocvar_g_vehicle_bumblebee_cannon_spread;
+float autocvar_g_vehicle_bumblebee_cannon_force;
+
+float bumble_raygun_send(entity to, int sf);
+
+void bumblebee_fire_cannon(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),
+                        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, PROJECTILE_BUMBLE_GUN, 0, true, true, _owner);
+}
+
+float bumble_raygun_send(entity to, float sf)
+{SELFPARAM();
+    WriteByte(MSG_ENTITY, ENT_CLIENT_BUMBLE_RAYGUN);
+
+    WriteByte(MSG_ENTITY, sf);
+    if(sf & BRG_SETUP)
+    {
+        WriteByte(MSG_ENTITY, num_for_edict(self.realowner));
+        WriteByte(MSG_ENTITY, self.realowner.team);
+        WriteByte(MSG_ENTITY, self.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);
+    }
+
+    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);
+    }
+
+    return true;
+}
+
+#endif
+
+#ifdef CSQC
+
+void bumble_raygun_draw();
+
+void bumble_raygun_read(bool bIsNew)
+{SELFPARAM();
+    int sf = ReadByte();
+
+    if(sf & BRG_SETUP)
+    {
+        self.cnt  = ReadByte();
+        self.team = ReadByte();
+        self.cnt  = ReadByte();
+
+        if(self.cnt)
+            self.colormod = '1 0 0';
+        else
+            self.colormod = '0 1 0';
+
+        self.traileffect = particleeffectnum(EFFECT_BUMBLEBEE_HEAL_MUZZLEFLASH);
+        self.lip = particleeffectnum(EFFECT_BUMBLEBEE_HEAL_IMPACT);
+
+        self.draw = bumble_raygun_draw;
+    }
+
+
+    if(sf & BRG_START)
+    {
+        self.origin_x = ReadCoord();
+        self.origin_y = ReadCoord();
+        self.origin_z = ReadCoord();
+        setorigin(self, self.origin);
+    }
+
+    if(sf & BRG_END)
+    {
+        self.move_origin_x = ReadCoord();
+        self.move_origin_y = ReadCoord();
+        self.move_origin_z = ReadCoord();
+    }
+}
+
+void bumble_raygun_draw()
+{SELFPARAM();
+    float _len;
+    vector _dir;
+    vector _vtmp1, _vtmp2;
+
+    _len = vlen(self.origin - self.move_origin);
+    _dir = normalize(self.move_origin - self.origin);
+
+    if(self.total_damages < time)
+    {
+        boxparticles(self.traileffect, self, self.origin, self.origin + _dir * -64, _dir * -_len , _dir * -_len, 1, PARTICLES_USEALPHA);
+        boxparticles(self.lip, self, self.move_origin, self.move_origin + _dir * -64, _dir * -200 , _dir * -200, 1, PARTICLES_USEALPHA);
+        self.total_damages = time + 0.1;
+    }
+
+    float i, df, sz, al;
+    for(i = -0.1; i < 0.2; i += 0.1)
+    {
+        df = DRAWFLAG_NORMAL; //((random() < 0.5) ? DRAWFLAG_ADDITIVE : DRAWFLAG_SCREEN);
+        sz = 5 + random() * 5;
+        al = 0.25 + random() * 0.5;
+        _vtmp1 = self.origin + _dir * _len * (0.25 + i);
+        _vtmp1 += (randomvec() * (_len * 0.2) * (frametime * 2));       //self.raygun_l1;
+        Draw_CylindricLine(self.origin, _vtmp1, sz, "gfx/colors/white.tga", 1, 1, self.colormod, al, df, view_origin);
+
+        _vtmp2 = self.origin + _dir * _len * (0.5 + i);
+        _vtmp2 += (randomvec() * (_len * 0.2) * (frametime * 5));       //self.raygun_l2;
+        Draw_CylindricLine(_vtmp1, _vtmp2, sz, "gfx/colors/white.tga", 1, 1, self.colormod, al, df, view_origin);
+
+        _vtmp1 = self.origin + _dir * _len * (0.75 + i);
+        _vtmp1 += randomvec() * (_len * 0.2) * (frametime * 10);     //self.raygun_l3;
+        Draw_CylindricLine(_vtmp2, _vtmp1, sz, "gfx/colors/white.tga", 1, 1, self.colormod, al, df, view_origin);
+
+        Draw_CylindricLine(_vtmp1, self.move_origin +  randomvec() * 32, sz, "gfx/colors/white.tga", 1, 1, self.colormod, al, df, view_origin);
+    }
+}
+
+#endif
+
+#endif