forked from Mirrorlandia_minetest/minetest
Expose dtime_s to LBM handler
This commit is contained in:
parent
aa3505a9e4
commit
37386b9c3c
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user