102 lines
2.6 KiB
Lua
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
|