summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcheapie <no-email-for-you@example.com>2025-04-23 19:59:21 -0500
committercheapie <no-email-for-you@example.com>2025-04-23 19:59:21 -0500
commit746f8bbe9e795a689e687444db0ecc933c23878a (patch)
tree90d1d93905991e05bd977554d74c0cff90905c85
parent2af75a7edeb4a43a2b6ee44f1b8884d6214e2081 (diff)
downloaddigiscreen-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.lua28
1 files changed, 25 insertions, 3 deletions
diff --git a/init.lua b/init.lua
index 1c203df..c7036a2 100644
--- a/init.lua
+++ b/init.lua
@@ -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,