feat: Revamp dashboard layout for improved vertical display and enhanced statistics visibility
This commit is contained in:
134
webbridge.lua
134
webbridge.lua
@@ -89,109 +89,153 @@ local function drawDashboard()
|
|||||||
monitor.setBackgroundColor(colors.black)
|
monitor.setBackgroundColor(colors.black)
|
||||||
monitor.clear()
|
monitor.clear()
|
||||||
|
|
||||||
-- Header
|
-- Header (larger for vertical display)
|
||||||
drawBox(1, 1, w, 3, colors.blue)
|
drawBox(1, 1, w, 4, colors.blue)
|
||||||
centerText(2, "=== TURTLE NETWORK BRIDGE ===", colors.white, colors.blue)
|
centerText(2, "╔════════════════════════════════════════════════╗", colors.white, colors.blue)
|
||||||
|
centerText(3, "║ TURTLE NETWORK BRIDGE CONTROL CENTER ║", colors.white, colors.blue)
|
||||||
|
centerText(4, "╚════════════════════════════════════════════════╝", colors.white, colors.blue)
|
||||||
|
|
||||||
monitor.setCursorPos(2, 2)
|
monitor.setCursorPos(2, 2)
|
||||||
monitor.setTextColor(colors.lime)
|
monitor.setTextColor(colors.lime)
|
||||||
monitor.setBackgroundColor(colors.blue)
|
monitor.setBackgroundColor(colors.blue)
|
||||||
monitor.write("\7 ONLINE")
|
monitor.write("\7 ONLINE")
|
||||||
monitor.setCursorPos(w - 15, 2)
|
|
||||||
monitor.setTextColor(colors.lightBlue)
|
|
||||||
monitor.write("Server: ACTIVE")
|
|
||||||
|
|
||||||
-- Stats box
|
-- Stats box (left side, taller)
|
||||||
local startY = 4
|
local statsY = 6
|
||||||
drawBox(2, startY, 30, 8, colors.gray)
|
drawBox(2, statsY, 50, 20, colors.gray)
|
||||||
drawBox(3, startY + 1, 28, 6, colors.black)
|
drawBox(3, statsY + 1, 48, 18, colors.black)
|
||||||
|
|
||||||
monitor.setTextColor(colors.yellow)
|
monitor.setTextColor(colors.yellow)
|
||||||
monitor.setBackgroundColor(colors.black)
|
monitor.setBackgroundColor(colors.black)
|
||||||
monitor.setCursorPos(4, startY + 1)
|
monitor.setCursorPos(4, statsY + 1)
|
||||||
monitor.write("SYSTEM STATISTICS")
|
monitor.write("╔═══ SYSTEM STATISTICS ═══╗")
|
||||||
|
|
||||||
|
local statY = statsY + 3
|
||||||
|
|
||||||
|
-- Messages
|
||||||
monitor.setTextColor(colors.lightGray)
|
monitor.setTextColor(colors.lightGray)
|
||||||
monitor.setCursorPos(4, startY + 3)
|
monitor.setCursorPos(5, statY)
|
||||||
monitor.write("Messages Received:")
|
monitor.write("Messages Received:")
|
||||||
monitor.setTextColor(colors.white)
|
monitor.setTextColor(colors.white)
|
||||||
monitor.setCursorPos(23, startY + 3)
|
monitor.setCursorPos(38, statY)
|
||||||
monitor.write(tostring(stats.messagesReceived))
|
monitor.write(tostring(stats.messagesReceived))
|
||||||
|
statY = statY + 2
|
||||||
|
|
||||||
|
-- Commands
|
||||||
monitor.setTextColor(colors.lightGray)
|
monitor.setTextColor(colors.lightGray)
|
||||||
monitor.setCursorPos(4, startY + 4)
|
monitor.setCursorPos(5, statY)
|
||||||
monitor.write("Commands Sent:")
|
monitor.write("Commands Sent:")
|
||||||
monitor.setTextColor(colors.lime)
|
monitor.setTextColor(colors.lime)
|
||||||
monitor.setCursorPos(23, startY + 4)
|
monitor.setCursorPos(38, statY)
|
||||||
monitor.write(tostring(stats.commandsSent))
|
monitor.write(tostring(stats.commandsSent))
|
||||||
|
statY = statY + 2
|
||||||
|
|
||||||
|
-- Server Updates
|
||||||
monitor.setTextColor(colors.lightGray)
|
monitor.setTextColor(colors.lightGray)
|
||||||
monitor.setCursorPos(4, startY + 5)
|
monitor.setCursorPos(5, statY)
|
||||||
monitor.write("Server Updates:")
|
monitor.write("Server Updates:")
|
||||||
monitor.setTextColor(colors.lightBlue)
|
monitor.setTextColor(colors.lightBlue)
|
||||||
monitor.setCursorPos(23, startY + 5)
|
monitor.setCursorPos(38, statY)
|
||||||
monitor.write(tostring(stats.serverUpdates))
|
monitor.write(tostring(stats.serverUpdates))
|
||||||
|
statY = statY + 2
|
||||||
|
|
||||||
|
-- Errors
|
||||||
monitor.setTextColor(colors.lightGray)
|
monitor.setTextColor(colors.lightGray)
|
||||||
monitor.setCursorPos(4, startY + 6)
|
monitor.setCursorPos(5, statY)
|
||||||
|
monitor.write("Errors:")
|
||||||
|
monitor.setTextColor(stats.errors > 0 and colors.red or colors.lime)
|
||||||
|
monitor.setCursorPos(38, statY)
|
||||||
|
monitor.write(tostring(stats.errors))
|
||||||
|
statY = statY + 2
|
||||||
|
|
||||||
|
-- Uptime
|
||||||
|
monitor.setTextColor(colors.lightGray)
|
||||||
|
monitor.setCursorPos(5, statY)
|
||||||
monitor.write("Uptime:")
|
monitor.write("Uptime:")
|
||||||
monitor.setTextColor(colors.white)
|
monitor.setTextColor(colors.white)
|
||||||
monitor.setCursorPos(23, startY + 6)
|
monitor.setCursorPos(38, statY)
|
||||||
monitor.write(formatTime(os.epoch("utc") - stats.startTime))
|
monitor.write(formatTime(os.epoch("utc") - stats.startTime))
|
||||||
|
statY = statY + 3
|
||||||
|
|
||||||
-- Turtle list
|
-- Connection info
|
||||||
local startX = 34
|
monitor.setTextColor(colors.gray)
|
||||||
local boxWidth = w - startX - 1
|
monitor.setCursorPos(5, statY)
|
||||||
drawBox(startX, startY, boxWidth, 8, colors.gray)
|
monitor.write("Server: " .. SERVER_URL:sub(8))
|
||||||
drawBox(startX + 1, startY + 1, boxWidth - 2, 6, colors.black)
|
statY = statY + 1
|
||||||
|
monitor.setCursorPos(5, statY)
|
||||||
|
monitor.write("Channels: " .. STATUS_CHANNEL .. "/" .. COMMAND_CHANNEL)
|
||||||
|
|
||||||
|
-- Turtle list (right side, much taller)
|
||||||
|
local turtleX = 54
|
||||||
|
local turtleWidth = w - turtleX - 1
|
||||||
|
drawBox(turtleX, statsY, turtleWidth, 20, colors.gray)
|
||||||
|
drawBox(turtleX + 1, statsY + 1, turtleWidth - 2, 18, colors.black)
|
||||||
|
|
||||||
monitor.setTextColor(colors.yellow)
|
monitor.setTextColor(colors.yellow)
|
||||||
monitor.setCursorPos(startX + 2, startY + 1)
|
monitor.setCursorPos(turtleX + 2, statsY + 1)
|
||||||
monitor.write("ACTIVE TURTLES")
|
monitor.write("╔═══ ACTIVE TURTLES ═══╗")
|
||||||
|
|
||||||
local y = startY + 3
|
local turtleY = statsY + 3
|
||||||
local count = 0
|
local count = 0
|
||||||
for id, turtle in pairs(turtles) do
|
for id, turtle in pairs(turtles) do
|
||||||
if count >= 4 then break end
|
if count >= 15 then break end -- Show up to 15 turtles
|
||||||
|
|
||||||
local statusColor = getStatusColor(turtle)
|
local statusColor = getStatusColor(turtle)
|
||||||
monitor.setCursorPos(startX + 2, y)
|
monitor.setCursorPos(turtleX + 2, turtleY)
|
||||||
monitor.setTextColor(statusColor)
|
monitor.setTextColor(statusColor)
|
||||||
monitor.write("\7")
|
monitor.write("\7")
|
||||||
|
|
||||||
monitor.setTextColor(colors.white)
|
monitor.setTextColor(colors.white)
|
||||||
monitor.write(" Turtle #" .. id)
|
monitor.write(string.format(" T#%-2d", id))
|
||||||
|
|
||||||
monitor.setCursorPos(startX + 16, y)
|
monitor.setCursorPos(turtleX + 12, turtleY)
|
||||||
monitor.setTextColor(colors.lightGray)
|
monitor.setTextColor(colors.lightGray)
|
||||||
if turtle.state then
|
if turtle.state then
|
||||||
monitor.write(turtle.state:upper())
|
local state = turtle.state:upper()
|
||||||
|
if #state > 10 then state = state:sub(1, 10) end
|
||||||
|
monitor.write(state)
|
||||||
else
|
else
|
||||||
monitor.write("UNKNOWN")
|
monitor.write("UNKNOWN")
|
||||||
end
|
end
|
||||||
|
|
||||||
y = y + 1
|
-- Show position if available
|
||||||
|
if turtle.position then
|
||||||
|
turtleY = turtleY + 1
|
||||||
|
monitor.setCursorPos(turtleX + 4, turtleY)
|
||||||
|
monitor.setTextColor(colors.gray)
|
||||||
|
monitor.write(string.format("X:%d Y:%d Z:%d",
|
||||||
|
turtle.position.x or 0,
|
||||||
|
turtle.position.y or 0,
|
||||||
|
turtle.position.z or 0))
|
||||||
|
end
|
||||||
|
|
||||||
|
turtleY = turtleY + 2
|
||||||
count = count + 1
|
count = count + 1
|
||||||
end
|
end
|
||||||
|
|
||||||
if count == 0 then
|
if count == 0 then
|
||||||
monitor.setCursorPos(startX + 2, startY + 4)
|
monitor.setCursorPos(turtleX + 2, statsY + 5)
|
||||||
monitor.setTextColor(colors.gray)
|
monitor.setTextColor(colors.gray)
|
||||||
monitor.write("No turtles detected")
|
monitor.write("No turtles detected")
|
||||||
|
monitor.setCursorPos(turtleX + 2, statsY + 6)
|
||||||
|
monitor.write("Waiting for signals...")
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Activity log
|
-- Activity log (bottom section, MUCH taller for vertical display)
|
||||||
local logY = 13
|
local logY = 28
|
||||||
drawBox(2, logY, w - 2, h - logY - 1, colors.gray)
|
drawBox(2, logY, w - 2, h - logY - 1, colors.gray)
|
||||||
drawBox(3, logY + 1, w - 4, h - logY - 3, colors.black)
|
drawBox(3, logY + 1, w - 4, h - logY - 3, colors.black)
|
||||||
|
|
||||||
monitor.setTextColor(colors.yellow)
|
monitor.setTextColor(colors.yellow)
|
||||||
monitor.setCursorPos(4, logY + 1)
|
monitor.setCursorPos(4, logY + 1)
|
||||||
monitor.write("ACTIVITY LOG")
|
monitor.write("╔═══ ACTIVITY LOG ═══╗")
|
||||||
|
|
||||||
|
-- Calculate how many log lines we can show (huge vertical space!)
|
||||||
|
local maxLines = h - logY - 4
|
||||||
|
|
||||||
local maxLines = h - logY - 3
|
|
||||||
for i = 1, math.min(#activityLog, maxLines) do
|
for i = 1, math.min(#activityLog, maxLines) do
|
||||||
local entry = activityLog[i]
|
local entry = activityLog[i]
|
||||||
monitor.setCursorPos(4, logY + 2 + i - 1)
|
monitor.setCursorPos(4, logY + 2 + i)
|
||||||
monitor.setBackgroundColor(colors.black)
|
monitor.setBackgroundColor(colors.black)
|
||||||
|
|
||||||
monitor.setTextColor(colors.gray)
|
monitor.setTextColor(colors.gray)
|
||||||
@@ -199,14 +243,20 @@ local function drawDashboard()
|
|||||||
monitor.write("[" .. time .. "] ")
|
monitor.write("[" .. time .. "] ")
|
||||||
|
|
||||||
monitor.setTextColor(entry.color)
|
monitor.setTextColor(entry.color)
|
||||||
monitor.write(entry.text)
|
-- Truncate long messages to fit width
|
||||||
|
local maxTextWidth = w - 18
|
||||||
|
local text = entry.text
|
||||||
|
if #text > maxTextWidth then
|
||||||
|
text = text:sub(1, maxTextWidth - 3) .. "..."
|
||||||
|
end
|
||||||
|
monitor.write(text)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Footer
|
-- Footer
|
||||||
monitor.setBackgroundColor(colors.gray)
|
monitor.setBackgroundColor(colors.gray)
|
||||||
monitor.setCursorPos(1, h)
|
monitor.setCursorPos(1, h)
|
||||||
monitor.clearLine()
|
monitor.clearLine()
|
||||||
centerText(h, "Server: " .. SERVER_URL:sub(8), colors.white, colors.gray)
|
centerText(h, "Ctrl+T to terminate | Monitoring " .. STATUS_CHANNEL .. " & " .. COMMAND_CHANNEL, colors.white, colors.gray)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function addLog(text, color)
|
local function addLog(text, color)
|
||||||
|
|||||||
Reference in New Issue
Block a user