visual-bots-cd2025/formspec.lua
2019-07-29 07:15:10 +00:00

157 lines
5.3 KiB
Lua

-------------------------------------
-- Formspec colored boxes
-------------------------------------
local function highlight(item,line,w,h,r,g,b)
local item = item - 0.09
local line = line - 0.06
return "box[" .. item .. "," .. line .. ";" .. w .. "," .. h .. ";#" ..
r..r .. g..g .. b..b .."90]"
end
-------------------------------------
-- Formspec button generators
-------------------------------------
local function button(x,y,image,name,exit)
if not exit then
return "image_button["..x..","..y..";1,1;"..image..";"..name..";]"..
"tooltip["..x..","..y..";1,1;"..name.."]"
else
return "image_button_exit["..x..","..y..";1,1;"..image..";"..name..";]"..
"tooltip["..x..","..y..";1,1;"..name.."]"
end
end
local function cbutton(x,y,name)
return "image_button["..x..","..y..";1,1;vbots_"..name..".png;"..name..";]"..
"tooltip["..x..","..y..";1,1;"..name.."]"
end
local function button_row(x,y,nametable)
local row = ""
for i,name in pairs(nametable) do
row = row .. cbutton(x+i-1,y,name)
end
return row
end
-------------------------------------
-- Main panel generators
-------------------------------------
local function panel_botinv(pos)
return "list[nodemeta:" .. pos .. ";main;0,1;8,4;]"
.."listring[nodemeta:" .. pos .. ";main]"
..highlight(0,1,8,4,"a","a","f")
end
local function panel_playerinv()
return "list[current_player;main;0,5;8,4;]"
.."listring[current_player;main]"
--..highlight(0,5,8,4,"a","f","a")
end
local function panel_commands()
local commands = {
{"move_forward","move_backward","move_up","move_down"},
{"turn_clockwise","turn_anticlockwise","turn_random"},
{"mode_dig_up","mode_dig","mode_dig_down"},
{"mode_build_up","mode_build","mode_build_down"},
--{"case_repeat","case_test","case_end","case_success","case_failure","case_yes","case_no" },
--{"mode_examine","mode_pause","mode_wait"},
{},
{"number_0","number_1","number_2","number_3","number_4"},
{"number_5","number_6","number_7","number_8","number_9"},
{"run_1","run_2","run_3","run_4","run_5","run_6"}
}
local panel = highlight(0,1,7,8,"a","a","f")
for row,namelist in pairs(commands) do
panel = panel .. button_row(0,row,namelist)
end
return panel
end
local function panel_main(pos,mode)
local panel
if mode == 0 then
panel = panel_commands()
else
panel = panel_playerinv() .. panel_botinv(pos)
end
return panel
..button(0.5,0,"vbots_gui_commands.png","commands")
..button(1.5,0,"vbots_location_inventory.png","player_inv")
..highlight(0.5+mode,0,1,1,"a","a","f")
end
-------------------------------------
-- Main panel generator
-------------------------------------
local function panel_code(pos,program)
return button(10,0,"vbots_gui_run.png","run",true)
..button(11,0,"vbots_gui_check.png","check")
..button(12,0,"vbots_gui_load.png","load")
..button(13,0,"vbots_gui_save.png","save")
..highlight(10,0,4,1,"5","5","f")
..button(15,0,"vbots_gui_exit.png","exit",true)
..highlight(15,0,1,1,"f","0","0")
..button(6.5,0,"vbots_gui_trash.png","trash")
.."list[detached:bottrash;main;7.5,0;1,1;]"
.."listring[nodemeta:" .. pos .. ";p"..program.."]"
..highlight(6.5,0,2,1,"0","0","0")
.."list[nodemeta:" .. pos .. ";p"..program..";8,1;7,8;]"
.."listring[nodemeta:" .. pos .. ";trash]"
..highlight(8,1,7,8,"f","a","f")
..button(15,1.5,"vbots_program_0.png","sub_0")
..button(15,2.5,"vbots_program_1.png","sub_1")
..button(15,3.5,"vbots_program_2.png","sub_2")
..button(15,4.5,"vbots_program_3.png","sub_3")
..button(15,5.5,"vbots_program_4.png","sub_4")
..button(15,6.5,"vbots_program_5.png","sub_5")
..button(15,7.5,"vbots_program_6.png","sub_6")
..highlight(15,1.5+program,1,1,"f","a","f")
..highlight(8,1,1,1,"f","f","f")
end
-------------------------------------
-- Formspec generator
-------------------------------------
local function get_formspec(pos,meta)
local bot_key = meta:get_string("key")
local bot_owner = meta:get_string("owner")
local bot_name = meta:get_string("name")
local bot_pos = pos.x .. "," .. pos.y .. "," .. pos.z
local fs_panel = meta:get_int("panel")
local fs_program = meta:get_int("program")
--print(dump(meta:to_table().fields))
--print("Panel:"..fs_panel)
--print("Program:"..fs_program)
local formspec = "size[16,9]"
.."label[3,0;\"" ..bot_name.. "\" (" ..bot_owner.. ")]"
..panel_main(bot_pos,fs_panel)
..panel_code(bot_pos,fs_program)
return formspec
end
-------------------------------------
-- callback from bot node on_rightclick
-------------------------------------
function vbots.show_formspec(clicker,pos)
local meta = minetest.get_meta(pos)
local bot_key = meta:get_string("key")
minetest.show_formspec( clicker:get_player_name(),
bot_key ,
get_formspec(pos,meta)
)
end