Merge remote-tracking branch 'minetest/master'

This commit is contained in:
proller 2016-11-18 19:13:50 +03:00
commit f9ab0977b1
6 changed files with 41 additions and 10 deletions

View File

@ -485,6 +485,9 @@ function core.node_dig(pos, node, digger)
-- Wear out tool
if not core.setting_getbool("creative_mode") then
wielded:add_wear(dp.wear)
if wielded:get_count() == 0 and wdef.sound and wdef.sound.breaks then
core.sound_play(wdef.sound.breaks, {pos = pos, gain = 1.0})
end
end
end
digger:set_wielded_item(wielded)

View File

@ -3606,6 +3606,7 @@ Definition tables
actual result to client in a short moment.
]]
sound = {
breaks = "default_tool_break", -- tools only
place = --[[<SimpleSoundSpec>]],
},
@ -4151,7 +4152,8 @@ The Biome API is still in an experimental phase and subject to change.
-- ^ collision_removal: if true then particle is removed when it collides,
-- ^ requires collisiondetection = true to have any effect
attached = ObjectRef,
-- ^ attached: if defined, makes particle positions relative to this object.
-- ^ attached: if defined, particle positions, velocities and accelerations
-- ^ are relative to this object's position and yaw.
vertical = false,
-- ^ vertical: if true faces player using y axis only
texture = "image.png",

View File

@ -64,6 +64,7 @@ public:
virtual bool getCollisionBox(aabb3f *toset){return false;}
virtual bool collideWithObjects(){return false;}
virtual v3f getPosition(){return v3f(0,0,0);}
virtual float getYaw() const {return 0;}
virtual scene::ISceneNode *getSceneNode(){return NULL;}
virtual scene::IMeshSceneNode *getMeshSceneNode(){return NULL;}
virtual scene::IAnimatedMeshSceneNode *getAnimatedMeshSceneNode(){return NULL;}

View File

@ -317,7 +317,8 @@ public:
{return &m_selection_box;}
v3f getPosition()
{return m_position;}
inline float getYaw() const
{return 0;}
std::string infoText()
{return m_infotext;}

View File

@ -143,6 +143,10 @@ public:
aabb3f *getSelectionBox();
v3f getPosition();
inline float getYaw() const
{
return m_yaw;
}
scene::ISceneNode *getSceneNode();

View File

@ -255,12 +255,17 @@ void ParticleSpawner::step(float dtime, ClientEnvironment* env)
m_time += dtime;
bool unloaded = false;
v3f attached_offset = v3f(0,0,0);
bool is_attached = false;
v3f attached_pos = v3f(0,0,0);
float attached_yaw = 0;
if (m_attached_id != 0) {
if (ClientActiveObject *attached = env->getActiveObject(m_attached_id))
attached_offset = attached->getPosition() / BS;
else
if (ClientActiveObject *attached = env->getActiveObject(m_attached_id)) {
attached_pos = attached->getPosition() / BS;
attached_yaw = attached->getYaw();
is_attached = true;
} else {
unloaded = true;
}
}
if (m_spawntime != 0) // Spawner exists for a predefined timespan
@ -279,8 +284,15 @@ void ParticleSpawner::step(float dtime, ClientEnvironment* env)
v3f pos = random_v3f(m_minpos, m_maxpos);
v3f vel = random_v3f(m_minvel, m_maxvel);
v3f acc = random_v3f(m_minacc, m_maxacc);
// Make relative to offest
pos += attached_offset;
if (is_attached) {
// Apply attachment yaw and position
pos.rotateXZBy(attached_yaw);
pos += attached_pos;
vel.rotateXZBy(attached_yaw);
acc.rotateXZBy(attached_yaw);
}
float exptime = rand()/(float)RAND_MAX
*(m_maxexptime-m_minexptime)
+m_minexptime;
@ -323,10 +335,18 @@ void ParticleSpawner::step(float dtime, ClientEnvironment* env)
{
if (rand()/(float)RAND_MAX < dtime)
{
v3f pos = random_v3f(m_minpos, m_maxpos)
+ attached_offset;
v3f pos = random_v3f(m_minpos, m_maxpos);
v3f vel = random_v3f(m_minvel, m_maxvel);
v3f acc = random_v3f(m_minacc, m_maxacc);
if (is_attached) {
// Apply attachment yaw and position
pos.rotateXZBy(attached_yaw);
pos += attached_pos;
vel.rotateXZBy(attached_yaw);
acc.rotateXZBy(attached_yaw);
}
float exptime = rand()/(float)RAND_MAX
*(m_maxexptime-m_minexptime)
+m_minexptime;