TNT particles: use drops list smartly
authorAuke Kok <sofar@foo-projects.org>
Sat, 19 Mar 2016 06:07:15 +0000 (23:07 -0700)
committerparamat <mat.gregory@virginmedia.com>
Sat, 16 Apr 2016 18:27:16 +0000 (19:27 +0100)
The drops list already has quantities, so let's just select the one
with the highest quantity from it, and use that as tile. Fallback
tile will therefore only be used if explosion happens in air. Oh well.

mods/tnt/init.lua

index f34ad13b9ee66ecd850913ff24980bf34cdd4b76..289797ce0b3e49ac280eaf5c6d28311c6a01b99c 100644 (file)
@@ -138,7 +138,7 @@ local function entity_physics(pos, radius)
        end
 end
 
-local function add_effects(pos, radius)
+local function add_effects(pos, radius, drops)
        minetest.add_particlespawner({
                amount = 128,
                time = 1,
@@ -158,14 +158,12 @@ local function add_effects(pos, radius)
        -- we just dropped some items. Look at the items entities and pick
        -- one of them to use as texture
        local texture = "tnt_blast.png" --fallback texture
-       local objs = minetest.get_objects_inside_radius(pos, 2)
-       for _, obj in pairs(objs) do
-               if obj and obj:get_luaentity() then
-                       local def = ItemStack(obj:get_luaentity().itemstring):get_definition()
-                       if def.tiles then
-                               texture = def.tiles[1]
-                               break
-                       end
+       local most = 0
+       for name, stack in pairs(drops) do
+               local count = stack:get_count()
+               if count > most then
+                       most = count
+                       texture = minetest.registered_nodes[name].tiles[1]
                end
        end
 
@@ -265,7 +263,7 @@ function tnt.boom(pos, def)
        if not def.disable_drops then
                eject_drops(drops, pos, def.radius)
        end
-       add_effects(pos, def.radius)
+       add_effects(pos, def.radius, drops)
 end
 
 minetest.register_node("tnt:boom", {