-- and not only the first time the block gets activated after the LBM
-- was introduced.
- action = function(pos, node),
+ action = function(pos, node, dtime_s),
-- Function triggered for each qualifying node.
+ -- `dtime_s` is the in-game time (in seconds) elapsed since the block
+ -- was last active
}
Tile definition
lua_pop(L, 1); // Pop error handler
}
-void LuaLBM::trigger(ServerEnvironment *env, v3s16 p, MapNode n)
+void LuaLBM::trigger(ServerEnvironment *env, v3s16 p,
+ const MapNode n, const float dtime_s)
{
ServerScripting *scriptIface = env->getScriptIface();
scriptIface->realityCheck();
lua_remove(L, -2); // Remove registered_lbms[m_id]
push_v3s16(L, p);
pushnode(L, n);
+ lua_pushnumber(L, dtime_s);
- int result = lua_pcall(L, 2, 0, error_handler);
+ int result = lua_pcall(L, 3, 0, error_handler);
if (result)
scriptIface->scriptError(result, "LuaLBM::trigger");
this->trigger_contents = trigger_contents;
this->name = name;
}
- virtual void trigger(ServerEnvironment *env, v3s16 p, MapNode n);
+ virtual void trigger(ServerEnvironment *env, v3s16 p, MapNode n, float dtime_s);
};
//! Lua wrapper for RaycastState objects
return oss.str();
}
-void LBMManager::applyLBMs(ServerEnvironment *env, MapBlock *block, u32 stamp)
+void LBMManager::applyLBMs(ServerEnvironment *env, MapBlock *block,
+ const u32 stamp, const float dtime_s)
{
// Precondition, we need m_lbm_lookup to be initialized
FATAL_ERROR_IF(!m_query_mode,
if (!lbm_list)
continue;
for (auto lbmdef : *lbm_list) {
- lbmdef->trigger(env, pos + pos_of_block, n);
+ lbmdef->trigger(env, pos + pos_of_block, n, dtime_s);
}
}
}
activateObjects(block, dtime_s);
/* Handle LoadingBlockModifiers */
- m_lbm_mgr.applyLBMs(this, block, stamp);
+ m_lbm_mgr.applyLBMs(this, block, stamp, (float)dtime_s);
// Run node timers
block->step((float)dtime_s, [&](v3s16 p, MapNode n, f32 d) -> bool {
virtual ~LoadingBlockModifierDef() = default;
- virtual void trigger(ServerEnvironment *env, v3s16 p, MapNode n){};
+ virtual void trigger(ServerEnvironment *env, v3s16 p,
+ MapNode n, float dtime_s) {};
};
struct LBMContentMapping
std::string createIntroductionTimesString();
// Don't call this before loadIntroductionTimes() ran.
- void applyLBMs(ServerEnvironment *env, MapBlock *block, u32 stamp);
+ void applyLBMs(ServerEnvironment *env, MapBlock *block,
+ u32 stamp, float dtime_s);
// Warning: do not make this std::unordered_map, order is relevant here
typedef std::map<u32, LBMContentMapping> lbm_lookup_map;