Lava sparks: performance improvement

This commit is contained in:
parent f0b8e8ea11
commit b6a4c1a995
2 changed files with 84 additions and 38 deletions

View File

@ -54,47 +54,89 @@ minetest.register_abm({
end, end,
}) })
--
-- Production of sparks from lava -- Production of sparks from lava
minetest.register_abm({ --
label = "Lava produce sparks",
nodenames = {"group:lava"}, local LAVA_SPARK_ABM_INTERVAL = 5
neighbors = {"air"}, local lava_spark_limit = minetest.settings:get("mcl_core_lava_spark_limit")
interval = 1, if lava_spark_limit == nil then
chance = 100, lava_spark_limit = 10
action = function(pos, node) else
local above = minetest.get_node(vector.new(pos.x, pos.y + 1, pos.z)) lava_spark_limit = tonumber(lava_spark_limit)
if above.name ~= "air" then return end end
local lava_spark_chance = 0
local lava_spark_abm_census = 0
local lava_spark_census = 0
function mcl_core.lava_spark_set_chance()
lava_spark_chance = lava_spark_limit / lava_spark_abm_census
minetest.after(LAVA_SPARK_ABM_INTERVAL, mcl_core.lava_spark_set_chance)
lava_spark_abm_census = 0
lava_spark_census = 0
end
if lava_spark_limit > 0 then
mcl_core.lava_spark_set_chance()
minetest.register_abm({
label = "Lava produce sparks",
nodenames = {"group:lava"},
neighbors = {"air"},
interval = LAVA_SPARK_ABM_INTERVAL,
chance = 18,
action = function(pos, node)
local above = minetest.get_node(vector.new(pos.x, pos.y + 1, pos.z))
if above.name ~= "air" then return end
local pos_addend = vector.new( lava_spark_abm_census = lava_spark_abm_census + 1
(math.random() - 0.5) * 0.8,
(math.random() - 0.5) * 0.8,
(math.random() - 0.5) * 0.8
)
local spark_pos = vector.add(pos, pos_addend)
local spark = minetest.add_entity(spark_pos, "mcl_core:lava_spark")
if not spark then return end
local velocity = vector.new( if lava_spark_census >= lava_spark_limit then return end
(math.random() - 0.5) * 3, if math.random() > lava_spark_chance then return end
(math.random() + 2) * 2,
(math.random() - 0.5) * 3
)
spark:set_velocity(velocity)
spark:set_acceleration(vector.new(0, -9, 0)) lava_spark_census = lava_spark_census + 1
minetest.after(math.random() * LAVA_SPARK_ABM_INTERVAL, mcl_core.lava_spark_add, pos)
-- Set a random size end
local size = 0.2 + math.random() * 0.2 })
local props = spark:get_properties() end
if not props then return end
props.visual_size = vector.new(size, size, size) function mcl_core.lava_spark_add(pos)
spark:set_properties(props) local node = minetest.get_node(pos)
if minetest.get_node_group(node.name, "lava") == 0 then return end
local luaentity = spark:get_luaentity()
if not luaentity then return end local above = minetest.get_node(vector.new(pos.x, pos.y + 1, pos.z))
luaentity._life_timer = 0.4 + math.random() if above.name ~= "air" then return end
end
}) local pos_addend = vector.new(
(math.random() - 0.5) * 0.8,
(math.random() - 0.5) * 0.8,
(math.random() - 0.5) * 0.8
)
local spark_pos = vector.add(pos, pos_addend)
local spark = minetest.add_entity(spark_pos, "mcl_core:lava_spark")
if not spark then return end
local velocity = vector.new(
(math.random() - 0.5) * 3,
(math.random() + 2) * 2,
(math.random() - 0.5) * 3
)
spark:set_velocity(velocity)
spark:set_acceleration(vector.new(0, -9, 0))
-- Set a random size
local size = 0.2 + math.random() * 0.2
local props = spark:get_properties()
if not props then return end
props.visual_size = vector.new(size, size, size)
spark:set_properties(props)
local luaentity = spark:get_luaentity()
if not luaentity then return end
luaentity._life_timer = 0.4 + math.random()
end
minetest.register_entity("mcl_core:lava_spark", { minetest.register_entity("mcl_core:lava_spark", {
physical = true, physical = true,
@ -117,7 +159,7 @@ minetest.register_entity("mcl_core:lava_spark", {
self._smoke_timer = self._smoke_timer - dtime self._smoke_timer = self._smoke_timer - dtime
if self._smoke_timer > 0 then return end if self._smoke_timer > 0 then return end
self._smoke_timer = math.random() * 0.4 self._smoke_timer = 0.2 + math.random() * 0.3
local pos = self.object:get_pos() local pos = self.object:get_pos()

View File

@ -51,6 +51,10 @@ mcl_showDeathMessages (Show death messages) bool true
# If disabled, all recipes will be shown. # If disabled, all recipes will be shown.
mcl_craftguide_progressive_mode (Learn crafting recipes progressively) bool true mcl_craftguide_progressive_mode (Learn crafting recipes progressively) bool true
# Limit the number of sparks produced by lava per 5 seconds to this number.
# 0 will disable lava sparks altogeter with no ABM being registered.
mcl_core_lava_spark_limit (Number of sparks lava can produce per 5 seconds) int 10
[Mobs] [Mobs]
# If enabled, mobs will spawn naturally. This does not affect # If enabled, mobs will spawn naturally. This does not affect
# affect mob spawners. # affect mob spawners.