Created
August 10, 2012 13:03
-
-
Save zeeZ/3314064 to your computer and use it in GitHub Desktop.
Annoying message screen for ComputerCraft
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
local message = "EE IS DISABLED" | |
local pauseAfterMarquee = 2 -- Marquee ends with a blank screen | |
local pauseAfterFlash = 5 -- Flash ends with the message centered | |
local pauseAfterAllOver = 0.5 -- AllOver leaves the message all over the screen | |
local marqueeSpacer = " +++ " | |
local marqueeRepeatMessage = 1 -- Marquee displays the message, then "<marqueespacer><message>" repeated n times | |
local marqueeSpeed = 0.25 -- Scroll speed of marquee | |
local flashAmount = 5 -- Amount of flashes | |
local flashSpeedOn = 1 -- Amount of seconds the message is shown for | |
local flashSpeedOff = 0.25 -- Amount of seconds the screen is dark for | |
local allOverSpeed = 0.1 -- The message is written on a random location of the screen every n seconds | |
-- Code is a go! | |
local monitor = nil | |
local monitorSide = nil | |
local timers = {} | |
local misc = {} | |
function resetMisc() | |
misc={marqueePos=1,flashes=flashAmount*2+1,allOver={}} | |
misc["marqueeMessage"] = message | |
for i=1,marqueeRepeatMessage do | |
misc["marqueeMessage"] = misc["marqueeMessage"] .. marqueeSpacer .. message | |
end | |
end | |
function getMonitor() | |
for k,side in pairs(redstone.getSides()) do | |
if peripheral.getType(side) == "monitor" then | |
monitor = peripheral.wrap(side) | |
monitorSide = side | |
break | |
end | |
end | |
if monitor ~= nil then | |
monitor.clear() | |
end | |
end | |
function writeCenter() | |
local monX,monY = monitor.getSize() | |
monitor.setTextScale(4) | |
monitor.clear() | |
monitor.setCursorPos(monX/2-#message/2+1, monY/2+1) | |
monitor.write(message) | |
end | |
function marquee() | |
if monitor == nil then | |
return | |
end | |
monitor.setTextScale(4) | |
local monX,monY = monitor.getSize() | |
monitor.clear() | |
monitor.setCursorPos(monX-misc["marqueePos"]+1, monY/2+1) | |
monitor.write(misc["marqueeMessage"]) | |
misc["marqueePos"] = misc["marqueePos"]+1 | |
if misc["marqueePos"] > (#misc["marqueeMessage"])+monX then | |
resetMisc() | |
os.queueEvent("marqueeDone") | |
else | |
timers["marquee"] = os.startTimer(marqueeSpeed) | |
end | |
end | |
function flash() | |
if monitor == nil then | |
return | |
end | |
monitor.setTextScale(4) | |
local monX,monY = monitor.getSize() | |
local wait | |
monitor.clear() | |
if misc["flashes"]%2==1 then | |
wait = flashSpeedOn | |
writeCenter() | |
else | |
wait = flashSpeedOff | |
end | |
misc["flashes"] = misc["flashes"]-1 | |
if misc["flashes"] < 1 then | |
resetMisc() | |
os.queueEvent("flashDone") | |
else | |
timers["flash"] = os.startTimer(wait) | |
end | |
end | |
function allOver() | |
if monitor == nil then | |
return | |
end | |
monitor.setTextScale(1) | |
local monX,monY = monitor.getSize() | |
if #misc["allOver"]==0 then | |
monitor.clear() | |
for x=1,math.ceil(monX/(#message+1)) do | |
for y=1,monY do | |
table.insert(misc["allOver"],{((x-1)*(#message+1)+1),y}) | |
end | |
end | |
end | |
local rnd = math.random(1,#misc["allOver"]) | |
monitor.setCursorPos(misc["allOver"][rnd][1],misc["allOver"][rnd][2]) | |
monitor.write(message) | |
table.remove(misc["allOver"],rnd) | |
if #misc["allOver"] == 0 then | |
resetMisc() | |
os.queueEvent("allOverDone") | |
else | |
timers["allOver"] = os.startTimer(allOverSpeed) | |
end | |
end | |
function animate() | |
if monitor ~= nil then | |
resetMisc() | |
flash() | |
end | |
end | |
function main() | |
getMonitor() | |
animate() | |
while true do | |
local event, p1, p2, p3, p4, p5 = os.pullEventRaw() | |
if event == "peripheral_detach" and p1 == monitorSide then | |
monitor = nil | |
monitorSide = nil | |
elseif event == "peripheral" and monitorSide == nil then | |
getMonitor() | |
animate() | |
elseif event == "timer" then | |
if p1 == timers["marquee"] then | |
marquee() | |
elseif p1 == timers["flash"] then | |
flash() | |
elseif p1 == timers["allOver"] then | |
allOver() | |
end | |
elseif event == "marqueeDone" then | |
timers["allOver"] = os.startTimer(pauseAfterMarquee) | |
elseif event == "flashDone" then | |
timers["marquee"] = os.startTimer(pauseAfterFlash) | |
elseif event == "allOverDone" then | |
timers["flash"] = os.startTimer(pauseAfterAllOver) | |
end | |
end | |
end | |
main() | |
-- zeeZ :) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment