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