Digging and placing sounds

master
Perttu Ahola 2012-03-24 00:33:58 +02:00
parent 6c14025b2d
commit 77120a021d
4 changed files with 96 additions and 16 deletions

View 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);
}
}
}
}

View 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_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_walk2.ogg");
sound->loadSound("default_grass_footstep", porting::path_share + DIR_DELIM
+ "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;

View 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;

View 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),