]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/vehicles/vehicle/bumblebee_weapons.qc
Merge branch 'master' into Mario/stats_eloranking
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / vehicles / vehicle / bumblebee_weapons.qc
1 #include "bumblebee_weapons.qh"
2
3 REGISTER_NET_LINKED(ENT_CLIENT_BUMBLE_RAYGUN)
4
5 #ifdef SVQC
6
7 void bumblebee_fire_cannon(entity this, entity _gun, string _tagname, entity _owner)
8 {
9     vector v = gettaginfo(_gun, gettagindex(_gun, _tagname));
10     vehicles_projectile(this, EFFECT_BIGPLASMA_MUZZLEFLASH.eent_eff_name, SND_VEH_BUMBLEBEE_FIRE,
11                         v, normalize(v_forward + randomvec() * autocvar_g_vehicle_bumblebee_cannon_spread) * autocvar_g_vehicle_bumblebee_cannon_speed,
12                         autocvar_g_vehicle_bumblebee_cannon_damage, autocvar_g_vehicle_bumblebee_cannon_radius, autocvar_g_vehicle_bumblebee_cannon_force,  0,
13                         DEATH_VH_BUMB_GUN.m_id, PROJECTILE_BUMBLE_GUN, 0, true, true, _owner);
14 }
15
16 bool bumble_raygun_send(entity this, entity to, float sf)
17 {
18     WriteHeader(MSG_ENTITY, ENT_CLIENT_BUMBLE_RAYGUN);
19
20     WriteByte(MSG_ENTITY, sf);
21     if(sf & BRG_SETUP)
22     {
23         WriteByte(MSG_ENTITY, etof(this.realowner));
24         WriteByte(MSG_ENTITY, this.realowner.team);
25         WriteByte(MSG_ENTITY, this.cnt);
26     }
27
28     if(sf & BRG_START)
29     {
30         WriteVector(MSG_ENTITY, this.hook_start);
31     }
32
33     if(sf & BRG_END)
34     {
35         WriteVector(MSG_ENTITY, this.hook_end);
36     }
37
38     return true;
39 }
40
41 #endif
42
43 #ifdef CSQC
44
45 void bumble_raygun_draw(entity this);
46
47 .vector bumble_origin;
48
49 NET_HANDLE(ENT_CLIENT_BUMBLE_RAYGUN, bool isnew)
50 {
51     int sf = ReadByte();
52
53     if(sf & BRG_SETUP)
54     {
55         this.cnt  = ReadByte();
56         this.team = ReadByte();
57         this.count  = ReadByte();
58
59         if(this.count)
60             this.colormod = '1 0 0';
61         else
62             this.colormod = '0 1 0';
63
64         this.traileffect = EFFECT_BUMBLEBEE_HEAL_MUZZLEFLASH.m_id;
65         this.lip = particleeffectnum(EFFECT_BUMBLEBEE_HEAL_IMPACT);
66
67         this.draw = bumble_raygun_draw;
68         if (isnew) IL_PUSH(g_drawables, this);
69     }
70
71
72     if(sf & BRG_START)
73     {
74         this.origin = ReadVector();
75         setorigin(this, this.origin);
76     }
77
78     if(sf & BRG_END)
79     {
80         this.bumble_origin = ReadVector();
81     }
82     return true;
83 }
84
85 .float bumble_raygun_nextdraw;
86 void bumble_raygun_draw(entity this)
87 {
88     float _len;
89     vector _dir;
90     vector _vtmp1, _vtmp2;
91
92     _len = vlen(this.origin - this.bumble_origin);
93     _dir = normalize(this.bumble_origin - this.origin);
94
95     if(this.bumble_raygun_nextdraw < time)
96     {
97         boxparticles(particleeffectnum(Effects_from(this.traileffect)), this, this.origin, this.origin + _dir * -64, _dir * -_len , _dir * -_len, 1, PARTICLES_USEALPHA);
98         boxparticles(this.lip, this, this.bumble_origin, this.bumble_origin + _dir * -64, _dir * -200 , _dir * -200, 1, PARTICLES_USEALPHA);
99         this.bumble_raygun_nextdraw = time + 0.1;
100     }
101
102     float i, df, sz, al;
103     for(i = -0.1; i < 0.2; i += 0.1)
104     {
105         df = DRAWFLAG_NORMAL; //((random() < 0.5) ? DRAWFLAG_ADDITIVE : DRAWFLAG_SCREEN);
106         sz = 5 + random() * 5;
107         al = 0.25 + random() * 0.5;
108         _vtmp1 = this.origin + _dir * _len * (0.25 + i);
109         _vtmp1 += (randomvec() * (_len * 0.2) * (frametime * 2));       //this.raygun_l1;
110         Draw_CylindricLine(this.origin, _vtmp1, sz, "gfx/colors/white.tga", 1, 1, this.colormod, al, df, view_origin);
111
112         _vtmp2 = this.origin + _dir * _len * (0.5 + i);
113         _vtmp2 += (randomvec() * (_len * 0.2) * (frametime * 5));       //this.raygun_l2;
114         Draw_CylindricLine(_vtmp1, _vtmp2, sz, "gfx/colors/white.tga", 1, 1, this.colormod, al, df, view_origin);
115
116         _vtmp1 = this.origin + _dir * _len * (0.75 + i);
117         _vtmp1 += randomvec() * (_len * 0.2) * (frametime * 10);     //this.raygun_l3;
118         Draw_CylindricLine(_vtmp2, _vtmp1, sz, "gfx/colors/white.tga", 1, 1, this.colormod, al, df, view_origin);
119
120         Draw_CylindricLine(_vtmp1, this.bumble_origin +  randomvec() * 32, sz, "gfx/colors/white.tga", 1, 1, this.colormod, al, df, view_origin);
121     }
122 }
123
124 #endif