From 83679a392afdcb31643fc935f415b37ce4a546d6 Mon Sep 17 00:00:00 2001 From: stujones11 Date: Sun, 26 Feb 2017 22:35:41 +0000 Subject: [PATCH] Add single frame support for animated tiles --- api.lua | 48 ++++++++++++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/api.lua b/api.lua index 90728a6..3d15f4c 100644 --- a/api.lua +++ b/api.lua @@ -35,18 +35,27 @@ local function connects_to_group(pos, groups) end end -local function get_tile_textures(tiles, facedir) - local t = table.copy(tiles) - for i, v in pairs(t) do +local function get_tile_textures(tiles) + local textures = table.copy(tiles) + for i, v in pairs(textures) do if type(v) == "table" then - t[i] = v.name or "blank.png" + textures[i] = v.name or "blank.png" + if v.name and v.animation then + local w = v.animation.aspect_w or 16 + local h = v.animation.aspect_h or w + textures[i] = "[combine:"..w.."x"..h..":0,0="..v.name + end end end - local textures = {t[1], t[1], t[1], t[1], t[1], t[1]} + return textures +end + +local function get_tile_shading(t, facedir) + local tiles = {t[1], t[1], t[1], t[1], t[1], t[1]} if #t == 3 then - textures = {t[1], t[2], t[3], t[3], t[3], t[3]} + tiles = {t[1], t[2], t[3], t[3], t[3], t[3]} elseif #t == 6 then - textures = table.copy(t) + tiles = table.copy(t) end if facedir and meshnode.config.fake_shading == true then local tile_opposite = {2, 1, 4, 3, 6, 5} @@ -69,10 +78,10 @@ local function get_tile_textures(tiles, facedir) modifiers[back] = "^[colorize:#000000:64" for i = 1, 6 do local modifier = modifiers[i] or "^[colorize:#000000:32" - textures[i] = textures[i]..modifier + tiles[i] = tiles[i]..modifier end end - return textures + return tiles end local function get_facecon_textures(facecons, texture) @@ -192,6 +201,7 @@ meshnode.add_entity = function(ref, parent) if object then local properties = {textures={ref.node.name}} local def = minetest.registered_items[ref.node.name] or {} + local tiles = get_tile_textures(def.tiles) if ref.meshtype == "stair" or ref.meshtype == "cube" or ref.meshtype == "slab" then @@ -199,33 +209,33 @@ meshnode.add_entity = function(ref, parent) properties.visual = "mesh" properties.visual_size = {x=1, y=1} properties.mesh = "meshnode_"..ref.meshtype..".obj" - properties.textures = get_tile_textures(def.tiles, param2) + properties.textures = get_tile_shading(tiles, param2) elseif ref.meshtype == "mesh" then properties.visual = "mesh" properties.visual_size = {x=10, y=10} properties.mesh = def.mesh - properties.textures = get_tile_textures(def.tiles) + properties.textures = tiles elseif ref.meshtype == "plant" then properties.visual = "mesh" properties.visual_size = {x=1, y=1} properties.mesh = "meshnode_plant.obj" - properties.textures = {def.tiles[1]} + properties.textures = {tiles[1]} elseif ref.meshtype == "fence" then - local textures = get_facecon_textures(ref.facecons, def.tiles[1]) - table.insert(textures, 1, def.tiles[1]) + local textures = get_facecon_textures(ref.facecons, tiles[1]) + table.insert(textures, 1, tiles[1]) properties.visual = "mesh" properties.visual_size = {x=1, y=1} properties.mesh = "meshnode_fence.obj" properties.textures = textures elseif ref.meshtype == "wall" then - local textures = get_facecon_textures(ref.facecons, def.tiles[1]) - table.insert(textures, 1, def.tiles[1]) + local textures = get_facecon_textures(ref.facecons, tiles[1]) + table.insert(textures, 1, tiles[1]) properties.visual = "mesh" properties.visual_size = {x=1, y=1} properties.mesh = "meshnode_wall.obj" properties.textures = textures elseif ref.meshtype == "pane" then - local textures = get_facecon_textures(ref.facecons, def.tiles[3]) + local textures = get_facecon_textures(ref.facecons, tiles[3]) properties.visual = "mesh" properties.visual_size = {x=1, y=1} properties.mesh = "meshnode_pane.obj" @@ -270,7 +280,9 @@ meshnode.create = function(pos, parent) def.paramtype2 == "wallmounted" or def.paramtype2 == "flowingliquid" then return - elseif def.drawtype == nil or def.drawtype == "normal" then + elseif def.drawtype == nil or + def.drawtype == "normal" or + def.drawtype == "liquid" then meshtype = "cube" elseif def.drawtype == "mesh" then if string.find(node.name, "^stairs:stair_") then