diff options
| author | cheapie <no-email-for-you@example.com> | 2025-04-23 19:59:21 -0500 | 
|---|---|---|
| committer | cheapie <no-email-for-you@example.com> | 2025-04-23 19:59:21 -0500 | 
| commit | 746f8bbe9e795a689e687444db0ecc933c23878a (patch) | |
| tree | 90d1d93905991e05bd977554d74c0cff90905c85 | |
| parent | 2af75a7edeb4a43a2b6ee44f1b8884d6214e2081 (diff) | |
| download | digiscreen-746f8bbe9e795a689e687444db0ecc933c23878a.tar digiscreen-746f8bbe9e795a689e687444db0ecc933c23878a.tar.gz digiscreen-746f8bbe9e795a689e687444db0ecc933c23878a.tar.bz2 digiscreen-746f8bbe9e795a689e687444db0ecc933c23878a.tar.xz digiscreen-746f8bbe9e795a689e687444db0ecc933c23878a.zip | |
Use compression level 1 at first, then 9 if the image doesn't change for a few seconds
| -rw-r--r-- | init.lua | 28 | 
1 files changed, 25 insertions, 3 deletions
| @@ -40,8 +40,8 @@ function digiscreen.processDigilinesMessage(pos,msg)  			bincolors = bincolors..core.colorspec_to_bytes(colorspec)  		end  	end -	local img = core.encode_png(16,16,bincolors,0) -	return pos,"[png:"..core.encode_base64(img) +	local img = core.encode_png(16,16,bincolors,1) +	return pos,"[png:"..core.encode_base64(img),bincolors  end  function digiscreen.updateDisplay(pos) @@ -64,11 +64,29 @@ function digiscreen.updateDisplay(pos)  	entity:set_pos(vector.add(pos,vector.multiply(fdir,0.39)))  end -function digiscreen.asyncDone(pos,texture) +function digiscreen.asyncDone(pos,texture,bincolors)  	local node = core.get_node(pos)  	if node.name ~= "digiscreen:digiscreen" then return end  	local meta = core.get_meta(pos)  	meta:set_string("data","") +	meta:set_string("bincolors",bincolors) +	meta:set_string("texture",texture) +	digiscreen.updateDisplay(pos) +	core.get_node_timer(pos):start(5) +end + +function digiscreen.recompress(pos,bincolors) +	if string.len(bincolors) ~= 1024 then return false end +	local img = core.encode_png(16,16,bincolors,9) +	return true,pos,"[png:"..core.encode_base64(img) +end + +function digiscreen.recompressDone(ok,pos,texture) +	if not ok then return end +	local node = core.get_node(pos) +	if node.name ~= "digiscreen:digiscreen" then return end +	local meta = core.get_meta(pos) +	meta:set_string("bincolors","")  	meta:set_string("texture",texture)  	digiscreen.updateDisplay(pos)  end @@ -163,6 +181,10 @@ core.register_node("digiscreen:digiscreen",{  			digilines.receptor_send(screenpos,digilines.rules.default,core.get_meta(screenpos):get_string("channel"),message)  		end  	end, +	on_timer = function(pos) +		local bincolors = core.get_meta(pos):get_string("bincolors") +		if string.len(bincolors) > 0 then core.handle_async(digiscreen.recompress,digiscreen.recompressDone,pos,bincolors) end +	end,  	digiline = {  		wire = {  			rules = digilines.rules.default, | 
