Play player_damage.ogg when recieving damage and additionally play player_falling_dam...
authorPilzAdam <pilzadam@minetest.net>
Wed, 17 Apr 2013 18:13:47 +0000 (20:13 +0200)
committerPilzAdam <pilzadam@minetest.net>
Wed, 12 Jun 2013 20:27:06 +0000 (20:27 +0000)
src/environment.cpp
src/game.cpp

index ab6a6d3d345bcf92bb8d8334eea6f9ab5bed94ec..af05371ca699547a88dd8bd7dbd32b3ce53e214e 100644 (file)
@@ -40,6 +40,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #ifndef SERVER
 #include "clientmap.h"
 #include "localplayer.h"
+#include "event.h"
 #endif
 #include "daynightratio.h"
 #include "map.h"
@@ -2190,8 +2191,11 @@ void ClientEnvironment::step(float dtime)
                {
                        f32 damage_f = (speed - tolerance)/BS * post_factor;
                        u16 damage = (u16)(damage_f+0.5);
-                       if(damage != 0)
+                       if(damage != 0){
                                damageLocalPlayer(damage, true);
+                               MtEvent *e = new SimpleTriggerEvent("PlayerFallingDamage");
+                               m_gamedef->event()->put(e);
+                       }
                }
        }
        
index 2d43d05b8af697cf85f88bee560136e935756264..baf161e88d831655d1412751f8d8afd9de8eb872 100644 (file)
@@ -729,6 +729,18 @@ public:
                sm->m_sound->playSound(sm->m_ndef->get(nde->n).sound_dug, false);
        }
 
+       static void playerDamage(MtEvent *e, void *data)
+       {
+               SoundMaker *sm = (SoundMaker*)data;
+               sm->m_sound->playSound(SimpleSoundSpec("player_damage", 0.5), false);
+       }
+
+       static void playerFallingDamage(MtEvent *e, void *data)
+       {
+               SoundMaker *sm = (SoundMaker*)data;
+               sm->m_sound->playSound(SimpleSoundSpec("player_falling_damage", 0.5), false);
+       }
+
        void registerReceiver(MtEventManager *mgr)
        {
                mgr->reg("ViewBobbingStep", SoundMaker::viewBobbingStep, this);
@@ -737,6 +749,8 @@ public:
                mgr->reg("CameraPunchLeft", SoundMaker::cameraPunchLeft, this);
                mgr->reg("CameraPunchRight", SoundMaker::cameraPunchRight, this);
                mgr->reg("NodeDug", SoundMaker::nodeDug, this);
+               mgr->reg("PlayerDamage", SoundMaker::playerDamage, this);
+               mgr->reg("PlayerFallingDamage", SoundMaker::playerFallingDamage, this);
        }
 
        void step(float dtime)
@@ -2202,6 +2216,9 @@ void the_game(
                                        player->hurt_tilt_timer = 1.5;
                                        player->hurt_tilt_strength = event.player_damage.amount/2;
                                        player->hurt_tilt_strength = rangelim(player->hurt_tilt_strength, 2.0, 10.0);
+
+                                       MtEvent *e = new SimpleTriggerEvent("PlayerDamage");
+                                       gamedef->event()->put(e);
                                }
                                else if(event.type == CE_PLAYER_FORCE_MOVE)
                                {