General effect handling for a player. @param gameExports
(GameExportsImpl gameExports)
| 578 | * @param gameExports |
| 579 | */ |
| 580 | private void P_WorldEffects(GameExportsImpl gameExports) { |
| 581 | boolean breather; |
| 582 | boolean envirosuit; |
| 583 | int waterlevel, old_waterlevel; |
| 584 | |
| 585 | if (current_player.movetype == GameDefines.MOVETYPE_NOCLIP) { |
| 586 | current_player.air_finished = gameExports.level.time + 12; // don't |
| 587 | // need air |
| 588 | return; |
| 589 | } |
| 590 | |
| 591 | waterlevel = current_player.waterlevel; |
| 592 | old_waterlevel = current_client.old_waterlevel; |
| 593 | current_client.old_waterlevel = waterlevel; |
| 594 | |
| 595 | breather = current_client.breather_framenum > gameExports.level.framenum; |
| 596 | envirosuit = current_client.enviro_framenum > gameExports.level.framenum; |
| 597 | |
| 598 | // |
| 599 | // if just entered a water volume, play a sound |
| 600 | // |
| 601 | if (old_waterlevel == 0 && waterlevel != 0) { |
| 602 | PlayerWeapon.PlayerNoise(current_player, current_player.s.origin, |
| 603 | GameDefines.PNOISE_SELF, gameExports); |
| 604 | if ((current_player.watertype & Defines.CONTENTS_LAVA) != 0) |
| 605 | gameExports.gameImports.sound(current_player, Defines.CHAN_BODY, |
| 606 | gameExports.gameImports.soundindex("player/lava_in.wav"), 1, |
| 607 | Defines.ATTN_NORM, 0); |
| 608 | else if ((current_player.watertype & Defines.CONTENTS_SLIME) != 0) |
| 609 | gameExports.gameImports.sound(current_player, Defines.CHAN_BODY, |
| 610 | gameExports.gameImports.soundindex("player/watr_in.wav"), 1, |
| 611 | Defines.ATTN_NORM, 0); |
| 612 | else if ((current_player.watertype & Defines.CONTENTS_WATER) != 0) |
| 613 | gameExports.gameImports.sound(current_player, Defines.CHAN_BODY, |
| 614 | gameExports.gameImports.soundindex("player/watr_in.wav"), 1, |
| 615 | Defines.ATTN_NORM, 0); |
| 616 | current_player.flags |= GameDefines.FL_INWATER; |
| 617 | |
| 618 | // clear damage_debounce, so the pain sound will play immediately |
| 619 | current_player.damage_debounce_time = gameExports.level.time - 1; |
| 620 | } |
| 621 | |
| 622 | // |
| 623 | // if just completely exited a water volume, play a sound |
| 624 | // |
| 625 | if (old_waterlevel != 0 && waterlevel == 0) { |
| 626 | PlayerWeapon.PlayerNoise(current_player, current_player.s.origin, |
| 627 | GameDefines.PNOISE_SELF, gameExports); |
| 628 | gameExports.gameImports |
| 629 | .sound(current_player, Defines.CHAN_BODY, gameExports.gameImports |
| 630 | .soundindex("player/watr_out.wav"), 1, |
| 631 | Defines.ATTN_NORM, 0); |
| 632 | current_player.flags &= ~GameDefines.FL_INWATER; |
| 633 | } |
| 634 | |
| 635 | // |
| 636 | // check for head just going under water |
| 637 | // |
no test coverage detected