Expose dtime_s to LBM handler

This commit is contained in:
sfan5 2022-12-04 12:35:14 +01:00 committed by GitHub
parent aa3505a9e4
commit 37386b9c3c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 16 additions and 9 deletions

@ -7972,8 +7972,10 @@ gets activated (not loaded!)
-- and not only the first time the block gets activated after the LBM -- and not only the first time the block gets activated after the LBM
-- was introduced. -- was introduced.
action = function(pos, node), action = function(pos, node, dtime_s),
-- Function triggered for each qualifying node. -- Function triggered for each qualifying node.
-- `dtime_s` is the in-game time (in seconds) elapsed since the block
-- was last active
} }
Tile definition Tile definition

@ -109,7 +109,8 @@ void LuaABM::trigger(ServerEnvironment *env, v3s16 p, MapNode n,
lua_pop(L, 1); // Pop error handler 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(); ServerScripting *scriptIface = env->getScriptIface();
scriptIface->realityCheck(); scriptIface->realityCheck();
@ -141,8 +142,9 @@ void LuaLBM::trigger(ServerEnvironment *env, v3s16 p, MapNode n)
lua_remove(L, -2); // Remove registered_lbms[m_id] lua_remove(L, -2); // Remove registered_lbms[m_id]
push_v3s16(L, p); push_v3s16(L, p);
pushnode(L, n); 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) if (result)
scriptIface->scriptError(result, "LuaLBM::trigger"); scriptIface->scriptError(result, "LuaLBM::trigger");

@ -287,7 +287,7 @@ public:
this->trigger_contents = trigger_contents; this->trigger_contents = trigger_contents;
this->name = name; 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 //! Lua wrapper for RaycastState objects

@ -249,7 +249,8 @@ std::string LBMManager::createIntroductionTimesString()
return oss.str(); 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 // Precondition, we need m_lbm_lookup to be initialized
FATAL_ERROR_IF(!m_query_mode, FATAL_ERROR_IF(!m_query_mode,
@ -280,7 +281,7 @@ void LBMManager::applyLBMs(ServerEnvironment *env, MapBlock *block, u32 stamp)
if (!lbm_list) if (!lbm_list)
continue; continue;
for (auto lbmdef : *lbm_list) { for (auto lbmdef : *lbm_list) {
lbmdef->trigger(env, pos + pos_of_block, n); lbmdef->trigger(env, pos + pos_of_block, n, dtime_s);
} }
} }
} }
@ -997,7 +998,7 @@ void ServerEnvironment::activateBlock(MapBlock *block, u32 additional_dtime)
activateObjects(block, dtime_s); activateObjects(block, dtime_s);
/* Handle LoadingBlockModifiers */ /* Handle LoadingBlockModifiers */
m_lbm_mgr.applyLBMs(this, block, stamp); m_lbm_mgr.applyLBMs(this, block, stamp, (float)dtime_s);
// Run node timers // Run node timers
block->step((float)dtime_s, [&](v3s16 p, MapNode n, f32 d) -> bool { block->step((float)dtime_s, [&](v3s16 p, MapNode n, f32 d) -> bool {

@ -95,7 +95,8 @@ struct LoadingBlockModifierDef
virtual ~LoadingBlockModifierDef() = default; 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 struct LBMContentMapping
@ -129,7 +130,8 @@ public:
std::string createIntroductionTimesString(); std::string createIntroductionTimesString();
// Don't call this before loadIntroductionTimes() ran. // 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 // Warning: do not make this std::unordered_map, order is relevant here
typedef std::map<u32, LBMContentMapping> lbm_lookup_map; typedef std::map<u32, LBMContentMapping> lbm_lookup_map;