diff --git a/src/logic/BlocksController.cpp b/src/logic/BlocksController.cpp index f95e5ac0..e0f37765 100644 --- a/src/logic/BlocksController.cpp +++ b/src/logic/BlocksController.cpp @@ -57,6 +57,7 @@ BlocksController::BlocksController(Level* level, uint padding) lighting(level->lighting.get()), randTickClock(20, 3), blocksTickClock(20, 1), + worldTickClock(20, 1), padding(padding) { } @@ -99,6 +100,9 @@ void BlocksController::update(float delta) { if (blocksTickClock.update(delta)) { onBlocksTick(blocksTickClock.getPart(), blocksTickClock.getParts()); } + if (worldTickClock.update(delta)) { + scripting::on_world_tick(); + } } void BlocksController::onBlocksTick(int tickid, int parts) { diff --git a/src/logic/BlocksController.h b/src/logic/BlocksController.h index 00934617..7b8874b1 100644 --- a/src/logic/BlocksController.h +++ b/src/logic/BlocksController.h @@ -35,6 +35,7 @@ class BlocksController { Lighting* lighting; Clock randTickClock; Clock blocksTickClock; + Clock worldTickClock; uint padding; FastRandom random; public: diff --git a/src/logic/scripting/scripting.cpp b/src/logic/scripting/scripting.cpp index 350e2949..f74dc943 100644 --- a/src/logic/scripting/scripting.cpp +++ b/src/logic/scripting/scripting.cpp @@ -109,6 +109,12 @@ void scripting::on_world_load(Level* level, BlocksController* blocks) { } } +void scripting::on_world_tick() { + for (auto& pack : scripting::engine->getContentPacks()) { + emit_event(pack.id + ".worldtick"); + } +} + void scripting::on_world_save() { for (auto& pack : scripting::engine->getContentPacks()) { emit_event(pack.id + ".worldsave"); @@ -285,6 +291,7 @@ void scripting::load_world_script(int env, std::string prefix, fs::path file) { register_event(env, "init", prefix+".init"); register_event(env, "on_world_open", prefix+".worldopen"); + register_event(env, "on_world_tick", prefix+".worldtick"); register_event(env, "on_world_save", prefix+".worldsave"); register_event(env, "on_world_quit", prefix+".worldquit"); } diff --git a/src/logic/scripting/scripting.h b/src/logic/scripting/scripting.h index 12b3dea8..fd521c22 100644 --- a/src/logic/scripting/scripting.h +++ b/src/logic/scripting/scripting.h @@ -53,6 +53,7 @@ namespace scripting { std::unique_ptr create_doc_environment(int parent, const std::string& name); void on_world_load(Level* level, BlocksController* blocks); + void on_world_tick(); void on_world_save(); void on_world_quit(); void on_blocks_tick(const Block* block, int tps);