MCPcopy Create free account
hub / github.com/TombEngine/TombEngine / UpdateShockwaves

Function UpdateShockwaves

TombEngine/Game/effects/tomb4fx.cpp:1407–1470  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1405}
1406
1407void UpdateShockwaves()
1408{
1409 for (auto& shockwave : ShockWaves)
1410 {
1411 if (shockwave.life <= 0)
1412 continue;
1413
1414 shockwave.StoreInterpolationData();
1415
1416 shockwave.life--;
1417
1418 // Spawn light.
1419 if (shockwave.HasLight)
1420 {
1421 auto lightColor = Color(shockwave.r / (float)UCHAR_MAX, shockwave.g / (float)UCHAR_MAX, shockwave.b / (float)UCHAR_MAX);
1422 auto pos = Vector3(shockwave.x, shockwave.y, shockwave.z);
1423 SpawnDynamicPointLight(pos, lightColor, shockwave.life / 4.0f);
1424 }
1425
1426 if (shockwave.style != (int)ShockwaveStyle::Knockback)
1427 {
1428 shockwave.outerRad += shockwave.speed;
1429 if (shockwave.style == (int)ShockwaveStyle::Sophia)
1430 shockwave.innerRad += shockwave.speed;
1431 }
1432 else
1433 {
1434 if (shockwave.life > (shockwave.sLife / 2))
1435 {
1436 shockwave.outerRad += shockwave.speed;
1437 shockwave.innerRad += shockwave.speed;
1438 }
1439 else
1440 {
1441 shockwave.outerRad -= shockwave.speed;
1442 shockwave.innerRad -= shockwave.speed;
1443 }
1444 }
1445
1446 shockwave.speed -= (shockwave.speed >> 4);
1447
1448 if (LaraItem->HitPoints > 0 && shockwave.damage)
1449 {
1450 const auto& bounds = GetClosestKeyframe(*LaraItem).BoundingBox;
1451 int dx = LaraItem->Pose.Position.x - shockwave.x;
1452 int dz = LaraItem->Pose.Position.z - shockwave.z;
1453 float dist = sqrt(SQUARE(dx) + SQUARE(dz));
1454 int angle = phd_atan(dz, dx);
1455
1456 // Damage player if inside shockwave.
1457 if (shockwave.y > (LaraItem->Pose.Position.y + bounds.Y1) &&
1458 shockwave.y < (LaraItem->Pose.Position.y + (bounds.Y2 + CLICK(1))) &&
1459 dist > shockwave.innerRad &&
1460 dist < shockwave.outerRad)
1461 {
1462 TriggerShockwaveHitEffect(
1463 LaraItem->Pose.Position.x, shockwave.y, LaraItem->Pose.Position.z,
1464 shockwave.r, shockwave.g, shockwave.b,

Callers 1

GamePhaseFunction · 0.85

Calls 6

SpawnDynamicPointLightFunction · 0.85
phd_atanFunction · 0.85
DoDamageFunction · 0.85
Vector3Function · 0.50

Tested by

no test coverage detected