MCPcopy Create free account
hub / github.com/bfbbdecomp/bfbb / zParPTankSnowUpdate

Function zParPTankSnowUpdate

src/SB/Game/zParPTank.cpp:525–580  ·  view source on GitHub ↗

Equivalent: float scheduling

Source from the content-addressed store, hash-verified

523
524// Equivalent: float scheduling
525static void zParPTankSnowUpdate(zParPTank* zp, float dt)
526{
527 snow_particle_data* end = snow_particles + zp->num_particles;
528 F32 fadein_life = 0.9f * snow_life;
529 F32 fadeout_life = 0.4f * snow_life;
530 F32 ilife = snow_life;
531 F32 ifadein = 2550.0f * (1.0f / ilife);
532 F32 ifadeout = 637.5f * (1.0f / ilife);
533 snow_pool.reset();
534 snow_particle_data* it = snow_particles;
535 while (it != end)
536 {
537 it->life -= dt;
538 if (it->life <= 0.0f)
539 {
540 end--;
541 *it = *end;
542 continue;
543 }
544
545 it->loc += it->vel * dt;
546 xVec4* _loc = (xVec4*)&it->loc;
547 F32 par_dist;
548 snow_pool.next();
549 if (!snow_pool.valid())
550 {
551 end = it;
552 break;
553 }
554
555 *(U32*)snow_pool.color = 0xFFFFFFFF;
556
557 if (it->life > fadein_life)
558 {
559 snow_pool.color->a = ifadein * (snow_life - it->life) + 0.5f;
560 }
561 else if (it->life < fadeout_life)
562 {
563 snow_pool.color->a = it->life * ifadeout + 0.5f;
564 }
565 else
566 {
567 snow_pool.color->a = 0xFF;
568 }
569
570 *snow_pool.pos = it->loc;
571 snow_pool.size->assign(it->size);
572 snow_pool.uv[0].assign(it->u, 0.875f);
573 snow_pool.uv[1].assign(0.125f + snow_pool.uv[0].x, 0.125f + snow_pool.uv[0].y);
574
575 it++;
576 }
577
578 snow_pool.flush();
579 zp->num_particles = end - snow_particles;
580}
581
582void zParPTankSpawnSnow(xVec3* pos, xVec3* vel, U32 count)

Callers

nothing calls this directly

Calls 4

validMethod · 0.80
resetMethod · 0.45
nextMethod · 0.45
flushMethod · 0.45

Tested by

no test coverage detected