Add support for audio feedback if placing node failed 3288/head
authorBlockMen <nmuelll@web.de>
Sat, 24 Oct 2015 10:28:35 +0000 (12:28 +0200)
committerBlockMen <nmuelll@web.de>
Sat, 7 Nov 2015 12:23:38 +0000 (13:23 +0100)
doc/lua_api.txt
src/game.cpp
src/itemdef.cpp
src/itemdef.h
src/script/common/c_content.cpp

index b337be1f04867a3d8337ee9be47793552c0ce617..5008a5293297342397b433c544d07f27f549520a 100644 (file)
@@ -3241,6 +3241,7 @@ Definition tables
             dig = <SimpleSoundSpec>, -- "__group" = group-based sound (default)
             dug = <SimpleSoundSpec>,
             place = <SimpleSoundSpec>,
+            place_failed = <SimpleSoundSpec>,
         },
         drop = "",  -- Name of dropped node when dug. Default is the node itself.
         -- Alternatively:
index d74c1fa1db4223a26221d58a0131f1d027b230c5..1738517b57022d2d3705d2a77f8d77e154eea1dc 100644 (file)
@@ -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;
+                               }
                        }
                }
        }
index 2971d4e88a26b7cd9fd501e6c508291d2e4db7d3..60a7dc64e33316f109eb3c20b81f6fb953792cea 100644 (file)
@@ -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<<serializeString(sound_place.name);
                writeF1000(os, sound_place.gain);
        }
-       if(protocol_version > 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) {};
 }
 
 /*
index f993fdbac490181ab7627ea00f680e91f145bb4e..805b4aa5dd09bfb8b977bad71b93177a4d7bdcef 100644 (file)
@@ -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.
index 787541ad05a25985a076935c44760de71eada12a..fe429b5d40203a14fcca972472f60379d6b1d790 100644 (file)
@@ -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);