cartographer/formspec.lua

167 lines
4.3 KiB
Lua

local gui = {};
function gui.formspec(args)
local data = string.format("formspec_version[%d] size[%f,%f]", args.version or 3, args.w, args.h);
if args.bg then
data = data .. gui.bg9 {
skin = args.bg,
fullsize = true,
};
end
for _,element in ipairs(args) do
data = data .. element;
end
return data;
end
function gui.animated_image(args)
return string.format("animated_image[%f,%f;%f,%f;%s;%s;%d;%d]",
args.x, args.y,
args.w, args.h,
args.id or "",
args.animation.texture .. ".png",
args.animation.frame_count,
args.animation.frame_duration);
end
function gui.bg9(args)
return string.format("background9[%f,%f;%f,%f;%s;%s;%s]",
args.x or 0, args.y or 0,
args.w or 1 * (args.size or 1), args.h or 1 * (args.size or 1),
args.skin.texture .. ".png",
args.fullsize or false,
tostring(args.skin.radius));
end
function gui.button(args)
if args.disabled then
return string.format("button[%f,%f;%f,%f;disabled_button;%s]", args.x, args.y, args.w, args.h, args.text);
end
local data = string.format("button[%f,%f;%f,%f;%s;%s]", args.x, args.y, args.w, args.h, args.id, args.text);
if args.tooltip then
data = data .. gui.tooltip {
id = args.id,
text = args.tooltip
};
end
return data;
end
function gui.container(args)
local data = string.format("container[%f,%f]", args.x, args.y);
if args.bg then
data = data .. gui.bg9 {
x = 0,
y = 0,
w = args.w,
h = args.h,
skin = args.bg,
};
end
for _,element in ipairs(args) do
data = data .. element;
end
return data .. "container_end[]";
end
function gui.image(args)
return string.format("image[%f,%f;%f,%f;%s]", args.x, args.y, args.w, args.h, args.image);
end
function gui.image_button(args)
local data = string.format("image_button[%f,%f;%f,%f;%s;%s;%s]",
args.x, args.y,
args.w, args.h,
args.image,
args.id,
args.text or "");
if args.tooltip then
data = data .. gui.tooltip {
id = args.id,
text = args.tooltip
};
end
return data;
end
function gui.inventory(args)
local data = "";
if args.bg then
for i = 0,args.w - 1 do
for j = 0,args.h - 1 do
data = data .. gui.bg9 {
x = args.x + (i * 1.25),
y = args.y + (j * 1.25),
skin = args.bg,
};
end
end
end
data = data .. string.format("list[%s;%s;%f,%f;%f,%f;]", args.location, args.id, args.x, args.y, args.w, args.h);
if args.tooltip then
data = data .. gui.tooltip {
x = args.x,
y = args.y,
w = args.w,
h = args.h,
text = args.tooltip,
};
end
return data;
end
function gui.label(args)
if args.textcolor then
return string.format("label[%f,%f;%s%s]",
args.x,
args.y,
minetest.get_color_escape_sequence(args.textcolor),
args.text);
end
return string.format("label[%f,%f;%s]", args.x, args.y, args.text);
end
function gui.style_internal(selector, properties)
local data = "[" .. selector;
for name,value in pairs(properties) do
data = data .. string.format(";%s=%s", name, tostring(value));
end
return data .. "]";
end
function gui.style(args)
return "style" .. gui.style_internal(args.selector, args.properties);
end
function gui.style_type(args)
return "style_type" .. gui.style_internal(args.selector, args.properties);
end
function gui.tooltip(args)
if args.id then
return string.format("tooltip[%s;%s]", args.id, args.text);
else
return string.format("tooltip[%f,%f;%f,%f;%s]", args.x, args.y, args.w, args.h, args.text);
end
end
return gui;