(float[] start, float[] forward)
| 232 | private static final float[] end = {0, 0, 0}; |
| 233 | |
| 234 | static void Heatbeam(float[] start, float[] forward) { |
| 235 | float len; |
| 236 | int j; |
| 237 | cparticle_t p; |
| 238 | int i; |
| 239 | float c, s; |
| 240 | float ltime; |
| 241 | float step = 32.0f, rstep; |
| 242 | float start_pt; |
| 243 | float rot; |
| 244 | float variance; |
| 245 | |
| 246 | Math3D.VectorMA(start, 4096, forward, end); |
| 247 | |
| 248 | Math3D.VectorCopy(start, move); |
| 249 | Math3D.VectorSubtract(end, start, vec); |
| 250 | len = Math3D.VectorNormalize(vec); |
| 251 | |
| 252 | // FIXME - pmm - these might end up using old values? |
| 253 | // MakeNormalVectors (vec, right, up); |
| 254 | Math3D.VectorCopy(ClientGlobals.cl.v_right, right); |
| 255 | Math3D.VectorCopy(ClientGlobals.cl.v_up, up); |
| 256 | if (ClientGlobals.vidref_val == Defines.VIDREF_GL) { // GL mode |
| 257 | Math3D.VectorMA(move, -0.5f, right, move); |
| 258 | Math3D.VectorMA(move, -0.5f, up, move); |
| 259 | } |
| 260 | // otherwise assume SOFT |
| 261 | |
| 262 | ltime = (float) ClientGlobals.cl.time / 1000.0f; |
| 263 | start_pt = ltime * 96.0f % step; |
| 264 | Math3D.VectorMA(move, start_pt, vec, move); |
| 265 | |
| 266 | Math3D.VectorScale(vec, step, vec); |
| 267 | |
| 268 | // Com_Printf ("%f\n", ltime); |
| 269 | rstep = (float) (Math.PI / 10.0); |
| 270 | float M_PI2 = (float) (Math.PI * 2.0); |
| 271 | for (i = (int) start_pt; i < len; i += step) { |
| 272 | if (i > step * 5) // don't bother after the 5th ring |
| 273 | break; |
| 274 | |
| 275 | for (rot = 0; rot < M_PI2; rot += rstep) { |
| 276 | |
| 277 | if (CL_fx.free_particles == null) |
| 278 | return; |
| 279 | |
| 280 | p = CL_fx.free_particles; |
| 281 | CL_fx.free_particles = p.next; |
| 282 | p.next = CL_fx.active_particles; |
| 283 | CL_fx.active_particles = p; |
| 284 | |
| 285 | p.time = ClientGlobals.cl.time; |
| 286 | Math3D.VectorClear(p.accel); |
| 287 | // rot+= fmod(ltime, 12.0)*M_PI; |
| 288 | // c = cos(rot)/2.0; |
| 289 | // s = sin(rot)/2.0; |
| 290 | // variance = 0.4 + ((float)rand()/(float)RAND_MAX) *0.2; |
| 291 | variance = 0.5f; |
no test coverage detected