limit available operations per step: moving(8),placing(5), inserting(5)

faster text render string, changed length limit
This commit is contained in:
rnd 2018-07-19 17:23:34 +02:00
parent 86c1317f06
commit f110b93dc3

View File

@ -80,6 +80,8 @@ basic_robot.commands.move = function(name,dir)
local obj = basic_robot.data[name].obj; local obj = basic_robot.data[name].obj;
local pos = pos_in_dir(obj, dir) local pos = pos_in_dir(obj, dir)
check_operations(name,0.25,true)
-- can move through walkable nodes -- can move through walkable nodes
if minetest.registered_nodes[minetest.get_node(pos).name].walkable then return end if minetest.registered_nodes[minetest.get_node(pos).name].walkable then return end
-- up; no levitation! -- up; no levitation!
@ -168,6 +170,8 @@ end
basic_robot.commands.insert_item = function(name,item, inventory,dir) basic_robot.commands.insert_item = function(name,item, inventory,dir)
check_operations(name,0.4,true)
local obj = basic_robot.data[name].obj; local obj = basic_robot.data[name].obj;
local tpos = pos_in_dir(obj, dir); -- position of target block local tpos = pos_in_dir(obj, dir); -- position of target block
local luaent = obj:get_luaentity(); local luaent = obj:get_luaentity();
@ -337,6 +341,8 @@ basic_robot.commands.write_text = function(name,dir,text)
end end
basic_robot.commands.place = function(name,nodename, param2,dir) basic_robot.commands.place = function(name,nodename, param2,dir)
check_operations(name,0.4,true)
local obj = basic_robot.data[name].obj; local obj = basic_robot.data[name].obj;
local pos = pos_in_dir(obj, dir) local pos = pos_in_dir(obj, dir)
local luaent = obj:get_luaentity(); local luaent = obj:get_luaentity();
@ -493,6 +499,7 @@ local render_text = function(text,linesize)
local count = math.floor(string.len(text)/linesize)+1; local count = math.floor(string.len(text)/linesize)+1;
local width = 18; local height = 24; local width = 18; local height = 24;
local tex = ""; local tex = "";
local ret = {};
local y = 0; local x=0; local y = 0; local x=0;
for i=1,string.len(text) do for i=1,string.len(text) do
local cb = string.byte(text,i); local cb = string.byte(text,i);
@ -501,26 +508,26 @@ local render_text = function(text,linesize)
y=y+1; x=0 y=y+1; x=0
else else
c = string.format("%03d",cb)..".png" c = string.format("%03d",cb)..".png"
tex = tex .. ":" .. (x*width) .. "," .. (y*height) .. "=" .. c; ret[#ret+1] = ":" .. (x*width) .. "," .. (y*height) .. "=" .. c;
--tex = tex .. ":" .. (x*width) .. "," .. (y*height) .. "=" .. c;
if x==linesize-1 then y=y+1 x=0 else x=x+1 end if x==linesize-1 then y=y+1 x=0 else x=x+1 end
end end
end end
local background = "(black_screen.png^[resize:"..(linesize*width).. "x".. (linesize*height) ..")"; local background = "(black_screen.png^[resize:"..(linesize*width).. "x".. (linesize*height) ..")";
tex = "([combine:"..(linesize*width).."x"..(linesize*height)..tex..")"; --tex = "([combine:"..(linesize*width).."x"..(linesize*height)..tex..")";
tex = background .. "^" .. tex; return background .. "^" .."([combine:"..(linesize*width).."x"..(linesize*height)..table.concat(ret,"")..")";
return tex;
end end
basic_robot.commands.display_text = function(obj,text,linesize,size) basic_robot.commands.display_text = function(obj,text,linesize,size)
if not linesize or linesize<1 then linesize = 20 end if not linesize or linesize<1 then linesize = 20 elseif linesize>40 then linesize = 40 end
if size and size<=0 then size = 1 end if size and size<=0 then size = 1 end
if string.len(text)>linesize*linesize then text = string.sub(text,1,linesize*linesize) end if string.len(text)>linesize*linesize then text = string.sub(text,1,linesize*linesize) end
local tex = render_text(text,linesize); local tex = render_text(text,linesize);
if not size then return tex end if not size then return tex end
if string.len(tex)<60000 then if string.len(tex)<=1600 then
obj:set_properties({textures={"arrow.png","basic_machine_side.png",tex,"basic_machine_side.png","basic_machine_side.png","basic_machine_side.png"},visual_size = {x=size,y=size}}) obj:set_properties({textures={"arrow.png","basic_machine_side.png",tex,"basic_machine_side.png","basic_machine_side.png","basic_machine_side.png"},visual_size = {x=size,y=size}})
else else
self.label("error: string too long") self.label("error: string too long")