Add support for audio feedback if placing node failed

master
BlockMen 2015-10-24 12:28:35 +02:00
parent 578649bd15
commit 2a12579fab
5 changed files with 19 additions and 4 deletions

View File

@ -3241,6 +3241,7 @@ Definition tables
dig = <SimpleSoundSpec>, -- "__group" = group-based sound (default) dig = <SimpleSoundSpec>, -- "__group" = group-based sound (default)
dug = <SimpleSoundSpec>, dug = <SimpleSoundSpec>,
place = <SimpleSoundSpec>, place = <SimpleSoundSpec>,
place_failed = <SimpleSoundSpec>,
}, },
drop = "", -- Name of dropped node when dug. Default is the node itself. drop = "", -- Name of dropped node when dug. Default is the node itself.
-- Alternatively: -- Alternatively:

View File

@ -3682,8 +3682,12 @@ void Game::handlePointingAtNode(GameRunData *runData,
SimpleSoundSpec(); SimpleSoundSpec();
if (playeritem_def.node_placement_prediction == "" || 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 client->interact(3, pointed); // Report to server
} else {
soundmaker->m_player_rightpunch_sound =
playeritem_def.sound_place_failed;
}
} }
} }
} }

View File

@ -80,6 +80,7 @@ ItemDefinition& ItemDefinition::operator=(const ItemDefinition &def)
groups = def.groups; groups = def.groups;
node_placement_prediction = def.node_placement_prediction; node_placement_prediction = def.node_placement_prediction;
sound_place = def.sound_place; sound_place = def.sound_place;
sound_place_failed = def.sound_place_failed;
range = def.range; range = def.range;
return *this; return *this;
} }
@ -114,6 +115,7 @@ void ItemDefinition::reset()
} }
groups.clear(); groups.clear();
sound_place = SimpleSoundSpec(); sound_place = SimpleSoundSpec();
sound_place_failed = SimpleSoundSpec();
range = -1; range = -1;
node_placement_prediction = ""; node_placement_prediction = "";
@ -157,6 +159,8 @@ void ItemDefinition::serialize(std::ostream &os, u16 protocol_version) const
} }
if (protocol_version > 20) { if (protocol_version > 20) {
writeF1000(os, range); writeF1000(os, range);
os << serializeString(sound_place_failed.name);
writeF1000(os, sound_place_failed.gain);
} }
} }
@ -212,6 +216,8 @@ void ItemDefinition::deSerialize(std::istream &is)
// If you add anything here, insert it primarily inside the try-catch // If you add anything here, insert it primarily inside the try-catch
// block to not need to increase the version. // block to not need to increase the version.
try { try {
sound_place_failed.name = deSerializeString(is);
sound_place_failed.gain = readF1000(is);
} catch(SerializationError &e) {}; } catch(SerializationError &e) {};
} }

View File

@ -68,6 +68,7 @@ struct ItemDefinition
ToolCapabilities *tool_capabilities; ToolCapabilities *tool_capabilities;
ItemGroupList groups; ItemGroupList groups;
SimpleSoundSpec sound_place; SimpleSoundSpec sound_place;
SimpleSoundSpec sound_place_failed;
f32 range; f32 range;
// Client shall immediately place this node when player places the item. // Client shall immediately place this node when player places the item.

View File

@ -100,6 +100,9 @@ ItemDefinition read_item_definition(lua_State* L,int index,
lua_getfield(L, -1, "place"); lua_getfield(L, -1, "place");
read_soundspec(L, -1, def.sound_place); read_soundspec(L, -1, def.sound_place);
lua_pop(L, 1); 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); lua_pop(L, 1);