This commit is contained in:
Robert Jelic
2025-02-09 15:40:22 +01:00

View File

@@ -1,5 +1,7 @@
local minified = true
local project = {}
local baseRequire = require
require = function(path) return project[path] or baseRequire(path) end
project["render.lua"] = function(...) local d={}d.__index=d;local _a=require("libraries/colorHex")
local aa=require("log")
function d.new(ba)local ca=setmetatable({},d)ca.terminal=ba
@@ -103,6 +105,172 @@ project["init.lua"] = function(...) local da={...}local _b=da[1]or"basalt"local
local bb="path;/path/?.lua;/path/?/init.lua;"local cb=bb:gsub("path",_b)package.path=cb.."rom/?"
local function db(bc)
local cc=require("errorManager")cc.header="Basalt Loading Error"cc.error(bc)end;local _c,ac=pcall(require,"main")if not _c then db(ac)else return ac end end
project["elements/BaseFrame.lua"] = function(...) local d=require("elements/Container")
local _a=require("render")local aa=setmetatable({},d)aa.__index=aa
function aa.new(ba,ca)
local da=setmetatable({},aa):__init()da:init(ba,ca)da.terminal=term.current()
da._render=_a.new(da.terminal)da._renderUpdate=true;local _b,ab=da.terminal.getSize()
da.set("width",_b)da.set("height",ab)
da.set("background",colors.red)da.set("type","BaseFrame")return da end;function aa:multiBlit(ba,ca,da,_b,ab,bb,cb)
self._render:multiBlit(ba,ca,da,_b,ab,bb,cb)end;function aa:textFg(ba,ca,da,_b)
self._render:textFg(ba,ca,da,_b)end
function aa:render()if(self._renderUpdate)then d.render(self)
self._render:render()self._renderUpdate=false end end;return aa end
project["elements/Button.lua"] = function(...) local d=require("elements/VisualElement")
local _a=require("libraries/utils").getCenteredPosition;local aa=setmetatable({},d)aa.__index=aa
aa.defineProperty(aa,"text",{default="Button",type="string"})aa.listenTo(aa,"mouse_click")
function aa.new(ba,ca)
local da=setmetatable({},aa):__init()da:init(ba,ca)da.set("type","Button")
da.set("width",10)da.set("height",3)da.set("z",5)return da end
function aa:render()d.render(self)local ba=self.get("text")
local ca,da=_a(ba,self.get("width"),self.get("height"))
self:textFg(ca,da,ba,self.get("foreground"))end;return aa end
project["elements/VisualElement.lua"] = function(...) local d=require("elements/BaseElement")
local _a=setmetatable({},d)_a.__index=_a;local aa=require("libraries/colorHex")
d.defineProperty(_a,"x",{default=1,type="number",canTriggerRender=true})
d.defineProperty(_a,"y",{default=1,type="number",canTriggerRender=true})
d.defineProperty(_a,"z",{default=1,type="number",canTriggerRender=true,setter=function(ba,ca)
ba.basalt.LOGGER.debug("Setting z to "..ca)if ba.parent then ba.parent:sortChildren()end;return ca end})
d.defineProperty(_a,"width",{default=1,type="number",canTriggerRender=true})
d.defineProperty(_a,"height",{default=1,type="number",canTriggerRender=true})
d.defineProperty(_a,"background",{default=colors.black,type="number",canTriggerRender=true})
d.defineProperty(_a,"foreground",{default=colors.white,type="number",canTriggerRender=true})
d.defineProperty(_a,"clicked",{default=false,type="boolean"})
function _a.new(ba,ca)local da=setmetatable({},_a):__init()
da:init(ba,ca)da.set("type","VisualElement")return da end;function _a:multiBlit(ba,ca,da,_b,ab,bb,cb)ba=ba+self.get("x")-1;ca=ca+self.get("y")-
1
self.parent:multiBlit(ba,ca,da,_b,ab,bb,cb)end;function _a:textFg(ba,ca,da,_b)ba=ba+
self.get("x")-1;ca=ca+self.get("y")-1
self.parent:textFg(ba,ca,da,_b)end
function _a:isInBounds(ba,ca)
local da,_b=self.get("x"),self.get("y")local ab,bb=self.get("width"),self.get("height")return
ba>=da and ba<=
da+ab-1 and ca>=_b and ca<=_b+bb-1 end
function _a:mouse_click(ba,ca,da)if self:isInBounds(ca,da)then self.set("clicked",true)
self:fireEvent("mouse_click",ba,ca,da)return true end end
function _a:mouse_up(ba,ca,da)if self:isInBounds(ca,da)then self.set("clicked",false)
self:fireEvent("mouse_up",ba,ca,da)return true end
self:fireEvent("mouse_release",ba,ca,da)end;function _a:mouse_release()self.set("clicked",false)end
function _a:handleEvent(ba,...)if
(self[ba])then return self[ba](self,...)end end
function _a:getAbsolutePosition(ba,ca)if(ba==nil)or(ca==nil)then
ba,ca=self.get("x"),self.get("y")end;local da=self.parent
while da do
local _b,ab=da.get("x"),da.get("y")ba=ba+_b-1;ca=ca+ab-1;da=da.parent end;return ba,ca end
function _a:getRelativePosition(ba,ca)if(ba==nil)or(ca==nil)then
ba,ca=self.get("x"),self.get("y")end;local da,_b=1,1;if self.parent then
da,_b=self.parent:getRelativePosition()end;local ab=self.get("x")
local bb=self.get("y")return ba- (ab-1)- (da-1),ca- (bb-1)- (_b-1)end
function _a:render()local ba,ca=self.get("width"),self.get("height")
self:multiBlit(1,1,ba,ca," ",aa[self.get("foreground")],aa[self.get("background")])end;return _a end
project["elements/BaseElement.lua"] = function(...) local c=require("propertySystem")local d=setmetatable({},c)
d.__index=d;d._events={}
d.defineProperty(d,"type",{default="BaseElement",type="string"})
d.defineProperty(d,"eventCallbacks",{default={},type="table"})
function d.new(_a,aa)local ba=setmetatable({},d):__init()
ba:init(_a,aa)ba.set("type","BaseElement")return ba end
function d:init(_a,aa)self.id=_a;self.basalt=aa;self._registeredEvents={}
if d._events then
for ba in
pairs(d._events)do self._registeredEvents[ba]=true
local ca="on"..
ba:gsub("_(%l)",function(da)return da:upper()end):gsub("^%l",string.upper)
self[ca]=function(da,...)da:registerCallback(ba,...)end end end;return self end;function d.listenTo(_a,aa)if not _a._events then _a._events={}end
_a._events[aa]=true end
function d:listenEvent(_a,aa)aa=aa~=false
if aa~= (
self._registeredEvents[_a]or false)then
if aa then
self._registeredEvents[_a]=true
if self.parent then self.parent:registerChildEvent(self,_a)end else self._registeredEvents[_a]=nil;if self.parent then
self.parent:unregisterChildEvent(self,_a)end end end;return self end
function d:registerCallback(_a,aa)if not self._registeredEvents[_a]then
self:listenEvent(_a,true)end
if
not self._values.eventCallbacks[_a]then self._values.eventCallbacks[_a]={}end
table.insert(self._values.eventCallbacks[_a],aa)return self end
function d:fireEvent(_a,...)
if self._values.eventCallbacks[_a]then for aa,ba in
ipairs(self._values.eventCallbacks[_a])do local ca=ba(self,...)return ca end end;return self end
function d:updateRender()if(self.parent)then self.parent:updateRender()else
self._renderUpdate=true end end;return d end
project["elements/Container.lua"] = function(...) local aa=require("elements/VisualElement")
local ba=require("elementManager")local ca=require("libraries/expect")local da=math.max
local _b=setmetatable({},aa)_b.__index=_b
_b.defineProperty(_b,"children",{default={},type="table"})
_b.defineProperty(_b,"childrenEvents",{default={},type="table"})
_b.defineProperty(_b,"eventListenerCount",{default={},type="table"})
for ab,bb in pairs(ba:getElementList())do
local cb=ab:sub(1,1):upper()..ab:sub(2)
_b["add"..cb]=function(db,...)ca(1,db,"table")
local _c=db.basalt.create(ab,...)
db.basalt.LOGGER.debug(cb.." created with ID: ".._c.id)db:addChild(_c)return _c end end
function _b.new(ab,bb)local cb=setmetatable({},_b):__init()
cb:init(ab,bb)cb.set("type","Container")return cb end
function _b:addChild(ab)
if ab==self then error("Cannot add container to itself")end;local bb=ab.get("z")local cb=1;for db,_c in ipairs(self._values.children)do if
_c.get("z")>bb then break end;cb=db+1 end
table.insert(self._values.children,cb,ab)ab.parent=self;self:registerChildrenEvents(ab)return self end;function _b:sortChildren()
table.sort(self._values.children,function(ab,bb)
return ab.get("z")<bb.get("z")end)end
function _b:sortChildrenEvents(ab)if
self._values.childrenEvents[ab]then
table.sort(self._values.childrenEvents[ab],function(bb,cb)return
bb.get("z")>cb.get("z")end)end end
function _b:registerChildrenEvents(ab)for bb in pairs(ab._registeredEvents)do
self:registerChildEvent(ab,bb)end end
function _b:registerChildEvent(ab,bb)
if not self._values.childrenEvents[bb]then
self._values.childrenEvents[bb]={}self._values.eventListenerCount[bb]=0;if self.parent then
self.parent:registerChildEvent(self,bb)end end;for _c,ac in ipairs(self._values.childrenEvents[bb])do
if ac==ab then return end end;local cb=ab.get("z")local db=1
for _c,ac in
ipairs(self._values.childrenEvents[bb])do if ac.get("z")<cb then break end;db=_c+1 end
table.insert(self._values.childrenEvents[bb],db,ab)self._values.eventListenerCount[bb]=
self._values.eventListenerCount[bb]+1 end
function _b:removeChildrenEvents(ab)for bb in pairs(ab._registeredEvents)do
self:unregisterChildEvent(ab,bb)end end
function _b:unregisterChildEvent(ab,bb)
if self._values.childrenEvents[bb]then
for cb,db in
ipairs(self._values.childrenEvents[bb])do
if db==ab then
table.remove(self._values.childrenEvents[bb],cb)self._values.eventListenerCount[bb]=
self._values.eventListenerCount[bb]-1
if
self._values.eventListenerCount[bb]<=0 then
self._values.childrenEvents[bb]=nil;self._values.eventListenerCount[bb]=nil;if self.parent then
self.parent:unregisterChildEvent(self,bb)end end;break end end end end
function _b:removeChild(ab)
for bb,cb in ipairs(self.children)do if cb==ab then
table.remove(self._values.children,bb)ab.parent=nil;break end end;return self end
function _b:handleEvent(ab,...)
if(aa.handleEvent(self,ab,...))then local bb={...}if ab:find("mouse_")then local cb,db,_c=...
local ac,bc=self:getRelativePosition(db,_c)bb={cb,ac,bc}end
if
self._values.childrenEvents[ab]then
for cb,db in ipairs(self._values.childrenEvents[ab])do if
(db:handleEvent(ab,table.unpack(bb)))then return true end end end end end
function _b:multiBlit(ab,bb,cb,db,_c,ac,bc)local cc,dc=self.get("width"),self.get("height")cb=ab<1 and math.min(
cb+ab-1,cc)or
math.min(cb,math.max(0,cc-ab+1))db=bb<1 and math.min(
db+bb-1,dc)or
math.min(db,math.max(0,dc-bb+1))if
cb<=0 or db<=0 then return end
aa.multiBlit(self,math.max(1,ab),math.max(1,bb),cb,db,_c,ac,bc)end
function _b:textFg(ab,bb,cb,db)local _c,ac=self.get("width"),self.get("height")if
bb<1 or bb>ac then return end;local bc=ab<1 and(2 -ab)or 1
local cc=math.min(#cb-bc+1,
_c-math.max(1,ab)+1)if cc<=0 then return end
aa.textFg(self,math.max(1,ab),math.max(1,bb),cb:sub(bc,bc+cc-1),db)end
function _b:render()aa.render(self)
for ab,bb in ipairs(self._values.children)do if bb==self then
self.basalt.LOGGER.error("CIRCULAR REFERENCE DETECTED!")return end;bb:render()end end;return _b end
project["elements/Frame.lua"] = function(...) local c=require("elements/Container")
local d=setmetatable({},c)d.__index=d
function d.new(_a,aa)local ba=setmetatable({},d):__init()
ba:init(_a,aa)ba.set("width",12)ba.set("height",6)
ba.set("background",colors.blue)ba.set("type","Frame")ba.set("z",10)return ba end;return d end
project["errorManager.lua"] = function(...) local d=require("log")
local _a={tracebackEnabled=true,header="Basalt Error"}local function aa(ba,ca)term.setTextColor(ca)print(ba)
term.setTextColor(colors.white)end
@@ -133,6 +301,20 @@ repeat _c=db.readLine()if
ac==tonumber(bb)then aa("\149Line "..bb,colors.cyan)
aa(_c,colors.lightGray)break end;ac=ac+1 until not _c;db.close()end end;term.setBackgroundColor(colors.black)
d.error(ba)error()end;return _a end
project["libraries/utils.lua"] = function(...) local d,_a=math.floor,string.len;local aa={}
function aa.getCenteredPosition(ba,ca,da)local _b=_a(ba)local ab=d(
(ca-_b+1)/2 +0.5)local bb=d(da/2 +0.5)return ab,bb end
function aa.deepCopy(ba)if type(ba)~="table"then return ba end;local ca={}for da,_b in pairs(ba)do
ca[aa.deepCopy(da)]=aa.deepCopy(_b)end;return ca end;return aa end
project["libraries/expect.lua"] = function(...) local c=require("errorManager")
local function d(_a,aa,ba)local ca=type(aa)
if ba=="element"then if ca=="table"and
aa.get("type")~=nil then return true end end
if ba=="color"then
if ca=="number"and aa>=1 and aa<=32768 then return true end;if ca=="string"and colors[aa]then return true end end;if ca~=ba then c.header="Basalt Type Error"
c.error(string.format("Bad argument #%d: expected %s, got %s",_a,ba,ca))end;return true end;return d end
project["libraries/colorHex.lua"] = function(...) local b={}for i=0,15 do b[2 ^i]=("%x"):format(i)
b[("%x"):format(i)]=2 ^i end;return b end
project["log.lua"] = function(...) local aa={}aa._logs={}aa._enabled=true;aa._logToFile=true
aa._logFile="basalt.log"fs.delete(aa._logFile)
aa.LEVEL={DEBUG=1,INFO=2,WARN=3,ERROR=4}
@@ -175,7 +357,7 @@ function bb.run(bc)db=bc
if(bc==nil)then db=true end
local function cc()ac()while db do _c(os.pullEventRaw())end end
while db do local dc,_d=pcall(cc)if not(dc)then ab.header="Basalt Runtime Error"
ab.error(_d)end end end;return bb end
ab.error(_d)end end end;bb.autoUpdate=bb.run;return bb end
project["propertySystem.lua"] = function(...) local d=require("libraries/utils").deepCopy
local _a=require("libraries/expect")local aa={}aa.__index=aa;aa._properties={}
function aa.defineProperty(ba,ca,da)if