Improved default radar scripts

Added OpenComputers support
Code cleanup
This commit is contained in:
LemADEC 2015-08-15 16:43:27 +02:00
parent 3ff8d4fe10
commit 8f14d0eb0e
4 changed files with 206 additions and 23 deletions

View file

@ -3,31 +3,43 @@ if not term.isColor() then
exit()
end
function error(message)
term.setBackgroundColor(colors.red)
term.setTextColor(colors.white)
term.write("No radar detected")
term.setBackgroundColor(colors.black)
term.setTextColor(colors.white)
print()
end
sides = peripheral.getNames()
mininglasers = {}
for key,side in pairs(sides) do
if peripheral.getType(side) == "warpdriveRadar" then
print("Wrapping " .. side)
print("Radar found on " .. side)
radar = peripheral.wrap(side)
end
end
if radar == nil then
error("No radar detected")
return
end
local argv = { ... }
if #argv ~= 1 then
print("Usage: scan <radius>")
error("Usage: ping <scanRadius>")
return
end
local radius = tonumber(argv[1])
if radius < 1 or radius > 9999 then
print("Radius must be between 1 and 9999")
error("Radius must be between 1 and 9999")
return
end
energy, energyMax = radar.getEnergyLevel()
if energy < radius * radius then
print("Low energy level...")
error("Low energy level... (" + energy + "/" + radius * radius + ")")
return
end
radar.scanRadius(radius)
@ -42,13 +54,13 @@ repeat
sleep(1)
seconds = seconds + 1
until (count ~= nil and count ~= -1) or seconds > 10
print("took "..seconds.." seconds")
print("took " .. seconds .. " seconds")
if count ~= nil and count > 0 then
for i=0, count-1 do
freq, x, y, z = radar.getResult(i)
print("Ship '"..freq.."' @ ("..x.. " " .. y .. " " .. z .. ")")
print("Ship '" .. freq .. "' @ (" .. x .. " " .. y .. " " .. z .. ")")
end
else
print("Nothing is found =(")
print("Nothing was found =(")
end

View file

@ -7,13 +7,18 @@ if not term.isColor() then
end
sides = peripheral.getNames()
mininglasers = {}
for key,side in pairs(sides) do
if peripheral.getType(side) == "warpdriveRadar" then
print("Wrapping " .. side)
print("Radar found on " .. side)
radar = peripheral.wrap(side)
end
end
if radar == nil then
term.setBackgroundColor(colors.red)
term.setTextColor(colors.white)
term.write("No radar detected")
return
end
w, h = term.getSize()
@ -22,7 +27,7 @@ term.clear()
function colorScreen(color)
for a = 2,w-1 do
for b = 1,h do
paintutils.drawPixel(a,b,color)
paintutils.drawPixel(a, b, color)
end
end
end
@ -92,18 +97,17 @@ function scanAndDraw()
end
function redraw()
--shell.run("clear")
colorScreen(colors.green)
colorScreen(colors.green)
paintutils.drawLine(1, 1, w, 1, colors.black)
paintutils.drawLine(1, 1, w, 1, colors.black)
textOut(h, 1, "= Q-Radar v0.1 =", colors.white, colors.black)
textOut(h, 1, "= Q-Radar v0.1 =", colors.white, colors.black)
textOut(w - 3, 1, "[X]", colors.white, colors.red)
textOut(w - 3, 1, "[X]", colors.white, colors.red)
paintutils.drawLine(1, h, w, h, colors.black);
local energy, energyMax = radar.getEnergyLevel()
textOut(4, h, "Energy: " .. energy .. " EU | Scan radius: " .. radius, colors.white, colors.black)
paintutils.drawLine(1, h, w, h, colors.black);
local energy, energyMax = radar.getEnergyLevel()
textOut(4, h, "Energy: " .. energy .. " EU | Scan radius: " .. radius, colors.white, colors.black)
end
mrun = true

View file

@ -0,0 +1,50 @@
local component = require("component")
if not component.isAvailable("warpdriveRadar") then
print("No radar detected")
return
end
local radar = component.warpdriveRadar
local argv = { ... }
if #argv ~= 1 then
print("Usage: ping <scanRadius>")
return
end
local radius = tonumber(argv[1])
if radius < 1 or radius > 9999 then
print("Radius must be between 1 and 9999")
return
end
energy, energyMax = radar.getEnergyLevel()
if energy < radius * radius then
print("Low energy level... (" + energy + "/" + radius * radius + ")")
return
end
radar.scanRadius(radius)
os.sleep(0.5)
print("Scanning...")
local seconds = 0
local count = nil
repeat
count = radar.getResultsCount()
os.sleep(1)
seconds = seconds + 1
until (count ~= nil and count ~= -1) or seconds > 10
print("took " .. seconds .. " seconds")
if count ~= nil and count > 0 then
for i=0, count-1 do
freq, x, y, z = radar.getResult(i)
print("Ship '" .. freq .. "' @ (" .. x .. " " .. y .. " " .. z .. ")")
end
else
print("Nothing was found =(")
end
print("")

View file

@ -0,0 +1,117 @@
local component = require("component")
local term = require("term")
radius = 500
scale = 50
if not term.isAvailable() then
computer.beep()
return
end
if not component.isAvailable("warpdriveRadar") then
computer.beep()
print("No radar detected")
return
end
radar = component.warpdriveRadar
w, h = component.gpu.getResolution()
term.clear()
function textOut(x, y, text, fg, bg)
if term.isAvailable() then
local w, h = component.gpu.getResolution()
if w then
component.gpu.setBackground(bg)
component.gpu.setForeground(fg)
component.gpu.set(x, y, text)
end
end
end
function drawBox(x, y, width, height, color)
if term.isAvailable() then
local w, h = component.gpu.getResolution()
if w then
component.gpu.setBackground(color)
component.gpu.fill(x, y, width, height, " ")
end
end
end
function translateXZ(oldX, oldZ, i)
local x = radarX - oldX
local z = radarZ - oldZ
x = x / (radius / scale)
z = z / (radius / scale)
x = x + (w / 2)
z = z + (h / 2)
x = math.floor(x);
z = math.floor(z);
return x,z
end
function drawContact(x, y, z, name, color)
local newX, newZ = translateXZ(x, z)
textOut(newX, newZ, " ", 0x000000, color)
textOut(newX - 3, newZ + 1, "[" .. name .. "]", 0xFFFFFF, 0x000000)
end
function scanAndDraw()
local energy, energyMax = radar.getEnergyLevel()
if (energy < radius * radius) then
hh = math.floor(h / 2);
hw = math.floor(w / 2);
drawBox(hw - 5, hh - 1, 11, 3, 0xFF0000);
textOut(hw - 4, hh, "LOW POWER", 0xFFFFFF, 0xFF0000);
os.sleep(1);
return 0;
end;
radar.scanRadius(radius);
os.sleep(2);
redraw();
numResults = radar.getResultsCount();
if (numResults ~= 0) then
for i = 0, numResults-1 do
freq, cx, cy, cz = radar.getResult(i);
drawContact(cx, cy, cz, freq, 0xFF0000)
end
end
drawContact(radarX, radarY, radarZ, "RAD", 0xFFFF00);
end
function redraw()
drawBox(2, 1, w - 2, h - 1, 0x00FF00)
drawBox(1, 1, w, 1, 0x000000)
drawBox(1, 1, 1, h, 0x000000)
drawBox(1, h, w, 1, 0x000000);
drawBox(w, h, 1, h, 0x000000);
textOut(h, 1, "= Q-Radar v0.1 =", 0xFFFFFF, 0x000000)
textOut(w - 3, 1, "[X]", 0xFFFFFF, 0xFF0000)
local energy, energyMax = radar.getEnergyLevel()
textOut(4, h, "Energy: " .. energy .. " EU | Scan radius: " .. radius, 0xFFFFFF, 0x000000)
end
mrun = true
while (mrun) do
radarX, radarY, radarZ = radar.pos();
scanAndDraw();
end
term.clear();