diff --git a/map_api.lua b/map_api.lua index 26afb0c..eed8018 100644 --- a/map_api.lua +++ b/map_api.lua @@ -215,6 +215,15 @@ function cartographer.is_filled(map, x, z) return map.fill[(x - map.x) + ((z - map.z) * map.w)] ~= nil; end +-- Get an entry from a list for a given detail level +-- textures: An array of textures +-- detail: The detail level +-- +-- Returns the entry at detail, or the last entry if detail is out-of-bounds +function cartographer.detail_texture(textures, detail) + return textures[math.min(detail, #textures)]; +end + -- Get the texture name (minus index/extension) for the given biome, height, and detail level. -- name: A string containing the biome name -- height: A number representing the Y position of the biome @@ -222,8 +231,8 @@ end -- Returns a string with a texture name, or nil if no matching biome entry was found. function cartographer.get_biome_texture(name, height, detail) for _,biome in ipairs(_cartographer.biome_lookup) do - if biome.name == name and (biome.min_height == nil or height >= biome.min_height) and (biome.max_height == nil or height <= biome.max_height) then - return biome.textures[math.min(detail, #biome.textures)]; + if biome.name == name and (not biome.min_height or height >= biome.min_height) and (not biome.max_height or height <= biome.max_height) then + return cartographer.detail_texture(biome.textures, detail); end end diff --git a/map_formspec.lua b/map_formspec.lua index c526829..c4ec079 100644 --- a/map_formspec.lua +++ b/map_formspec.lua @@ -36,11 +36,16 @@ local marker = "animated_image[%f,%f;%f,%f;;%s;%d;%d]"; -- Generate formspec markup for an unknown biome tile -- x: The x position of the tile -- y: The y position of the tile +-- detail: The detail level -- variant: The tile variant -- -- Returns a formspec string -local function unknown_biome_tile(x, y, variant) - return tile:format(x, y, TILE_SIZE, TILE_SIZE, cartographer.skin.unknown_biome_texture .. "." .. tostring(variant) .. ".png"); +local function unknown_biome_tile(x, y, detail, variant) + return string.format("image[%f,%f;%f,%f;%s.%s.png]", + x, y, + TILE_SIZE, TILE_SIZE, + cartographer.detail_texture(cartographer.skin.unknown_biome_textures, detail), + variant); end -- Generate formspec markup for a given map @@ -70,7 +75,7 @@ local function generate_map(data, x, y, w, h, player_x, player_y, detail, map_sc for j = y + h,y,-1 do local fy = (y + h - j) * TILE_OFFSET; if column == nil or column[j * map_scale] == nil or (is_visible and not is_visible(user, i, j)) then - str = str .. unknown_biome_tile(fx, fy, get_variant(i - x, j - y, noise)); + str = str .. unknown_biome_tile(fx, fy, detail, get_variant(i - x, j - y, noise)); else local name = minetest.get_biome_name(column[j * map_scale].biome); local height = column[j * map_scale].height; @@ -85,7 +90,7 @@ local function generate_map(data, x, y, w, h, player_x, player_y, detail, map_sc mod = "^[colorize:white:"..tostring(height * 10) height = height * 0.05; - str = str..tile:format(fx, fy - height + TILE_OFFSET, TILE_SIZE, height + 0.01, cartographer.skin.cliff_texture .. ".png"); + str = str .. tile:format(fx, fy - height + TILE_OFFSET, TILE_SIZE, height + 0.01, cartographer.detail_texture(cartographer.skin.cliff_textures, detail) .. ".png"); elseif depth > 0 then mod = "^[colorize:#1f1f34:"..tostring(depth * 10) end @@ -100,14 +105,15 @@ local function generate_map(data, x, y, w, h, player_x, player_y, detail, map_sc end if i == player_x and j == player_y then + local player_icon = cartographer.detail_texture(cartographer.skin.player_icons, detail); str = str..marker:format(fx, fy - height, TILE_SIZE, TILE_SIZE, - cartographer.skin.player_icon.texture .. ".png", - cartographer.skin.player_icon.frame_count, - cartographer.skin.player_icon.frame_duration); + player_icon.texture .. ".png", + player_icon.frame_count, + player_icon.frame_duration); end else - str = str .. unknown_biome_tile(fx, fy, get_variant(i - x, j - y, noise)); + str = str .. unknown_biome_tile(fx, fy, detail, get_variant(i - x, j - y, noise)); end end end diff --git a/skin_api.lua b/skin_api.lua index 3697b9b..2adb5b0 100644 --- a/skin_api.lua +++ b/skin_api.lua @@ -1,13 +1,28 @@ -- Table used for skinning cartographer's look and feel cartographer.skin = { - -- The texture to use in maps for the sides of tiles - cliff_texture = "cartographer_cliff", + -- The textures to use in maps for the sides of tiles + cliff_textures = { + "cartographer_simple_cliff", + "cartographer_cliff", + }; + + -- The textures to use in maps for uncovered/unknown tiles + unknown_biome_textures = { + "cartographer_unknown_biome", + }; -- The animated texture data to use for the player icon - player_icon = { - frame_count = 2, - frame_duration = 500, - texture = "cartographer_player_icon", + player_icons = { + { + frame_count = 2, + frame_duration = 500, + texture = "cartographer_simple_player_icon", + }, + { + frame_count = 2, + frame_duration = 500, + texture = "cartographer_player_icon", + }, }, -- The skinning data for the cartographer's tables @@ -147,7 +162,4 @@ cartographer.skin = { pressed_texture = "cartographer_simple_table_button_pressed", radius = 8, }, - - -- The texture to use in maps when biome data is missing or empty - unknown_biome_texture = "cartographer_unknown_biome", }; diff --git a/textures/cartographer_cliff.png b/textures/cartographer_cliff.png index d51c447..281bb4d 100644 Binary files a/textures/cartographer_cliff.png and b/textures/cartographer_cliff.png differ diff --git a/textures/cartographer_player_icon.png b/textures/cartographer_player_icon.png index 81b22d9..fbeee59 100644 Binary files a/textures/cartographer_player_icon.png and b/textures/cartographer_player_icon.png differ diff --git a/textures/cartographer_simple_cliff.png b/textures/cartographer_simple_cliff.png new file mode 100644 index 0000000..82ff79b Binary files /dev/null and b/textures/cartographer_simple_cliff.png differ diff --git a/textures/cartographer_simple_player_icon.png b/textures/cartographer_simple_player_icon.png new file mode 100644 index 0000000..81b22d9 Binary files /dev/null and b/textures/cartographer_simple_player_icon.png differ