Digging and placing sounds
authorPerttu Ahola <celeron55@gmail.com>
Fri, 23 Mar 2012 22:33:58 +0000 (00:33 +0200)
committerPerttu Ahola <celeron55@gmail.com>
Sat, 24 Mar 2012 02:24:26 +0000 (04:24 +0200)
src/camera.cpp
src/game.cpp
src/tool.cpp
src/tool.h

index fada476085dabe4368f8d4f9bdd2bf5c3798428d..0148298cb627c22bcfd87522cbeb46b99b6e60da 100644 (file)
@@ -188,13 +188,23 @@ void Camera::step(f32 dtime)
        if (m_digging_button != -1)
        {
                f32 offset = dtime * 3.5;
+               float m_digging_anim_was = m_digging_anim;
                m_digging_anim += offset;
                if (m_digging_anim >= 1)
                {
                        m_digging_anim = 0;
                        m_digging_button = -1;
-                       MtEvent *e = new SimpleTriggerEvent("CameraDig");
-                       m_gamedef->event()->put(e);
+               }
+               float lim = 0.15;
+               if(m_digging_anim_was < lim && m_digging_anim >= lim)
+               {
+                       if(m_digging_button == 0){
+                               MtEvent *e = new SimpleTriggerEvent("CameraPunchLeft");
+                               m_gamedef->event()->put(e);
+                       } else if(m_digging_button == 1){
+                               MtEvent *e = new SimpleTriggerEvent("CameraPunchRight");
+                               m_gamedef->event()->put(e);
+                       }
                }
        }
 }
index 4c9442c00a65a3a01138a0619ab1d6a2a603f6b7..3cad4c89543030903777cfa31ada872a145a0d64 100644 (file)
@@ -784,13 +784,15 @@ class SoundMaker
 {
 public:
        ISoundManager *m_sound;
+       
+       float m_player_step_timer;
 
        SimpleSoundSpec m_player_step_sound;
-       float m_player_step_timer;
+       SimpleSoundSpec m_player_leftpunch_sound;
+       SimpleSoundSpec m_player_rightpunch_sound;
 
        SoundMaker(ISoundManager *sound):
                m_sound(sound),
-               m_player_step_sound("default_grass_walk"),
                m_player_step_timer(0)
        {
        }
@@ -803,6 +805,20 @@ public:
                }
        }
 
+       void playPlayerLeftPunch()
+       {
+               if(m_player_leftpunch_sound.exists()){
+                       m_sound->playSound(m_player_leftpunch_sound, false);
+               }
+       }
+
+       void playPlayerRightPunch()
+       {
+               if(m_player_rightpunch_sound.exists()){
+                       m_sound->playSound(m_player_rightpunch_sound, false);
+               }
+       }
+
        static void viewBobbingStep(MtEvent *e, void *data)
        {
                SoundMaker *sm = (SoundMaker*)data;
@@ -817,6 +833,19 @@ public:
 
        static void playerJump(MtEvent *e, void *data)
        {
+               //SoundMaker *sm = (SoundMaker*)data;
+       }
+
+       static void cameraPunchLeft(MtEvent *e, void *data)
+       {
+               SoundMaker *sm = (SoundMaker*)data;
+               sm->playPlayerLeftPunch();
+       }
+
+       static void cameraPunchRight(MtEvent *e, void *data)
+       {
+               SoundMaker *sm = (SoundMaker*)data;
+               sm->playPlayerRightPunch();
        }
 
        void registerReceiver(MtEventManager *mgr)
@@ -824,6 +853,8 @@ public:
                mgr->reg("ViewBobbingStep", SoundMaker::viewBobbingStep, this);
                mgr->reg("PlayerRegainGround", SoundMaker::playerRegainGround, this);
                mgr->reg("PlayerJump", SoundMaker::playerJump, this);
+               mgr->reg("CameraPunchLeft", SoundMaker::cameraPunchLeft, this);
+               mgr->reg("CameraPunchRight", SoundMaker::cameraPunchRight, this);
        }
 
        void step(float dtime)
@@ -904,11 +935,26 @@ void the_game(
        
        // Test sounds
        sound->loadSound("default_grass_footstep", porting::path_share + DIR_DELIM
-                       + "sounds" + DIR_DELIM + "default_grass_walk3_mono.ogg");
+                       + "sounds" + DIR_DELIM + "default_grass_walk1.ogg");
+       sound->loadSound("default_grass_footstep", porting::path_share + DIR_DELIM
+                       + "sounds" + DIR_DELIM + "default_grass_walk2.ogg");
        sound->loadSound("default_grass_footstep", porting::path_share + DIR_DELIM
-                       + "sounds" + DIR_DELIM + "default_grass_walk4_mono.ogg");
-       //sound->playSound("default_grass_walk", false, 1.0);
-       //sound->playSoundAt("default_grass_walk", true, 1.0, v3f(0,10,0)*BS);
+                       + "sounds" + DIR_DELIM + "default_grass_walk3.ogg");
+       
+       sound->loadSound("default_dig_crumbly", porting::path_share + DIR_DELIM
+                       + "sounds" + DIR_DELIM + "default_dig_crumbly1.ogg");
+       sound->loadSound("default_dig_crumbly", porting::path_share + DIR_DELIM
+                       + "sounds" + DIR_DELIM + "default_dig_crumbly2.ogg");
+       
+       sound->loadSound("default_dig_cracky", porting::path_share + DIR_DELIM
+                       + "sounds" + DIR_DELIM + "default_dig_cracky1.ogg");
+       
+       sound->loadSound("default_place_node", porting::path_share + DIR_DELIM
+                       + "sounds" + DIR_DELIM + "default_place_node1.ogg");
+       sound->loadSound("default_place_node", porting::path_share + DIR_DELIM
+                       + "sounds" + DIR_DELIM + "default_place_node2.ogg");
+       sound->loadSound("default_place_node", porting::path_share + DIR_DELIM
+                       + "sounds" + DIR_DELIM + "default_place_node3.ogg");
 
        // Add chat log output for errors to be shown in chat
        LogOutputBuffer chat_log_error_buf(LMT_ERROR);
@@ -2131,6 +2177,11 @@ void the_game(
                                }
                        }
                        
+                       // We can't actually know, but assume the sound of right-clicking
+                       // to be the sound of placing a node
+                       soundmaker.m_player_rightpunch_sound.gain = 0.5;
+                       soundmaker.m_player_rightpunch_sound.name = "default_place_node";
+                       
                        /*
                                Handle digging
                        */
@@ -2156,6 +2207,16 @@ void the_game(
                                        if(tp)
                                                params = getDigParams(nodedef->get(n).groups, tp);
                                }
+                               
+                               soundmaker.m_player_leftpunch_sound.gain = 0.5;
+                               if(params.main_group == "crumbly")
+                                       soundmaker.m_player_leftpunch_sound.name =
+                                                       "default_dig_crumbly";
+                               else if(params.main_group == "cracky")
+                                       soundmaker.m_player_leftpunch_sound.name =
+                                                       "default_dig_cracky";
+                               else
+                                       soundmaker.m_player_leftpunch_sound.name = "";
 
                                float dig_time_complete = 0.0;
 
index 40bcdc69a59616825d1607a925544164e691897d..dcd4fbdf8b9567dafa2cdf6b6e34c1e613801a5e 100644 (file)
@@ -77,10 +77,10 @@ DigParams getDigParams(const ItemGroupList &groups,
        switch(itemgroup_get(groups, "dig_immediate")){
        case 2:
                //infostream<<"dig_immediate=2"<<std::endl;
-               return DigParams(true, 0.5, 0);
+               return DigParams(true, 0.5, 0, "dig_immediate");
        case 3:
                //infostream<<"dig_immediate=3"<<std::endl;
-               return DigParams(true, 0.0, 0);
+               return DigParams(true, 0.0, 0, "dig_immediate");
        default:
                break;
        }
@@ -89,6 +89,7 @@ DigParams getDigParams(const ItemGroupList &groups,
        bool result_diggable = false;
        float result_time = 0.0;
        float result_wear = 0.0;
+       std::string result_main_group = "";
 
        int level = itemgroup_get(groups, "level");
        //infostream<<"level="<<level<<std::endl;
@@ -106,6 +107,7 @@ DigParams getDigParams(const ItemGroupList &groups,
                                result_time = time;
                                int leveldiff = cap.maxlevel - level;
                                result_wear = cap.maxwear / pow(4.0, (double)leveldiff);
+                               result_main_group = name;
                        }
                }
        }
@@ -121,7 +123,7 @@ DigParams getDigParams(const ItemGroupList &groups,
        }
 
        u16 wear_i = 65535.*result_wear;
-       return DigParams(result_diggable, result_time, wear_i);
+       return DigParams(result_diggable, result_time, wear_i, result_main_group);
 }
 
 DigParams getDigParams(const ItemGroupList &groups,
@@ -145,7 +147,7 @@ HitParams getHitParams(const ItemGroupList &groups,
        // Wear is the same as for digging a single node
        s16 wear = (float)digprop.wear;
 
-       return HitParams(hp, wear);
+       return HitParams(hp, wear, digprop.main_group);
 }
 
 HitParams getHitParams(const ItemGroupList &groups,
@@ -181,6 +183,7 @@ PunchDamageResult getPunchDamage(
                result.did_punch = true;
                result.wear = hitparams.wear;
                result.damage = hitparams.hp;
+               result.main_group = hitparams.main_group;
        }
 
        return result;
index 401bb1f53a16f4d0a6ef688814f8b50799ebeb57..a92a77294fb731e368441a77be5eab1c143f744c 100644 (file)
@@ -82,11 +82,14 @@ struct DigParams
        float time;
        // Caused wear
        u16 wear;
+       std::string main_group;
 
-       DigParams(bool a_diggable=false, float a_time=0, u16 a_wear=0):
+       DigParams(bool a_diggable=false, float a_time=0, u16 a_wear=0,
+                       std::string a_main_group=""):
                diggable(a_diggable),
                time(a_time),
-               wear(a_wear)
+               wear(a_wear),
+               main_group(a_main_group)
        {}
 };
 
@@ -100,10 +103,12 @@ struct HitParams
 {
        s16 hp;
        s16 wear;
+       std::string main_group;
 
-       HitParams(s16 hp_=0, s16 wear_=0):
+       HitParams(s16 hp_=0, s16 wear_=0, std::string main_group_=""):
                hp(hp_),
-               wear(wear_)
+               wear(wear_),
+               main_group(main_group_)
        {}
 };
 
@@ -118,6 +123,7 @@ struct PunchDamageResult
        bool did_punch;
        int damage;
        int wear;
+       std::string main_group;
 
        PunchDamageResult():
                did_punch(false),