diff options
-rw-r--r-- | src/camera.cpp | 14 | ||||
-rw-r--r-- | src/game.cpp | 73 | ||||
-rw-r--r-- | src/tool.cpp | 11 | ||||
-rw-r--r-- | src/tool.h | 14 |
4 files changed, 96 insertions, 16 deletions
diff --git a/src/camera.cpp b/src/camera.cpp index fada47608..0148298cb 100644 --- a/src/camera.cpp +++ b/src/camera.cpp @@ -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); + } } } } diff --git a/src/game.cpp b/src/game.cpp index 4c9442c00..3cad4c895 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -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; diff --git a/src/tool.cpp b/src/tool.cpp index 40bcdc69a..dcd4fbdf8 100644 --- a/src/tool.cpp +++ b/src/tool.cpp @@ -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; diff --git a/src/tool.h b/src/tool.h index 401bb1f53..a92a77294 100644 --- a/src/tool.h +++ b/src/tool.h @@ -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), |