Starbound/assets/devel/testconsole1/testconsole1gui.lua
2025-03-21 22:23:30 +11:00

102 lines
2.6 KiB
Lua

lightGridSize = 9
lightSize = 16
lightShrink = 2
lightXStart = 120
lightYStart = 30
function lightPosition(light)
return {(light[1] - 1) * lightSize + lightXStart, (light[2] - 1) * lightSize + lightYStart}
end
function lightFor(pos)
return {math.floor((pos[1] - lightXStart) / lightSize) + 1, math.floor((pos[2] - lightYStart) / lightSize) + 1}
end
function lightWithinRange(light)
return light[1] >= 1 and light[1] <= lightGridSize and light[2] >= 1 and light[2] <= lightGridSize
end
function lightValue(light)
if lightWithinRange(light) then
return self.lights[light[1]..":"..light[2]]
else
return false
end
end
function setLightValue(light, val)
if lightWithinRange then
self.lights[light[1]..":"..light[2]] = val
end
end
function toggleLightValue(light)
setLightValue(light, not lightValue(light))
end
function init()
self.lights = {}
for x = 1, lightGridSize do
for y = 1, lightGridSize do
setLightValue({x, y}, true)
end
end
self.canvas = widget.bindCanvas("scriptCanvas")
widget.focus("scriptCanvas")
end
function update()
self.canvas:clear()
for x = 1, lightGridSize do
for y = 1, lightGridSize do
if lightValue({x, y}) then
local pos = lightPosition({x, y})
self.canvas:drawRect(
{pos[1] + lightShrink, pos[2] + lightShrink, pos[1] + lightSize - lightShrink, pos[2] + lightSize - lightShrink},
{255, 255, 255}
)
local gridMin = {lightXStart, lightYStart}
local gridMax = {lightXStart + lightSize * lightGridSize, lightYStart + lightSize * lightGridSize}
self.canvas:drawPoly(
{{gridMin[1], gridMin[2]}, {gridMax[1], gridMin[2]}, {gridMax[1], gridMax[2]}, {gridMin[1], gridMax[2]}},
{255, 255, 255}
)
end
end
end
local allGone = true
for x = 1, lightGridSize do
for y = 1, lightGridSize do
if lightValue({x, y}) then
allGone = false
end
end
end
if allGone then
world.sendEntityMessage(pane.sourceEntity(), "youwin")
pane.dismiss()
end
end
function canvasClickEvent(position, button, buttonDown)
if buttonDown then
local light = lightFor(position)
if lightWithinRange(light) then
if button == 1 then
pane.playSound("/sfx/interface/keypad_press.ogg", 0, 1.0)
toggleLightValue({light[1], light[2]})
toggleLightValue({light[1] - 1, light[2]})
toggleLightValue({light[1], light[2] - 1})
toggleLightValue({light[1] + 1, light[2]})
toggleLightValue({light[1], light[2] + 1})
end
end
end
end