[READ-ONLY] Mirror of https://github.com/thoda-dev/DU-Mining-Units-Monitoring. A mining units monitoring script jericho.dev
dual-universe dualuniverse lua mining mining-pool mining-units
0

Configure Feed

Select the types of activity you want to include in your feed.

added yellow level and red level, and the gauge is now following the calibration percent

Thomas (Apr 28, 2022, 8:57 PM +0200) 20d7d241 68177db1

+20 -6
+8
README.md
··· 28 28 ### informations 29 29 30 30 Mining units will be displayed in the order they are linked to the board 31 + 32 + ### Options 33 + 34 + By rightclicking on the board, advanced, edit lua parameters, you can customize these options: 35 + 36 + - `fontSize`: the size of the text for each line on the screen 37 + - `calibration_red_level`: The percent calibration below gauge will be red 38 + - `calibration_yellow_level`: The percent calibration below gauge will be red
+1 -1
config.json
··· 1 - {"slots":{"0":{"name":"slot1","type":{"events":[],"methods":[]}},"1":{"name":"slot2","type":{"events":[],"methods":[]}},"2":{"name":"slot3","type":{"events":[],"methods":[]}},"3":{"name":"slot4","type":{"events":[],"methods":[]}},"4":{"name":"slot5","type":{"events":[],"methods":[]}},"5":{"name":"slot6","type":{"events":[],"methods":[]}},"6":{"name":"slot7","type":{"events":[],"methods":[]}},"7":{"name":"slot8","type":{"events":[],"methods":[]}},"8":{"name":"slot9","type":{"events":[],"methods":[]}},"9":{"name":"slot10","type":{"events":[],"methods":[]}},"-1":{"name":"unit","type":{"events":[],"methods":[]}},"-2":{"name":"system","type":{"events":[],"methods":[]}},"-3":{"name":"library","type":{"events":[],"methods":[]}}},"handlers":[{"code":"system.print(\"-----------------------------------\")\nsystem.print(\"DU-Mining-Units-Monitoring version 1.0.0\")\nsystem.print(\"-----------------------------------\")\n\nfont_size = 25 --export: font size for each line on the screen\n\nlocal renderScript = [[\nlocal json = require('dkjson')\nlogMessage(getInput())\nlocal screen_data = json.decode(getInput()) or {}\nlocal options = screen_data[1]\nlocal data = screen_data[2]\nimages = {}\nfor index,mu in ipairs(data) do\n images[index] = loadImage(mu[3][2])\nend\n\nlocal rx,ry = getResolution()\n\nlocal back=createLayer()\nlocal front=createLayer()\n\nfont_size = options.font_size\n\nlocal mini=loadFont('Play',12)\nlocal small=loadFont('Play',14)\nlocal smallBold=loadFont('Play-Bold',18)\nlocal itemName=loadFont('Play-Bold',font_size)\nlocal itemNameSmall=loadFont('Play-Bold',font_size*0.75)\nlocal medV=loadFont('Play-Bold', 25)\nlocal bigV=loadFont('Play-Bold', 30)\nlocal big=loadFont('Play',38)\n\nsetBackgroundColor( 15/255,24/255,29/255)\n\nsetDefaultStrokeColor( back,Shape_Line,0,0,0,0.5)\nsetDefaultShadow( back,Shape_Line,6,0,0,0,0.5)\n\nsetDefaultFillColor( front,Shape_BoxRounded,249/255,212/255,123/255,1)\nsetDefaultFillColor( front,Shape_Text,0,0,0,1)\nsetDefaultFillColor( front,Shape_Box,0.075,0.125,0.156,1)\nsetDefaultFillColor( front,Shape_Text,0.710,0.878,0.941,1)\n\nfunction format_number(value)\n local formatted = value\n while true do\n formatted, k = string.gsub(formatted, \"^(-?%d+)(%d%d%d)\", '%1 %2')\n if (k==0) then\n break\n end\n end\n return formatted\nend\n\nfunction SecondsToClockString(seconds)\n local seconds = tonumber(seconds)\n\n if seconds == nil or seconds <= 0 then\n return \"-\";\n else\n days = string.format(\"%2.f\", math.floor(seconds/(3600*24)));\n hours = string.format(\"%2.f\", math.floor(seconds/3600 - (days*24)));\n mins = string.format(\"%2.f\", math.floor(seconds/60 - (hours*60) - (days*24*60)));\n secs = string.format(\"%2.f\", math.floor(seconds - hours*3600 - (days*24*60*60) - mins *60));\n str = \"\"\n if tonumber(days) > 0 then str = str .. days..\"d \" end\n if tonumber(hours) > 0 then str = str .. hours..\"h \" end\n if tonumber(mins) > 0 then str = str .. mins..\"m \" end\n if tonumber(secs) > 0 then str = str .. secs ..\"s\" end\n return str\n end\nend\n\nfunction round(value, precision)\n if precision then return utils.round(value / precision) * precision end\n return value >= 0 and math.floor(value+0.5) or math.ceil(value-0.5)\nend\n\nfunction renderHeader(title)\n local h_factor = 12\n local h = 35\n if subtitle ~= nil and subtitle ~= \"\" then\n h = 50\n end\n addLine( back,0,h+12,rx,h+12)\n addBox(front,0,12,rx,h)\n addText(front,smallBold,title,44,35)\nend\n\nlocal storageBar = createLayer()\nsetDefaultFillColor(storageBar,Shape_Text,110/255,166/255,181/255,1)\nsetDefaultFillColor(storageBar,Shape_Box,0.075,0.125,0.156,1)\nsetDefaultFillColor(storageBar,Shape_Line,1,1,1,1)\n\nlocal storageYellow = createLayer()\nsetDefaultFillColor(storageYellow,Shape_Text,249/255,212/255,123/255,1)\nsetDefaultFillColor(storageYellow,Shape_Box,249/255,212/255,123/255,1)\n\nlocal storageDark = createLayer()\nsetDefaultFillColor(storageDark,Shape_Text,63/255,92/255,102/255,1)\nsetDefaultFillColor(storageDark,Shape_Box,13/255,24/255,28/255,1)\n\nlocal storageRed = createLayer()\nsetDefaultFillColor(storageRed,Shape_Text,177/255,42/255,42/255,1)\nsetDefaultFillColor(storageRed,Shape_Box,177/255,42/255,42/255,1)\n\nlocal storageGreen = createLayer()\nsetDefaultFillColor(storageGreen,Shape_Text,34/255,177/255,76/255,1)\nsetDefaultFillColor(storageGreen,Shape_Box,34/255,177/255,76/255,1)\n\nlocal imagesLayer = createLayer()\n\nfunction renderResistanceBar(title, index, status, time, prod_rate, calibration, efficiency, x, y, w, h, withTitle)\n local quantity_x_pos = font_size * 6.7\n local percent_x_pos = font_size * 2\n\n local colorLayer = storageGreen\n if status == \"STALLED\" then colorLayer = storageYellow end\n if status == \"STOPPED\" then colorLayer = storageRed end\n\n addBox(storageBar,x,y,w,h)\n\n\n if withTitle then\n addText(storageBar, small, \"ORE\", x, y-5)\n addText(storageBar, small, \"STATUS\", x+w-60, y-5)\n setNextTextAlign(storageBar, AlignH_Center, AlignV_Bottom)\n addText(storageBar, small, \"TIME\", x+(w*0.3), y-3)\n setNextTextAlign(storageBar, AlignH_Center, AlignV_Bottom)\n addText(storageBar, small, \"RATE\", x+(w*0.45), y-3)\n setNextTextAlign(storageBar, AlignH_Center, AlignV_Bottom)\n addText(storageBar, small, \"CALIBRATION\", x+(w*0.6), y-3)\n setNextTextAlign(storageBar, AlignH_Center, AlignV_Bottom)\n addText(storageBar, small, \"EFFICIENCY\", x+(w*0.75), y-3)\n end\n\n addText(storageBar, itemName, title, x+15+font_size, y+h-font_size/2)\n addBox(colorLayer,x,y+h-3,w,3)\n\n if isImageLoaded(images[index]) then\n addImage(imagesLayer, images[index], x+10, y+5, font_size, font_size)\n end\n setNextTextAlign(storageBar, AlignH_Center, AlignV_Middle)\n addText(storageBar, itemNameSmall, SecondsToClockString(time), x+(w*0.3), y+(h/2)-3)\n setNextTextAlign(storageBar, AlignH_Center, AlignV_Middle)\n addText(storageBar, itemNameSmall, format_number(prod_rate) .. 'L', x+(w*0.45), y+(h/2)-3)\n setNextTextAlign(storageBar, AlignH_Center, AlignV_Middle)\n addText(storageBar, itemNameSmall, format_number(calibration) .. '%', x+(w*0.6), y+(h/2)-3)\n setNextTextAlign(storageBar, AlignH_Center, AlignV_Middle)\n addText(storageBar, itemNameSmall, format_number(efficiency) .. '%', x+(w*0.75), y+(h/2)-3)\n\n setNextTextAlign(colorLayer, AlignH_Right, AlignV_Middle)\n addText(colorLayer, itemName, status, x+w-10, y+(h/2)-3)\n\n --addBox(storageDark,x+w-400,y+5,390,20)\nend\n\nrenderHeader('MINING UNITS MONITORING')\n\nstart_h = 75\n\nlocal h = font_size + font_size / 2\nfor i,mu in ipairs(data) do\n renderResistanceBar(mu[3][1], i, mu[1], mu[2], mu[4], mu[5], mu[6], 44, start_h, rx-88, h, i==1)\n start_h = start_h+h+10\nend\nrequestAnimationFrame(10)\n]]\n\nscreens = {}\nmining_units = {}\nfor slot_name, slot in pairs(unit) do\n if type(slot) == \"table\"\n and type(slot.export) == \"table\"\n and slot.getElementClass\n then\n slot.slotname = slot_name\n if slot.getElementClass():lower() == 'screenunit' then\n table.insert(screens,slot)\n slot.setRenderScript(renderScript)\n elseif slot.getElementClass():lower() == 'miningunit' then\n table.insert(mining_units,slot)\n end\n end\nend\nif #screens == 0 then\n system.print(\"No screen detected\")\nelse\n table.sort(screens, function(a,b) return a.slotname < b.slotname end)\n local plural = \"\"\n if #screens > 1 then plural = \"s\" end\n system.print(#screens .. \" screen\" .. plural .. \" connected\")\nend\nif #mining_units == 0 then\n system.print(\"No mining unit detected\")\nelse\n table.sort(mining_units, function(a,b) return a.slotname < b.slotname end)\n local plural = \"\"\n if #mining_units > 1 then plural = \"s\" end\n system.print(#mining_units .. \" mining unit\" .. plural .. \" connected\")\nend\n\nfunction round(value, precision)\n if precision then return utils.round(value / precision) * precision end\n return value >= 0 and math.floor(value+0.5) or math.ceil(value-0.5)\nend\n\nores = {}\n\n--Nested Coroutines by Jericho\ncoroutinesTable = {}\n--all functions here will become a coroutine\nMyCoroutines = {\n function()\n screen_data = {}\n for index, mu in pairs(mining_units) do\n local ore_id = mu.getActiveOre()\n if ores[ore_id] == nil then\n local item_data = system.getItem(ore_id)\n ores[ore_id] = {\n item_data.displayName,\n item_data.iconPath\n }\n end\n local mu_data = {\n mu.getStatus(),\n round(mu.getRemainingTime()),\n ores[ore_id],\n mu.getProductionRate(),\n round(mu.getCalibrationRate()*100),\n round(mu.getEfficiency()*100),\n }\n table.insert(screen_data, mu_data)\n coroutine.yield(coroutinesTable[1])\n end\n for index, screen in pairs(screens) do\n local options = {\n font_size = font_size\n }\n local data_to_send = {options, screen_data}\n screen.setScriptInput(json.encode(data_to_send))\n end\n end\n}\n\nfunction initCoroutines()\n for _,f in pairs(MyCoroutines) do\n local co = coroutine.create(f)\n table.insert(coroutinesTable, co)\n end\nend\n\ninitCoroutines()\n\nrunCoroutines = function()\n for i,co in ipairs(coroutinesTable) do\n if coroutine.status(co) == \"dead\" then\n coroutinesTable[i] = coroutine.create(MyCoroutines[i])\n end\n if coroutine.status(co) == \"suspended\" then\n assert(coroutine.resume(co))\n end\n end\nend\n\nMainCoroutine = coroutine.create(runCoroutines)\n","filter":{"args":[],"signature":"start()","slotKey":"-1"},"key":"0"},{"code":"if coroutine.status(MainCoroutine) == \"dead\" then\n MainCoroutine = coroutine.create(runCoroutines)\nend\nif coroutine.status(MainCoroutine) == \"suspended\" then\n assert(coroutine.resume(MainCoroutine))\nend","filter":{"args":[],"signature":"update()","slotKey":"-2"},"key":"1"}],"methods":[],"events":[]} 1 + {"slots":{"0":{"name":"slot1","type":{"events":[],"methods":[]}},"1":{"name":"slot2","type":{"events":[],"methods":[]}},"2":{"name":"slot3","type":{"events":[],"methods":[]}},"3":{"name":"slot4","type":{"events":[],"methods":[]}},"4":{"name":"slot5","type":{"events":[],"methods":[]}},"5":{"name":"slot6","type":{"events":[],"methods":[]}},"6":{"name":"slot7","type":{"events":[],"methods":[]}},"7":{"name":"slot8","type":{"events":[],"methods":[]}},"8":{"name":"slot9","type":{"events":[],"methods":[]}},"9":{"name":"slot10","type":{"events":[],"methods":[]}},"-1":{"name":"unit","type":{"events":[],"methods":[]}},"-2":{"name":"system","type":{"events":[],"methods":[]}},"-3":{"name":"library","type":{"events":[],"methods":[]}}},"handlers":[{"code":"system.print(\"-----------------------------------\")\nsystem.print(\"DU-Mining-Units-Monitoring version 1.0.0\")\nsystem.print(\"-----------------------------------\")\n\nfont_size = 25 --export: font size for each line on the screen\ncalibration_red_level = 50 --export: The percent calibration below gauge will be red\ncalibration_yellow_level = 90 --export: The percent calibration below gauge will be yellow\n\nlocal renderScript = [[\nlocal json = require('dkjson')\nlogMessage(getInput())\nlocal screen_data = json.decode(getInput()) or {}\nlocal options = screen_data[1]\nlocal data = screen_data[2]\nimages = {}\nfor index,mu in ipairs(data) do\n images[index] = loadImage(mu[3][2])\nend\n\nlocal rx,ry = getResolution()\n\nlocal back=createLayer()\nlocal front=createLayer()\n\nfont_size = options[1]\ncalibration_red_level = options[2]\ncalibration_yellow_level = options[3]\n\nlocal mini=loadFont('Play',12)\nlocal small=loadFont('Play',14)\nlocal smallBold=loadFont('Play-Bold',18)\nlocal itemName=loadFont('Play-Bold',font_size)\nlocal itemNameSmall=loadFont('Play-Bold',font_size*0.75)\nlocal medV=loadFont('Play-Bold', 25)\nlocal bigV=loadFont('Play-Bold', 30)\nlocal big=loadFont('Play',38)\n\nsetBackgroundColor( 15/255,24/255,29/255)\n\nsetDefaultStrokeColor( back,Shape_Line,0,0,0,0.5)\nsetDefaultShadow( back,Shape_Line,6,0,0,0,0.5)\n\nsetDefaultFillColor( front,Shape_BoxRounded,249/255,212/255,123/255,1)\nsetDefaultFillColor( front,Shape_Text,0,0,0,1)\nsetDefaultFillColor( front,Shape_Box,0.075,0.125,0.156,1)\nsetDefaultFillColor( front,Shape_Text,0.710,0.878,0.941,1)\n\nfunction format_number(value)\n local formatted = value\n while true do\n formatted, k = string.gsub(formatted, \"^(-?%d+)(%d%d%d)\", '%1 %2')\n if (k==0) then\n break\n end\n end\n return formatted\nend\n\nfunction SecondsToClockString(seconds)\n local seconds = tonumber(seconds)\n\n if seconds == nil or seconds <= 0 then\n return \"-\";\n else\n days = string.format(\"%2.f\", math.floor(seconds/(3600*24)));\n hours = string.format(\"%2.f\", math.floor(seconds/3600 - (days*24)));\n mins = string.format(\"%2.f\", math.floor(seconds/60 - (hours*60) - (days*24*60)));\n secs = string.format(\"%2.f\", math.floor(seconds - hours*3600 - (days*24*60*60) - mins *60));\n str = \"\"\n if tonumber(days) > 0 then str = str .. days..\"d \" end\n if tonumber(hours) > 0 then str = str .. hours..\"h \" end\n if tonumber(mins) > 0 then str = str .. mins..\"m \" end\n if tonumber(secs) > 0 then str = str .. secs ..\"s\" end\n return str\n end\nend\n\nfunction round(value, precision)\n if precision then return utils.round(value / precision) * precision end\n return value >= 0 and math.floor(value+0.5) or math.ceil(value-0.5)\nend\n\nfunction renderHeader(title)\n local h_factor = 12\n local h = 35\n if subtitle ~= nil and subtitle ~= \"\" then\n h = 50\n end\n addLine( back,0,h+12,rx,h+12)\n addBox(front,0,12,rx,h)\n addText(front,smallBold,title,44,35)\nend\n\nlocal storageBar = createLayer()\nsetDefaultFillColor(storageBar,Shape_Text,110/255,166/255,181/255,1)\nsetDefaultFillColor(storageBar,Shape_Box,0.075,0.125,0.156,1)\nsetDefaultFillColor(storageBar,Shape_Line,1,1,1,1)\n\nlocal storageYellow = createLayer()\nsetDefaultFillColor(storageYellow,Shape_Text,249/255,212/255,123/255,1)\nsetDefaultFillColor(storageYellow,Shape_Box,249/255,212/255,123/255,1)\n\nlocal storageDark = createLayer()\nsetDefaultFillColor(storageDark,Shape_Text,63/255,92/255,102/255,1)\nsetDefaultFillColor(storageDark,Shape_Box,13/255,24/255,28/255,1)\n\nlocal storageRed = createLayer()\nsetDefaultFillColor(storageRed,Shape_Text,177/255,42/255,42/255,1)\nsetDefaultFillColor(storageRed,Shape_Box,177/255,42/255,42/255,1)\n\nlocal storageGreen = createLayer()\nsetDefaultFillColor(storageGreen,Shape_Text,34/255,177/255,76/255,1)\nsetDefaultFillColor(storageGreen,Shape_Box,34/255,177/255,76/255,1)\n\nlocal imagesLayer = createLayer()\n\nfunction renderResistanceBar(title, index, status, time, prod_rate, calibration, efficiency, x, y, w, h, withTitle)\n local quantity_x_pos = font_size * 6.7\n local percent_x_pos = font_size * 2\n\n local colorLayer = storageGreen\n if status == \"STALLED\" then colorLayer = storageYellow end\n if status == \"STOPPED\" then colorLayer = storageRed end\n\n local gaugeColorLayer = storageGreen\n if calibration < calibration_yellow_level then gaugeColorLayer = storageYellow end\n if calibration < calibration_red_level then gaugeColorLayer = storageRed end\n\n addBox(storageBar,x,y,w,h)\n\n\n if withTitle then\n addText(storageBar, small, \"ORE\", x, y-5)\n addText(storageBar, small, \"STATUS\", x+w-60, y-5)\n setNextTextAlign(storageBar, AlignH_Center, AlignV_Bottom)\n addText(storageBar, small, \"TIME\", x+(w*0.3), y-3)\n setNextTextAlign(storageBar, AlignH_Center, AlignV_Bottom)\n addText(storageBar, small, \"RATE\", x+(w*0.45), y-3)\n setNextTextAlign(storageBar, AlignH_Center, AlignV_Bottom)\n addText(storageBar, small, \"CALIBRATION\", x+(w*0.6), y-3)\n setNextTextAlign(storageBar, AlignH_Center, AlignV_Bottom)\n addText(storageBar, small, \"EFFICIENCY\", x+(w*0.75), y-3)\n end\n\n addText(storageBar, itemName, title, x+15+font_size, y+h-font_size/2)\n addBox(gaugeColorLayer,x,y+h-3,w*calibration/100,3)\n\n if isImageLoaded(images[index]) then\n addImage(imagesLayer, images[index], x+10, y+5, font_size, font_size)\n end\n setNextTextAlign(storageBar, AlignH_Center, AlignV_Middle)\n addText(storageBar, itemNameSmall, SecondsToClockString(time), x+(w*0.3), y+(h/2)-3)\n setNextTextAlign(storageBar, AlignH_Center, AlignV_Middle)\n addText(storageBar, itemNameSmall, format_number(prod_rate) .. 'L', x+(w*0.45), y+(h/2)-3)\n setNextTextAlign(storageBar, AlignH_Center, AlignV_Middle)\n addText(storageBar, itemNameSmall, format_number(calibration) .. '%', x+(w*0.6), y+(h/2)-3)\n setNextTextAlign(storageBar, AlignH_Center, AlignV_Middle)\n addText(storageBar, itemNameSmall, format_number(efficiency) .. '%', x+(w*0.75), y+(h/2)-3)\n\n setNextTextAlign(colorLayer, AlignH_Right, AlignV_Middle)\n addText(colorLayer, itemName, status, x+w-10, y+(h/2)-3)\n\n --addBox(storageDark,x+w-400,y+5,390,20)\nend\n\nrenderHeader('MINING UNITS MONITORING')\n\nstart_h = 75\n\nlocal h = font_size + font_size / 2\nfor i,mu in ipairs(data) do\n renderResistanceBar(mu[3][1], i, mu[1], mu[2], mu[4], mu[5], mu[6], 44, start_h, rx-88, h, i==1)\n start_h = start_h+h+10\nend\nrequestAnimationFrame(10)\n]]\n\nscreens = {}\nmining_units = {}\nfor slot_name, slot in pairs(unit) do\n if type(slot) == \"table\"\n and type(slot.export) == \"table\"\n and slot.getElementClass\n then\n slot.slotname = slot_name\n if slot.getElementClass():lower() == 'screenunit' then\n table.insert(screens,slot)\n slot.setRenderScript(renderScript)\n elseif slot.getElementClass():lower() == 'miningunit' then\n table.insert(mining_units,slot)\n end\n end\nend\nif #screens == 0 then\n system.print(\"No screen detected\")\nelse\n table.sort(screens, function(a,b) return a.slotname < b.slotname end)\n local plural = \"\"\n if #screens > 1 then plural = \"s\" end\n system.print(#screens .. \" screen\" .. plural .. \" connected\")\nend\nif #mining_units == 0 then\n system.print(\"No mining unit detected\")\nelse\n table.sort(mining_units, function(a,b) return a.slotname < b.slotname end)\n local plural = \"\"\n if #mining_units > 1 then plural = \"s\" end\n system.print(#mining_units .. \" mining unit\" .. plural .. \" connected\")\nend\n\nfunction round(value, precision)\n if precision then return utils.round(value / precision) * precision end\n return value >= 0 and math.floor(value+0.5) or math.ceil(value-0.5)\nend\n\nores = {}\n\n--Nested Coroutines by Jericho\ncoroutinesTable = {}\n--all functions here will become a coroutine\nMyCoroutines = {\n function()\n screen_data = {}\n for index, mu in pairs(mining_units) do\n local ore_id = mu.getActiveOre()\n if ores[ore_id] == nil then\n local item_data = system.getItem(ore_id)\n ores[ore_id] = {\n item_data.displayName,\n item_data.iconPath\n }\n end\n local mu_data = {\n mu.getStatus(),\n round(mu.getRemainingTime()),\n ores[ore_id],\n mu.getProductionRate(),\n round(mu.getCalibrationRate()*100),\n round(mu.getEfficiency()*100),\n }\n table.insert(screen_data, mu_data)\n coroutine.yield(coroutinesTable[1])\n end\n for index, screen in pairs(screens) do\n local options = {font_size, calibration_red_level, calibration_yellow_level}\n local data_to_send = {options, screen_data}\n screen.setScriptInput(json.encode(data_to_send))\n end\n end\n}\n\nfunction initCoroutines()\n for _,f in pairs(MyCoroutines) do\n local co = coroutine.create(f)\n table.insert(coroutinesTable, co)\n end\nend\n\ninitCoroutines()\n\nrunCoroutines = function()\n for i,co in ipairs(coroutinesTable) do\n if coroutine.status(co) == \"dead\" then\n coroutinesTable[i] = coroutine.create(MyCoroutines[i])\n end\n if coroutine.status(co) == \"suspended\" then\n assert(coroutine.resume(co))\n end\n end\nend\n\nMainCoroutine = coroutine.create(runCoroutines)\n","filter":{"args":[],"signature":"start()","slotKey":"-1"},"key":"0"},{"code":"if coroutine.status(MainCoroutine) == \"dead\" then\n MainCoroutine = coroutine.create(runCoroutines)\nend\nif coroutine.status(MainCoroutine) == \"suspended\" then\n assert(coroutine.resume(MainCoroutine))\nend","filter":{"args":[],"signature":"update()","slotKey":"-2"},"key":"1"}],"methods":[],"events":[]}
+11 -5
source/unit/start.lua
··· 3 3 system.print("-----------------------------------") 4 4 5 5 font_size = 25 --export: font size for each line on the screen 6 + calibration_red_level = 50 --export: The percent calibration below gauge will be red 7 + calibration_yellow_level = 90 --export: The percent calibration below gauge will be yellow 6 8 7 9 local renderScript = [[ 8 10 local json = require('dkjson') ··· 20 22 local back=createLayer() 21 23 local front=createLayer() 22 24 23 - font_size = options.font_size 25 + font_size = options[1] 26 + calibration_red_level = options[2] 27 + calibration_yellow_level = options[3] 24 28 25 29 local mini=loadFont('Play',12) 26 30 local small=loadFont('Play',14) ··· 118 122 if status == "STALLED" then colorLayer = storageYellow end 119 123 if status == "STOPPED" then colorLayer = storageRed end 120 124 125 + local gaugeColorLayer = storageGreen 126 + if calibration < calibration_yellow_level then gaugeColorLayer = storageYellow end 127 + if calibration < calibration_red_level then gaugeColorLayer = storageRed end 128 + 121 129 addBox(storageBar,x,y,w,h) 122 130 123 131 ··· 135 143 end 136 144 137 145 addText(storageBar, itemName, title, x+15+font_size, y+h-font_size/2) 138 - addBox(colorLayer,x,y+h-3,w,3) 146 + addBox(gaugeColorLayer,x,y+h-3,w*calibration/100,3) 139 147 140 148 if isImageLoaded(images[index]) then 141 149 addImage(imagesLayer, images[index], x+10, y+5, font_size, font_size) ··· 234 242 coroutine.yield(coroutinesTable[1]) 235 243 end 236 244 for index, screen in pairs(screens) do 237 - local options = { 238 - font_size = font_size 239 - } 245 + local options = {font_size, calibration_red_level, calibration_yellow_level} 240 246 local data_to_send = {options, screen_data} 241 247 screen.setScriptInput(json.encode(data_to_send)) 242 248 end