diff --git a/res/content/base/scripts/world.lua b/res/content/base/scripts/world.lua index d8e76967..5719c4fb 100644 --- a/res/content/base/scripts/world.lua +++ b/res/content/base/scripts/world.lua @@ -1,6 +1,6 @@ function on_block_broken(id, x, y, z, playerid) - particles.emit({x+0.5, y+0.5, z+0.5}, 100, { - lifetime=2.0, + particles.emit({x+0.5, y+0.5, z+0.5}, 64, { + lifetime=1.0, spawn_interval=0.0001, explosion={4, 4, 4}, texture="blocks:"..block.get_textures(id)[1], diff --git a/src/graphics/render/WorldRenderer.cpp b/src/graphics/render/WorldRenderer.cpp index 874a9894..89b5474b 100644 --- a/src/graphics/render/WorldRenderer.cpp +++ b/src/graphics/render/WorldRenderer.cpp @@ -535,10 +535,6 @@ void WorldRenderer::drawBorders( lineBatch->flush(); } -void WorldRenderer::addEmitter(std::unique_ptr emitter) { - particles->add(std::move(emitter)); -} - void WorldRenderer::clear() { renderer->clear(); } diff --git a/src/graphics/render/WorldRenderer.hpp b/src/graphics/render/WorldRenderer.hpp index cf74c6dd..22e864c5 100644 --- a/src/graphics/render/WorldRenderer.hpp +++ b/src/graphics/render/WorldRenderer.hpp @@ -8,6 +8,8 @@ #include +#include "typedefs.hpp" + class Level; class Player; class Camera; @@ -42,7 +44,6 @@ class WorldRenderer { std::unique_ptr skybox; std::unique_ptr batch3d; std::unique_ptr modelBatch; - std::unique_ptr particles; float timer = 0.0f; @@ -80,6 +81,8 @@ class WorldRenderer { float fogFactor ); public: + std::unique_ptr particles; + static bool showChunkBorders; static bool showEntitiesDebug; @@ -108,7 +111,5 @@ public: bool pause ); - void addEmitter(std::unique_ptr emitter); - void clear(); }; diff --git a/src/logic/scripting/lua/libs/libparticles.cpp b/src/logic/scripting/lua/libs/libparticles.cpp index 932318ea..9b488d7a 100644 --- a/src/logic/scripting/lua/libs/libparticles.cpp +++ b/src/logic/scripting/lua/libs/libparticles.cpp @@ -2,6 +2,7 @@ #include "logic/scripting/scripting_hud.hpp" #include "graphics/render/WorldRenderer.hpp" +#include "graphics/render/ParticlesRenderer.hpp" #include "graphics/render/Emitter.hpp" #include "assets/assets_util.hpp" #include "engine.hpp" @@ -34,11 +35,19 @@ static int l_emit(lua::State* L) { region.region, count ); - renderer->addEmitter(std::move(emitter)); + return lua::pushinteger(L, renderer->particles->add(std::move(emitter))); +} + +static int l_stop(lua::State* L) { + u64id_t id = lua::touinteger(L, 1); + if (auto emitter = renderer->particles->getEmitter(id)) { + emitter->stop(); + } return 0; } const luaL_Reg particleslib[] = { {"emit", lua::wrap}, + {"stop", lua::wrap}, {NULL, NULL} };