From 50013d21d1a56b1a48c32e281d2bb9e5a96f931b Mon Sep 17 00:00:00 2001 From: Vanessa Ezekowitz Date: Fri, 24 Feb 2017 18:38:15 -0500 Subject: [PATCH] Add detection and setting of new palette (with any luck, all that's left now is to update the mods that use Unified Dyes, where the new palette is wanted) --- init.lua | 145 ++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 121 insertions(+), 24 deletions(-) diff --git a/init.lua b/init.lua index cb672fe..f23693c 100644 --- a/init.lua +++ b/init.lua @@ -87,6 +87,9 @@ local HUES_EXTENDED = { { "crimson", 0xff, 0x00, 0x40 } } +for _, i in ipairs(HUES_EXTENDED) do + print("[\""..i[1].."\"] =,") +end local SATS = { "", "_s50" @@ -256,9 +259,18 @@ function unifieddyes.get_hsv(name) -- expects a node/item name return hue, sat, val end --- code borrowed from cheapie's plasticbox mod +-- code partially borrowed from cheapie's plasticbox mod + +-- in the function below, color is just a color string, while +-- palette_type can be: +-- +-- false/nil = standard 89 color palette +-- true = 89 color palette split into pieces for colorfacedir +-- "wallmounted" = 32-color abridged palette +-- "extended" = 256 color palette + +function unifieddyes.getpaletteidx(color, palette_type) -function unifieddyes.getpaletteidx(color, is_color_fdir) local origcolor = color local aliases = { ["pink"] = "light_red", @@ -273,6 +285,28 @@ function unifieddyes.getpaletteidx(color, is_color_fdir) ["black"] = 5, } + local grayscale_extended = { + ["white"] = 0, + ["grey_14"] = 1, + ["grey_13"] = 2, + ["grey_12"] = 3, + ["light_grey"] = 3, + ["grey_11"] = 4, + ["grey_10"] = 5, + ["grey_9"] = 6, + ["grey_8"] = 7, + ["grey"] = 7, + ["grey_7"] = 8, + ["grey_6"] = 9, + ["grey_5"] = 10, + ["grey_4"] = 11, + ["dark_grey"] = 11, + ["grey_3"] = 12, + ["grey_2"] = 13, + ["grey_1"] = 14, + ["black"] = 15, + } + local grayscale_wallmounted = { ["white"] = 0, ["light_grey"] = 1, @@ -296,6 +330,33 @@ function unifieddyes.getpaletteidx(color, is_color_fdir) ["redviolet"] = 12, } + local hues_extended = { + ["red"] = 0, + ["vermilion"] = 1, + ["orange"] = 2, + ["amber"] = 3, + ["yellow"] = 4, + ["lime"] = 5, + ["chartreuse"] = 6, + ["harlequin"] = 7, + ["green"] = 8, + ["malachite"] = 9, + ["spring"] = 10, + ["turquoise"] = 11, + ["cyan"] = 12, + ["cerulean"] = 13, + ["azure"] = 14, + ["sapphire"] = 15, + ["blue"] = 16, + ["indigo"] = 17, + ["violet"] = 18, + ["mulberry"] = 19, + ["magenta"] = 20, + ["fuchsia"] = 21, + ["rose"] = 22, + ["crimson"] = 23, + } + local hues_wallmounted = { ["red"] = 0, ["orange"] = 1, @@ -317,6 +378,19 @@ function unifieddyes.getpaletteidx(color, is_color_fdir) ["darks50"] = 7, } + local shades_extended = { + ["faint"] = 1, + ["pastel"] = 2, + ["light"] = 3, + ["bright"] = 4, + [""] = 5, + ["s50"] = 6, + ["medium"] = 7, + ["mediums50"] = 8, + ["dark"] = 9, + ["darks50"] = 10, + } + local shades_wallmounted = { [""] = 1, ["medium"] = 2, @@ -331,24 +405,37 @@ function unifieddyes.getpaletteidx(color, is_color_fdir) return end - if is_color_fdir == "wallmounted" then + if palette_type == "wallmounted" then if grayscale_wallmounted[color] then return (grayscale_wallmounted[color] * 8), 0 end - elseif is_color_fdir then + elseif palette_type == true then if grayscale[color] then return (grayscale[color] * 32), 0 end + elseif palette_type == "extended" then + if grayscale_extended[color] then + return grayscale_extended[color], 0 + end else if grayscale[color] then return grayscale[color], 0 end end - local shade = "" - if string.sub(color,1,6) == "light_" then + local shade = "" -- assume full + if string.sub(color,1,6) == "faint_" then + shade = "faint" + color = string.sub(color,7,-1) + elseif string.sub(color,1,7) == "pastel_" then + shade = "pastel" + color = string.sub(color,8,-1) + elseif string.sub(color,1,6) == "light_" then shade = "light" color = string.sub(color,7,-1) + elseif string.sub(color,1,7) == "bright_" then + shade = "bright" + color = string.sub(color,8,-1) elseif string.sub(color,1,7) == "medium_" then shade = "medium" color = string.sub(color,8,-1) @@ -361,7 +448,7 @@ function unifieddyes.getpaletteidx(color, is_color_fdir) color = string.sub(color,1,-5) end - if is_color_fdir == "wallmounted" then + if palette_type == "wallmounted" then if color == "brown" then return 48,1 elseif color == "pink" then return 56,7 elseif color == "blue" and shade == "light" then return 40,5 @@ -376,10 +463,16 @@ function unifieddyes.getpaletteidx(color, is_color_fdir) color = "red" shade = "light" end - if hues[color] and shades[shade] then - if is_color_fdir then + if palette_type == true then -- it's colorfacedir + if hues[color] and shades[shade] then return (shades[shade] * 32), hues[color] - else + end + elseif palette_type == "extended" then + if hues_extended[color] and shades_extended[shade] then + return (hues_extended[color] + shades_extended[shade]*24), hues_extended[color] + end + else -- it's the 89-color palette + if hues[color] and shades[shade] then return (hues[color] * 8 + shades[shade]), hues[color] end end @@ -433,14 +526,18 @@ function unifieddyes.on_use(itemstack, player, pointed_thing) end local newnode = nodedef.ud_replacement_node - local is_color_fdir + local palette_type if nodedef.paramtype2 == "color" then - is_color_fdir = false - elseif nodedef.paramtype2 == "colorfacedir" - then is_color_fdir = true - elseif nodedef.paramtype2 == "colorwallmounted" - then is_color_fdir = "wallmounted" + if nodedef.palette == "unifieddyes_palette_extended.png" then + palette_type = "extended" + else + palette_type = false + end + elseif nodedef.paramtype2 == "colorfacedir" then + palette_type = true + elseif nodedef.paramtype2 == "colorwallmounted" then + palette_type = "wallmounted" end if minetest.is_protected(pos, playername) and not minetest.check_player_privs(playername, {protection_bypass=true}) then @@ -450,7 +547,7 @@ function unifieddyes.on_use(itemstack, player, pointed_thing) local stackname = itemstack:get_name() local pos2 = unifieddyes.select_node(pointed_thing) - local paletteidx, hue = unifieddyes.getpaletteidx(stackname, is_color_fdir) + local paletteidx, hue = unifieddyes.getpaletteidx(stackname, palette_type) if paletteidx then @@ -478,7 +575,7 @@ function unifieddyes.on_use(itemstack, player, pointed_thing) node.param2 = paletteidx - local oldpaletteidx, oldhuenum = unifieddyes.getpaletteidx(prevdye, is_color_fdir) + local oldpaletteidx, oldhuenum = unifieddyes.getpaletteidx(prevdye, palette_type) local oldnode = minetest.get_node(pos) local oldhue = nil @@ -491,9 +588,9 @@ function unifieddyes.on_use(itemstack, player, pointed_thing) end if newnode then -- this path is used when the calling mod want to supply a replacement node - if is_color_fdir == "wallmounted" then + if palette_type == "wallmounted" then node.param2 = paletteidx + (minetest.get_node(pos).param2 % 8) - elseif is_color_fdir then -- we probably need to change the hue of the node too + elseif palette_type == true then -- it's colorfacedir if oldhue ~=0 then -- it's colored, not grey if oldhue ~= nil then -- it's been painted before if hue ~= 0 then -- the player's wielding a colored dye @@ -512,7 +609,7 @@ function unifieddyes.on_use(itemstack, player, pointed_thing) end end node.param2 = paletteidx + (minetest.get_node(pos).param2 % 32) - else + else -- it's the 89-color palette, or the extended palette node.param2 = paletteidx end node.name = newnode @@ -522,9 +619,9 @@ function unifieddyes.on_use(itemstack, player, pointed_thing) end else -- this path is used when you're just painting an existing node, rather than replacing one. newnode = oldnode -- note that here, newnode/oldnode are a full node, not just the name. - if is_color_fdir == "wallmounted" then + if palette_type == "wallmounted" then newnode.param2 = paletteidx + (minetest.get_node(pos).param2 % 8) - elseif is_color_fdir then + elseif palette_type == true then -- it's colorfacedir if oldhue then if hue ~= 0 then newnode.name = string.gsub(newnode.name, "_"..oldhue, "_"..HUES[hue]) @@ -535,7 +632,7 @@ function unifieddyes.on_use(itemstack, player, pointed_thing) newnode.name = string.gsub(newnode.name, "_grey", "_"..HUES[hue]) end newnode.param2 = paletteidx + (minetest.get_node(pos).param2 % 32) - else + else -- it's the 89-color palette, or the extended palette newnode.param2 = paletteidx end minetest.swap_node(pos, newnode)