commit
6fe62c6659
|
@ -43,20 +43,6 @@ local function rgb_to_hex(r, g, b)
|
|||
return string.format("#%02X%02X%02X", r, g, b)
|
||||
end
|
||||
|
||||
-- Need to convert between 1000 units and 256
|
||||
local function from_slider_rgb(value)
|
||||
value = tonumber(value)
|
||||
return math.floor((255/1000*value)+0.5)
|
||||
end
|
||||
|
||||
-- ...and back
|
||||
local function to_slider_rgb(value)
|
||||
if value then
|
||||
return 1000/255*value
|
||||
end
|
||||
return 1000/255*255
|
||||
end
|
||||
|
||||
-- Painter formspec
|
||||
local function painter_form(itemstack, player)
|
||||
local meta = itemstack:get_meta()
|
||||
|
@ -75,22 +61,30 @@ local function painter_form(itemstack, player)
|
|||
"label[0,0;Preview:]"..
|
||||
"image[1.2,0;2,2;automobiles_painting.png^[colorize:"..color..":255]"..
|
||||
-- RGB sliders
|
||||
"scrollbar[0,2;5,0.3;horizontal;r;"..tostring(to_slider_rgb(rgb.r)).."]"..
|
||||
"label[5.1,1.9;R: "..tostring(rgb.r).."]"..
|
||||
"scrollbar[0,2.6;5,0.3;horizontal;g;"..tostring(to_slider_rgb(rgb.g)).."]"..
|
||||
"label[5.1,2.5;G: "..tostring(rgb.g).."]"..
|
||||
"scrollbar[0,3.2;5,0.3;horizontal;b;"..tostring(to_slider_rgb(rgb.b)).."]"..
|
||||
"label[5.1,3.1;B: "..tostring(rgb.b).."]"..
|
||||
"scrollbaroptions[min=0;max=255]"..
|
||||
"scrollbar[0,2;5,0.3;horizontal;r;"..rgb.r.."]"..
|
||||
"label[5.1,1.9;R: "..rgb.r.."]"..
|
||||
"scrollbar[0,2.6;5,0.3;horizontal;g;"..rgb.g.."]"..
|
||||
"label[5.1,2.5;G: "..rgb.g.."]"..
|
||||
"scrollbar[0,3.2;5,0.3;horizontal;b;"..rgb.b.."]"..
|
||||
"label[5.1,3.1;B: "..rgb.b.."]"..
|
||||
-- Hex field
|
||||
"field[0.3,4.5;2,0.8;hex;Hex Color;"..color.."]"..
|
||||
"button[4.05,4.1;2,1;set;Set color]"
|
||||
)
|
||||
end
|
||||
|
||||
local formspec_timers = {}
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if formname == "automobiles_lib:painter" then
|
||||
if formspec_timers[player] then
|
||||
formspec_timers[player]:cancel()
|
||||
formspec_timers[player] = nil
|
||||
end
|
||||
|
||||
local itemstack = player:get_wielded_item()
|
||||
if fields.set then
|
||||
if fields.set or fields.quit then
|
||||
if itemstack:get_name() == "automobiles_lib:painter" then
|
||||
local meta = itemstack:get_meta()
|
||||
local hex = fields.hex
|
||||
|
@ -103,24 +97,35 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||
meta:set_string("description", "Automobiles Painter ("..hex:upper()..")")
|
||||
player:set_wielded_item(itemstack)
|
||||
painter_form(itemstack, player)
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
if fields.r or fields.g or fields.b then
|
||||
elseif fields.r or fields.g or fields.b then
|
||||
if itemstack:get_name() == "automobiles_lib:painter" then
|
||||
-- Save on slider adjustment (hex/alpha will adjust to match the rgba!)
|
||||
local meta = itemstack:get_meta()
|
||||
local function sval(value)
|
||||
return from_slider_rgb(value:gsub(".*:", ""))
|
||||
local num = math.floor(tonumber((value:gsub(".*:", ""))) or 0)
|
||||
if num > 255 or num < 0 then num = 0 end
|
||||
return num
|
||||
end
|
||||
meta:set_string("paint_color", rgb_to_hex(sval(fields.r),sval(fields.g),sval(fields.b)))
|
||||
-- Keep track of what this painter is painting
|
||||
meta:set_string("description", "Automobiles Painter ("..meta:get_string("paint_color"):upper()..")")
|
||||
player:set_wielded_item(itemstack)
|
||||
painter_form(itemstack, player)
|
||||
|
||||
formspec_timers[player] = minetest.after(0.2, function(itemstack, name)
|
||||
local player = minetest.get_player_by_name(name)
|
||||
if player then
|
||||
local wield = player:get_wielded_item()
|
||||
if wield:get_name() == itemstack:get_name() then
|
||||
player:set_wielded_item(itemstack)
|
||||
painter_form(itemstack, player)
|
||||
end
|
||||
end
|
||||
formspec_timers[player] = nil
|
||||
end, itemstack, player:get_player_name())
|
||||
end
|
||||
end
|
||||
return true
|
||||
end
|
||||
end)
|
||||
--[[end of adaptations]]--
|
||||
|
|
Loading…
Reference in New Issue