summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2012-03-24 00:33:58 +0200
committerPerttu Ahola <celeron55@gmail.com>2012-03-24 04:24:26 +0200
commit77120a021df955947841f9646cb61d67a272618b (patch)
treee2151fa25d2247547cdddbaa2da19f618d3d76d7
parent6c14025b2d416105915440e114de927c26e925ac (diff)
downloadminetest-77120a021df955947841f9646cb61d67a272618b.tar.gz
minetest-77120a021df955947841f9646cb61d67a272618b.tar.bz2
minetest-77120a021df955947841f9646cb61d67a272618b.zip
Digging and placing sounds
-rw-r--r--src/camera.cpp14
-rw-r--r--src/game.cpp73
-rw-r--r--src/tool.cpp11
-rw-r--r--src/tool.h14
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),