diff options
author | Vanessa Ezekowitz <vanessaezekowitz@gmail.com> | 2017-02-24 18:38:15 -0500 |
---|---|---|
committer | Vanessa Ezekowitz <vanessaezekowitz@gmail.com> | 2017-02-24 18:38:15 -0500 |
commit | 50013d21d1a56b1a48c32e281d2bb9e5a96f931b (patch) | |
tree | 0ef3aab9d6a90c1ae0475ac43651701a8b172a96 /init.lua | |
parent | 9ad1f28ae1a50fb3beda339ebc3575a9b28e21ec (diff) | |
download | unifieddyes-50013d21d1a56b1a48c32e281d2bb9e5a96f931b.tar unifieddyes-50013d21d1a56b1a48c32e281d2bb9e5a96f931b.tar.gz unifieddyes-50013d21d1a56b1a48c32e281d2bb9e5a96f931b.tar.bz2 unifieddyes-50013d21d1a56b1a48c32e281d2bb9e5a96f931b.tar.xz unifieddyes-50013d21d1a56b1a48c32e281d2bb9e5a96f931b.zip |
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)
Diffstat (limited to 'init.lua')
-rw-r--r-- | init.lua | 145 |
1 files changed, 121 insertions, 24 deletions
@@ -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) |