Calculates damage and effect when a player falls down.
(SubgameEntity ent, GameExportsImpl gameExports)
| 505 | * Calculates damage and effect when a player falls down. |
| 506 | */ |
| 507 | private static void P_FallingDamage(SubgameEntity ent, GameExportsImpl gameExports) { |
| 508 | float delta; |
| 509 | int damage; |
| 510 | float[] dir = { 0, 0, 0 }; |
| 511 | |
| 512 | if (ent.s.modelindex != 255) |
| 513 | return; // not in the player model |
| 514 | |
| 515 | if (ent.movetype == GameDefines.MOVETYPE_NOCLIP) |
| 516 | return; |
| 517 | |
| 518 | gclient_t client = ent.getClient(); |
| 519 | if ((client.oldvelocity[2] < 0) |
| 520 | && (ent.velocity[2] > client.oldvelocity[2]) |
| 521 | && (null == ent.groundentity)) { |
| 522 | delta = client.oldvelocity[2]; |
| 523 | } else { |
| 524 | if (ent.groundentity == null) |
| 525 | return; |
| 526 | delta = ent.velocity[2] - client.oldvelocity[2]; |
| 527 | } |
| 528 | delta = delta * delta * 0.0001f; |
| 529 | |
| 530 | // never take falling damage if completely underwater |
| 531 | if (ent.waterlevel == 3) |
| 532 | return; |
| 533 | if (ent.waterlevel == 2) |
| 534 | delta *= 0.25; |
| 535 | if (ent.waterlevel == 1) |
| 536 | delta *= 0.5; |
| 537 | |
| 538 | if (delta < 1) |
| 539 | return; |
| 540 | |
| 541 | if (delta < 15) { |
| 542 | ent.s.event = Defines.EV_FOOTSTEP; |
| 543 | return; |
| 544 | } |
| 545 | |
| 546 | client.fall_value = delta * 0.5f; |
| 547 | if (client.fall_value > 40) |
| 548 | client.fall_value = 40; |
| 549 | client.fall_time = gameExports.level.time + Defines.FALL_TIME; |
| 550 | |
| 551 | if (delta > 30) { |
| 552 | if (ent.health > 0) { |
| 553 | if (delta >= 55) |
| 554 | ent.s.event = Defines.EV_FALLFAR; |
| 555 | else |
| 556 | ent.s.event = Defines.EV_FALL; |
| 557 | } |
| 558 | ent.pain_debounce_time = gameExports.level.time; // no normal pain |
| 559 | // sound |
| 560 | damage = (int) ((delta - 30) / 2); |
| 561 | if (damage < 1) |
| 562 | damage = 1; |
| 563 | Math3D.VectorSet(dir, 0, 0, 1); |
| 564 |
no test coverage detected