From 77120a021df955947841f9646cb61d67a272618b Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Sat, 24 Mar 2012 00:33:58 +0200 Subject: [PATCH] Digging and placing sounds --- src/camera.cpp | 14 ++++++++-- src/game.cpp | 73 +++++++++++++++++++++++++++++++++++++++++++++----- src/tool.cpp | 11 +++++--- src/tool.h | 14 +++++++--- 4 files changed, 96 insertions(+), 16 deletions(-) diff --git a/src/camera.cpp b/src/camera.cpp index fada4760..0148298c 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 4c9442c0..3cad4c89 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 40bcdc69..dcd4fbdf 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"<