From 2a12579fab7803fdee2fac2fa8a6837f131dde7a Mon Sep 17 00:00:00 2001 From: BlockMen Date: Sat, 24 Oct 2015 12:28:35 +0200 Subject: [PATCH] Add support for audio feedback if placing node failed --- doc/lua_api.txt | 1 + src/game.cpp | 6 +++++- src/itemdef.cpp | 12 +++++++++--- src/itemdef.h | 1 + src/script/common/c_content.cpp | 3 +++ 5 files changed, 19 insertions(+), 4 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index b337be1f0..5008a5293 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -3241,6 +3241,7 @@ Definition tables dig = , -- "__group" = group-based sound (default) dug = , place = , + place_failed = , }, drop = "", -- Name of dropped node when dug. Default is the node itself. -- Alternatively: diff --git a/src/game.cpp b/src/game.cpp index d74c1fa1d..1738517b5 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -3682,8 +3682,12 @@ void Game::handlePointingAtNode(GameRunData *runData, SimpleSoundSpec(); if (playeritem_def.node_placement_prediction == "" || - nodedef_manager->get(map.getNodeNoEx(nodepos)).rightclickable) + nodedef_manager->get(map.getNodeNoEx(nodepos)).rightclickable) { client->interact(3, pointed); // Report to server + } else { + soundmaker->m_player_rightpunch_sound = + playeritem_def.sound_place_failed; + } } } } diff --git a/src/itemdef.cpp b/src/itemdef.cpp index 2971d4e88..60a7dc64e 100644 --- a/src/itemdef.cpp +++ b/src/itemdef.cpp @@ -80,6 +80,7 @@ ItemDefinition& ItemDefinition::operator=(const ItemDefinition &def) groups = def.groups; node_placement_prediction = def.node_placement_prediction; sound_place = def.sound_place; + sound_place_failed = def.sound_place_failed; range = def.range; return *this; } @@ -114,6 +115,7 @@ void ItemDefinition::reset() } groups.clear(); sound_place = SimpleSoundSpec(); + sound_place_failed = SimpleSoundSpec(); range = -1; node_placement_prediction = ""; @@ -155,8 +157,10 @@ void ItemDefinition::serialize(std::ostream &os, u16 protocol_version) const os< 20){ + if (protocol_version > 20) { writeF1000(os, range); + os << serializeString(sound_place_failed.name); + writeF1000(os, sound_place_failed.gain); } } @@ -211,8 +215,10 @@ void ItemDefinition::deSerialize(std::istream &is) } // If you add anything here, insert it primarily inside the try-catch // block to not need to increase the version. - try{ - }catch(SerializationError &e) {}; + try { + sound_place_failed.name = deSerializeString(is); + sound_place_failed.gain = readF1000(is); + } catch(SerializationError &e) {}; } /* diff --git a/src/itemdef.h b/src/itemdef.h index f993fdbac..805b4aa5d 100644 --- a/src/itemdef.h +++ b/src/itemdef.h @@ -68,6 +68,7 @@ struct ItemDefinition ToolCapabilities *tool_capabilities; ItemGroupList groups; SimpleSoundSpec sound_place; + SimpleSoundSpec sound_place_failed; f32 range; // Client shall immediately place this node when player places the item. diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp index 787541ad0..fe429b5d4 100644 --- a/src/script/common/c_content.cpp +++ b/src/script/common/c_content.cpp @@ -100,6 +100,9 @@ ItemDefinition read_item_definition(lua_State* L,int index, lua_getfield(L, -1, "place"); read_soundspec(L, -1, def.sound_place); lua_pop(L, 1); + lua_getfield(L, -1, "place_failed"); + read_soundspec(L, -1, def.sound_place_failed); + lua_pop(L, 1); } lua_pop(L, 1);