initialize
This commit is contained in:
commit
5b23ea99fd
43 changed files with 2336 additions and 0 deletions
8
Dash/dash.lua
Normal file
8
Dash/dash.lua
Normal file
|
@ -0,0 +1,8 @@
|
|||
local m = peripheral.find("monitor")
|
||||
m.setTextScale(0.5)
|
||||
local pixelbox = require("./util/pixelbox_lite")
|
||||
local screen = pixelbox.new(m)
|
||||
screen:set_pixel(3, 2, 1)
|
||||
screen:render()
|
||||
|
||||
print(screen:get_size())
|
184
Dash/util/pixelbox_lite.lua
Normal file
184
Dash/util/pixelbox_lite.lua
Normal file
|
@ -0,0 +1,184 @@
|
|||
--[[
|
||||
Made by O. Caha (9551-Dev), licensed under MIT
|
||||
|
||||
Modified by Andrew_7_1
|
||||
]]
|
||||
|
||||
local PIXELBOX = {}
|
||||
local OBJECT = {}
|
||||
|
||||
local t_sort,t_cat,s_char = table.sort,table.concat,string.char
|
||||
local function sort(a,b) return a[2] > b[2] end
|
||||
|
||||
local distances = {
|
||||
{5,256,16,8,64,32},
|
||||
{4,16,16384,256,128},
|
||||
[4] ={4,64,1024,256,128},
|
||||
[8] ={4,512,2048,256,1},
|
||||
[16] ={4,2,16384,256,1},
|
||||
[32] ={4,8192,4096,256,1},
|
||||
[64] ={4,4,1024,256,1},
|
||||
[128] ={6,32768,256,1024,2048,4096,16384},
|
||||
[256] ={6,1,128,2,512,4,8192},
|
||||
[512] ={4,8,2048,256,128},
|
||||
[1024] ={4,4,64,128,32768},
|
||||
[2048] ={4,512,8,128,32768},
|
||||
[4096] ={4,8192,32,128,32768},
|
||||
[8192] ={3,32,4096,256128},
|
||||
[16384]={4,2,16,128,32768},
|
||||
[32768]={5,128,1024,2048,4096,16384}
|
||||
}
|
||||
|
||||
local to_blit = {}
|
||||
for i = 0, 15 do
|
||||
to_blit[2^i] = ("%x"):format(i)
|
||||
end
|
||||
|
||||
|
||||
function PIXELBOX.RESTORE(BOX,color)
|
||||
local bc = {}
|
||||
|
||||
for y=1,BOX.height*3 do
|
||||
for x=1,BOX.width*2 do
|
||||
if not bc[y] then bc[y] = {} end
|
||||
bc[y][x] = color
|
||||
end
|
||||
end
|
||||
|
||||
BOX.CANVAS = bc
|
||||
end
|
||||
|
||||
local function build_drawing_char(a,b,c,d,e,f)
|
||||
local arr = {a,b,c,d,e,f}
|
||||
local c_types = {}
|
||||
local sortable = {}
|
||||
local ind = 0
|
||||
for i=1,6 do
|
||||
local c = arr[i]
|
||||
if not c_types[c] then
|
||||
ind = ind + 1
|
||||
c_types[c] = {0,ind}
|
||||
end
|
||||
|
||||
local t = c_types[c]
|
||||
local t1 = t[1] + 1
|
||||
|
||||
t[1] = t1
|
||||
sortable[t[2]] = {c,t1}
|
||||
end
|
||||
local n = #sortable
|
||||
while n > 2 do
|
||||
t_sort(sortable,sort)
|
||||
local bit6 = distances[sortable[n][1]]
|
||||
local index,run = 1,false
|
||||
local nm1 = n - 1
|
||||
for i=2,bit6[1] do
|
||||
if run then break end
|
||||
local tab = bit6[i]
|
||||
for j=1,nm1 do
|
||||
if sortable[j][1] == tab then
|
||||
index = j
|
||||
run = true
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
local from,to = sortable[n][1],sortable[index][1]
|
||||
for i=1,6 do
|
||||
if arr[i] == from then
|
||||
arr[i] = to
|
||||
local sindex = sortable[index]
|
||||
sindex[2] = sindex[2] + 1
|
||||
end
|
||||
end
|
||||
|
||||
sortable[n] = nil
|
||||
n = n - 1
|
||||
end
|
||||
|
||||
local n = 128
|
||||
local a6 = arr[6]
|
||||
|
||||
if arr[1] ~= a6 then n = n + 1 end
|
||||
if arr[2] ~= a6 then n = n + 2 end
|
||||
if arr[3] ~= a6 then n = n + 4 end
|
||||
if arr[4] ~= a6 then n = n + 8 end
|
||||
if arr[5] ~= a6 then n = n + 16 end
|
||||
|
||||
if sortable[1][1] == arr[6] then
|
||||
return s_char(n),sortable[2][1],arr[6]
|
||||
else
|
||||
return s_char(n),sortable[1][1],arr[6]
|
||||
end
|
||||
end
|
||||
|
||||
function OBJECT:render()
|
||||
local t = self.term
|
||||
local blit_line,set_cursor = t.blit,t.setCursorPos
|
||||
|
||||
local w_double = self.width*2
|
||||
local canv = self.CANVAS
|
||||
|
||||
local sy = 0
|
||||
for y=1,self.height*3,3 do
|
||||
sy = sy + 1
|
||||
local layer_1 = canv[y]
|
||||
local layer_2 = canv[y+1]
|
||||
local layer_3 = canv[y+2]
|
||||
local char_line,fg_line,bg_line = {},{},{}
|
||||
local n = 0
|
||||
for x=1,w_double,2 do
|
||||
local xp1 = x+1
|
||||
local b11,b21,b12,b22,b13,b23 =
|
||||
layer_1[x],layer_1[xp1],
|
||||
layer_2[x],layer_2[xp1],
|
||||
layer_3[x],layer_3[xp1]
|
||||
|
||||
local char,fg,bg = " ",1,b11
|
||||
if not (b21 == b11
|
||||
and b12 == b11
|
||||
and b22 == b11
|
||||
and b13 == b11
|
||||
and b23 == b11) then
|
||||
char,fg,bg = build_drawing_char(b11,b21,b12,b22,b13,b23)
|
||||
end
|
||||
n = n + 1
|
||||
char_line[n] = char
|
||||
fg_line [n] = to_blit[fg]
|
||||
bg_line [n] = to_blit[bg]
|
||||
end
|
||||
|
||||
set_cursor(1,sy)
|
||||
blit_line(
|
||||
t_cat(char_line,""),
|
||||
t_cat(fg_line,""),
|
||||
t_cat(bg_line,"")
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
function OBJECT:clear(color)
|
||||
PIXELBOX.RESTORE(self,color)
|
||||
end
|
||||
|
||||
function OBJECT:set_pixel(x,y,color)
|
||||
self.CANVAS[y][x] = color
|
||||
end
|
||||
|
||||
function OBJECT:get_size()
|
||||
return #(self.CANVAS), #(self.CANVAS[1])
|
||||
end
|
||||
|
||||
function PIXELBOX.new(terminal,bg)
|
||||
local bg = bg or terminal.getBackgroundColor() or colors.black
|
||||
local BOX = {}
|
||||
local w,h = terminal.getSize()
|
||||
BOX.term = terminal
|
||||
setmetatable(BOX,{__index = OBJECT})
|
||||
BOX.width = w
|
||||
BOX.height = h
|
||||
PIXELBOX.RESTORE(BOX,bg)
|
||||
return BOX
|
||||
end
|
||||
|
||||
return PIXELBOX
|
19
Dash/widgets/ART.md
Normal file
19
Dash/widgets/ART.md
Normal file
|
@ -0,0 +1,19 @@
|
|||
|
||||
|
||||
Changes through time:
|
||||
* Morning
|
||||
* Day
|
||||
* Evening
|
||||
* Night
|
||||
|
||||
Changes with weather:
|
||||
* Sunny
|
||||
* Cloudy
|
||||
* Rainy
|
||||
* Stormy (diff from rain?)
|
||||
* Snowy - alternative to rainy
|
||||
|
||||
Changes with dates:
|
||||
<this assumes some things present on the scene>
|
||||
Fireworks
|
||||
Lowered flag
|
10
Dash/widgets/README.md
Normal file
10
Dash/widgets/README.md
Normal file
|
@ -0,0 +1,10 @@
|
|||
# Widgets I'll need
|
||||
target: 5x3 monitors big (200x114 pixels allegedly)
|
||||
|
||||
### Essential
|
||||
* Time (with zones?)
|
||||
* Weather
|
||||
* Some kind of feed?
|
||||
|
||||
### Cool
|
||||
* Dynamic cityscape that changes with time and weather
|
Loading…
Add table
Add a link
Reference in a new issue