Add different place sound for nodes

This commit is contained in:
PilzAdam 2013-03-25 23:59:17 +01:00
parent 7d9329ecfe
commit 5e7e0347cd
7 changed files with 47 additions and 8 deletions

@ -1514,6 +1514,9 @@ Item definition (register_node, register_craftitem, register_tool)
^ Otherwise should be name of node which the client immediately places ^ Otherwise should be name of node which the client immediately places
on ground when the player places the item. Server will always update on ground when the player places the item. Server will always update
actual result to client in a short moment. actual result to client in a short moment.
sound = {
place = <SimpleSoundSpec>,
}
on_place = func(itemstack, placer, pointed_thing), on_place = func(itemstack, placer, pointed_thing),
^ Shall place item and return the leftover itemstack ^ Shall place item and return the leftover itemstack
@ -1581,6 +1584,7 @@ Node definition (register_node)
footstep = <SimpleSoundSpec>, footstep = <SimpleSoundSpec>,
dig = <SimpleSoundSpec>, -- "__group" = group-based sound (default) dig = <SimpleSoundSpec>, -- "__group" = group-based sound (default)
dug = <SimpleSoundSpec>, dug = <SimpleSoundSpec>,
place = <SimpleSoundSpec>,
}, },
on_construct = func(pos), on_construct = func(pos),

@ -659,6 +659,8 @@ function default.node_sound_dirt_defaults(table)
{name="", gain=0.5} {name="", gain=0.5}
--table.dug = table.dug or --table.dug = table.dug or
-- {name="default_dirt_break", gain=0.5} -- {name="default_dirt_break", gain=0.5}
table.place = table.place or
{name="default_grass_footstep", gain=0.5}
default.node_sound_defaults(table) default.node_sound_defaults(table)
return table return table
end end

@ -87,6 +87,7 @@ SharedBuffer<u8> makePacket_TOCLIENT_TIME_OF_DAY(u16 time, float time_speed);
TOCLIENT_DELETE_PARTICLESPAWNER TOCLIENT_DELETE_PARTICLESPAWNER
PROTOCOL_VERSION 18: PROTOCOL_VERSION 18:
damageGroups added to ToolCapabilities damageGroups added to ToolCapabilities
sound_place added to ItemDefinition
*/ */
#define LATEST_PROTOCOL_VERSION 18 #define LATEST_PROTOCOL_VERSION 18

@ -2394,11 +2394,6 @@ 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 Handle digging
*/ */
@ -2617,6 +2612,9 @@ void the_game(
<<") - Position not loaded"<<std::endl; <<") - Position not loaded"<<std::endl;
} }
}while(0); }while(0);
// Read the sound
soundmaker.m_player_rightpunch_sound = def.sound_place;
} }
} }
} }

@ -75,6 +75,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;
return *this; return *this;
} }
@ -107,13 +108,17 @@ void ItemDefinition::reset()
tool_capabilities = NULL; tool_capabilities = NULL;
} }
groups.clear(); groups.clear();
sound_place = SimpleSoundSpec();
node_placement_prediction = ""; node_placement_prediction = "";
} }
void ItemDefinition::serialize(std::ostream &os, u16 protocol_version) const void ItemDefinition::serialize(std::ostream &os, u16 protocol_version) const
{ {
if(protocol_version <= 17)
writeU8(os, 1); // version writeU8(os, 1); // version
else
writeU8(os, 2); // version
writeU8(os, type); writeU8(os, type);
os<<serializeString(name); os<<serializeString(name);
os<<serializeString(description); os<<serializeString(description);
@ -137,6 +142,11 @@ void ItemDefinition::serialize(std::ostream &os, u16 protocol_version) const
writeS16(os, i->second); writeS16(os, i->second);
} }
os<<serializeString(node_placement_prediction); os<<serializeString(node_placement_prediction);
if(protocol_version > 17){
//serializeSimpleSoundSpec(sound_place, os);
os<<serializeString(sound_place.name);
writeF1000(os, sound_place.gain);
}
} }
void ItemDefinition::deSerialize(std::istream &is) void ItemDefinition::deSerialize(std::istream &is)
@ -146,7 +156,7 @@ void ItemDefinition::deSerialize(std::istream &is)
// Deserialize // Deserialize
int version = readU8(is); int version = readU8(is);
if(version != 1) if(version != 1 && version != 2)
throw SerializationError("unsupported ItemDefinition version"); throw SerializationError("unsupported ItemDefinition version");
type = (enum ItemType)readU8(is); type = (enum ItemType)readU8(is);
name = deSerializeString(is); name = deSerializeString(is);
@ -171,10 +181,24 @@ void ItemDefinition::deSerialize(std::istream &is)
int value = readS16(is); int value = readS16(is);
groups[name] = value; groups[name] = value;
} }
if(version == 1){
// We cant be sure that node_placement_prediction is send in version 1
try{
node_placement_prediction = deSerializeString(is);
}catch(SerializationError &e) {};
// Set the old default sound
sound_place.name = "default_place_node";
sound_place.gain = 0.5;
} else if(version == 2) {
node_placement_prediction = deSerializeString(is);
//deserializeSimpleSoundSpec(sound_place, is);
sound_place.name = deSerializeString(is);
sound_place.gain = readF1000(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{
node_placement_prediction = deSerializeString(is);
}catch(SerializationError &e) {}; }catch(SerializationError &e) {};
} }

@ -26,6 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <iostream> #include <iostream>
#include <set> #include <set>
#include "itemgroup.h" #include "itemgroup.h"
#include "sound.h"
class IGameDef; class IGameDef;
struct ToolCapabilities; struct ToolCapabilities;
@ -66,6 +67,7 @@ struct ItemDefinition
// May be NULL. If non-NULL, deleted by destructor // May be NULL. If non-NULL, deleted by destructor
ToolCapabilities *tool_capabilities; ToolCapabilities *tool_capabilities;
ItemGroupList groups; ItemGroupList groups;
SimpleSoundSpec sound_place;
// Client shall immediately place this node when player places the item. // Client shall immediately place this node when player places the item.
// Server will update the precise end result a moment later. // Server will update the precise end result a moment later.

@ -96,6 +96,14 @@ ItemDefinition read_item_definition(lua_State *L, int index,
read_groups(L, -1, def.groups); read_groups(L, -1, def.groups);
lua_pop(L, 1); lua_pop(L, 1);
lua_getfield(L, index, "sounds");
if(lua_istable(L, -1)){
lua_getfield(L, -1, "place");
read_soundspec(L, -1, def.sound_place);
lua_pop(L, 1);
}
lua_pop(L, 1);
// Client shall immediately place this node when player places the item. // Client shall immediately place this node when player places the item.
// Server will update the precise end result a moment later. // Server will update the precise end result a moment later.
// "" = no prediction // "" = no prediction