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
-- 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

@ -109,7 +109,8 @@ void LuaABM::trigger(ServerEnvironment *env, v3s16 p, MapNode n,
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();
@ -141,8 +142,9 @@ void LuaLBM::trigger(ServerEnvironment *env, v3s16 p, MapNode n)
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");

@ -287,7 +287,7 @@ public:
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

@ -249,7 +249,8 @@ std::string LBMManager::createIntroductionTimesString()
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,
@ -280,7 +281,7 @@ void LBMManager::applyLBMs(ServerEnvironment *env, MapBlock *block, u32 stamp)
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);
}
}
}
@ -997,7 +998,7 @@ void ServerEnvironment::activateBlock(MapBlock *block, u32 additional_dtime)
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 {

@ -95,7 +95,8 @@ struct LoadingBlockModifierDef
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
@ -129,7 +130,8 @@ public:
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;