Advertisement
VlaD00m

NyaDraw Graphic Engine (Minimized)

Feb 20th, 2021 (edited)
916
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 14.67 KB | None | 0 0
  1. --[[NyaDraw Graphic Engine v1.20 for OpenOS (Minified version)
  2.     Standalone "Screen.lua" port from MineOS
  3.     More info on: https://github.com/Bs0Dd/OpenCompSoft/blob/master/NyaDraw/README.md
  4.     2015-2023 - ECS: https://github.com/IgorTimofeev
  5.     2021-2023 - Bs0Dd: https://github.com/Bs0Dd
  6. ]]
  7. local a=require("unicode")local b=require("computer")local c=require("component")local d=require("bit32")local e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A=c.invoke,math.ceil,math.floor,math.abs,math.min,math.max,table.insert,table.concat,a.len,a.sub;local function B(C,D)return o*(D-1)+C end;local function E()return q,r,s end;local function F()return t,u,v end;local function G(H,I,J,K)w,y,x,z=H,I,J,K end;local function L()w,y,x,z=1,1,o,p end;local function M()return w,y,x,z end;local N={0x000000,0x000040,0x000080,0x0000BF,0x0000FF,0x002400,0x002440,0x002480,0x0024BF,0x0024FF,0x004900,0x004940,0x004980,0x0049BF,0x0049FF,0x006D00,0x006D40,0x006D80,0x006DBF,0x006DFF,0x009200,0x009240,0x009280,0x0092BF,0x0092FF,0x00B600,0x00B640,0x00B680,0x00B6BF,0x00B6FF,0x00DB00,0x00DB40,0x00DB80,0x00DBBF,0x00DBFF,0x00FF00,0x00FF40,0x00FF80,0x00FFBF,0x00FFFF,0x0F0F0F,0x1E1E1E,0x2D2D2D,0x330000,0x330040,0x330080,0x3300BF,0x3300FF,0x332400,0x332440,0x332480,0x3324BF,0x3324FF,0x334900,0x334940,0x334980,0x3349BF,0x3349FF,0x336D00,0x336D40,0x336D80,0x336DBF,0x336DFF,0x339200,0x339240,0x339280,0x3392BF,0x3392FF,0x33B600,0x33B640,0x33B680,0x33B6BF,0x33B6FF,0x33DB00,0x33DB40,0x33DB80,0x33DBBF,0x33DBFF,0x33FF00,0x33FF40,0x33FF80,0x33FFBF,0x33FFFF,0x3C3C3C,0x4B4B4B,0x5A5A5A,0x660000,0x660040,0x660080,0x6600BF,0x6600FF,0x662400,0x662440,0x662480,0x6624BF,0x6624FF,0x664900,0x664940,0x664980,0x6649BF,0x6649FF,0x666D00,0x666D40,0x666D80,0x666DBF,0x666DFF,0x669200,0x669240,0x669280,0x6692BF,0x6692FF,0x66B600,0x66B640,0x66B680,0x66B6BF,0x66B6FF,0x66DB00,0x66DB40,0x66DB80,0x66DBBF,0x66DBFF,0x66FF00,0x66FF40,0x66FF80,0x66FFBF,0x66FFFF,0x696969,0x787878,0x878787,0x969696,0x990000,0x990040,0x990080,0x9900BF,0x9900FF,0x992400,0x992440,0x992480,0x9924BF,0x9924FF,0x994900,0x994940,0x994980,0x9949BF,0x9949FF,0x996D00,0x996D40,0x996D80,0x996DBF,0x996DFF,0x999200,0x999240,0x999280,0x9992BF,0x9992FF,0x99B600,0x99B640,0x99B680,0x99B6BF,0x99B6FF,0x99DB00,0x99DB40,0x99DB80,0x99DBBF,0x99DBFF,0x99FF00,0x99FF40,0x99FF80,0x99FFBF,0x99FFFF,0xA5A5A5,0xB4B4B4,0xC3C3C3,0xCC0000,0xCC0040,0xCC0080,0xCC00BF,0xCC00FF,0xCC2400,0xCC2440,0xCC2480,0xCC24BF,0xCC24FF,0xCC4900,0xCC4940,0xCC4980,0xCC49BF,0xCC49FF,0xCC6D00,0xCC6D40,0xCC6D80,0xCC6DBF,0xCC6DFF,0xCC9200,0xCC9240,0xCC9280,0xCC92BF,0xCC92FF,0xCCB600,0xCCB640,0xCCB680,0xCCB6BF,0xCCB6FF,0xCCDB00,0xCCDB40,0xCCDB80,0xCCDBBF,0xCCDBFF,0xCCFF00,0xCCFF40,0xCCFF80,0xCCFFBF,0xCCFFFF,0xD2D2D2,0xE1E1E1,0xF0F0F0,0xFF0000,0xFF0040,0xFF0080,0xFF00BF,0xFF00FF,0xFF2400,0xFF2440,0xFF2480,0xFF24BF,0xFF24FF,0xFF4900,0xFF4940,0xFF4980,0xFF49BF,0xFF49FF,0xFF6D00,0xFF6D40,0xFF6D80,0xFF6DBF,0xFF6DFF,0xFF9200,0xFF9240,0xFF9280,0xFF92BF,0xFF92FF,0xFFB600,0xFFB640,0xFFB680,0xFFB6BF,0xFFB6FF,0xFFDB00,0xFFDB40,0xFFDB80,0xFFDBBF,0xFFDBFF,0xFFFF00,0xFFFF40,0xFFFF80,0xFFFFBF,0xFFFFFF}local function O(P)return N[P+1]end;if b.getArchitecture and b.getArchitecture()~="Lua 5.2"then colorIntegerToRGB,colorRGBToInteger,colorBlend=load("return function(a)return a>>16,a>>8&0xFF,a&0xFF end,function(r,g,b)return r<<16|g<<8|b end,function(a,b,c)local d=1-c return((b>>16)*d+(a>>16)*c)//1.0<<16|((b>>8&0xFF)*d+(a>>8&0xFF)*c)//1.0<<8|((b&0xFF)*d+(a&0xFF)*c)//1.0 end")()else colorIntegerToRGB=function(Q)local R=Q/65536;R=R-R%1;local S=(Q-R*65536)/256;S=S-S%1;return R,S,Q-R*65536-S*256 end;colorRGBToInteger=function(R,S,T)return R*65536+S*256+T end;colorBlend=function(U,V,W)local X=1-W;local Y,Z=U/65536,V/65536;Y,Z=Y-Y%1,Z-Z%1;local _,a0=(U-Y*65536)/256,(V-Z*65536)/256;_,a0=_-_%1,a0-a0%1;local R,S,T=Z*X+Y*W,a0*X+_*W,(V-Z*65536-a0*256)*X+(U-Y*65536-_*256)*W;return(R-R%1)*65536+(S-S%1)*256+T-T%1 end end;local function a1(a2)local a3={string.byte(a2:read(1))}local a4=0;for a5=1,7 do if d.band(d.rshift(a3[1],8-a5),0x1)==0x0 then a4=a5;break end end;for a5=1,a4-2 do table.insert(a3,string.byte(a2:read(1)))end;return string.char(table.unpack(a3))end;local function a6(a2,a7)local a8,a9={string.byte(a2:read(a7)or"\x00",1,8)},0;for a5=1,#a8 do a9=d.bor(d.lshift(a9,8),a8[a5])end;return a9 end;local function aa(ab,C,D,ac,ad,ae,af)local ag=4*(ab[1]*(D-1)+C)-1;ab[ag],ab[ag+1],ab[ag+2],ab[ag+3]=ac,ad,ae,af;return ab end;local function ah(a2,ab,ai,aj)ab[1]=string.byte(a2:read(1))+aj;ab[2]=string.byte(a2:read(1))+aj;local ak,al,am,an,ao;for ae=1,string.byte(a2:read(1))+ai do ak=string.byte(a2:read(1))/255;for af=1,a6(a2,2)+ai do al=a1(a2)for ac=1,string.byte(a2:read(1))+ai do am=O(string.byte(a2:read(1)))for ad=1,string.byte(a2:read(1))+ai do an=O(string.byte(a2:read(1)))for D=1,string.byte(a2:read(1))+ai do ao=string.byte(a2:read(1))for C=1,string.byte(a2:read(1))+ai do aa(ab,string.byte(a2:read(1))+aj,ao+aj,am,an,ak,al)end end end end end end end;local ap={}ap[5]=function(a2,ab)ab[1]=a6(a2,2)ab[2]=a6(a2,2)for a5=1,ab[1]*ab[2]do table.insert(ab,O(string.byte(a2:read(1))))table.insert(ab,O(string.byte(a2:read(1))))table.insert(ab,string.byte(a2:read(1))/255)table.insert(ab,a1(a2))end end;ap[6]=function(a2,ab)ah(a2,ab,0,0)end;ap[7]=function(a2,ab)ah(a2,ab,1,0)end;ap[8]=function(a2,ab)ah(a2,ab,1,1)end;local function aq(ar)local a2,as=io.open(ar,"rb")if a2 then local at=a2:read(4)if at=="OCIF"then local au=string.byte(a2:read(1))if ap[au]then local ab={}local a9,as=xpcall(ap[au],debug.traceback,a2,ab)a2:close()if a9 then return ab else return false,"Failed to load OCIF image: "..tostring(as)end else a2:close()return false,"Failed to load OCIF image: encoding method \""..tostring(au).."\" is not supported"end else a2:close()return false,"Failed to load OCIF image: binary signature \""..tostring(at).."\" is not valid"end else return false,"Failed to open file \""..tostring(ar).."\" for reading: "..tostring(as)end end;local function av(aw,ax)if not aw or not ax then aw,ax=e(A,"getResolution")end;q,r,s,t,u,v={},{},{},{},{},{}o=aw;p=ax;L()for a5=1,o*p do q[a5]=0x010101;t[a5]=0x010101;r[a5]=0xFEFEFE;u[a5]=0xFEFEFE;s[a5]=" "v[a5]=" "end end;local function ay()return A end;local function az(aA)A=aA;av()end;local function aB()return e(A,"getScreen")end;local function aC()return e(A,"maxResolution")end;local function aD(aw,ax)e(A,"setResolution",aw,ax)av(aw,ax)end;local function aE()return e(A,"getDepth")end;local function aF(...)return e(A,"setDepth",...)end;local function aG(...)return e(A,"maxDepth")end;local function aH()return e(aB(),"getAspectRatio")end;local function aI()return o,p end;local function aJ()return o end;local function aK()return p end;local function aL(aA,aM)local aN,as=e(A,"bind",aA,aM)if aN then if aM then aD(aC())else aD(o,p)end else return aN,as end end;local function aO()return c.proxy(A or"")end;local function aP(aQ)return az(aQ.address)end;local function aR(aS)if not aS or aS>1 then aS=1 elseif aS<0.1 then aS=0.1 end;local aT,aU=aH()local aV,aW=aC()local aX=2*(16*aT-4.5)/(16*aU-4.5)local ax=aS*i(aV/aX,aV,math.sqrt(aV*aW/aX))return math.floor(ax*aX),math.floor(ax)end;local function aY(ag,ac,ad,af)t[ag],u[ag],v[ag]=ac,ad,af end;local function aZ(ag)return t[ag],u[ag],v[ag]end;local function a_(C,D)if C>=1 and D>=1 and C<=o and D<=p then local ag=o*(D-1)+C;return t[ag],u[ag],v[ag]else return 0x000000,0x000000," "end end;local function b0(C,D,ac,ad,af)if C>=w and D>=y and C<=x and D<=z then local ag=o*(D-1)+C;t[ag],u[ag],v[ag]=ac,ad,af end end;local function b1(C,D,aw,ax,ac,ad,af,W)local b2;if C<w then aw=aw-w+C;C=w end;b2=C+aw-1;if b2>x then aw=aw-b2+x end;if D<y then ax=ax-y+D;D=y end;b2=D+ax-1;if b2>z then ax=ax-b2+z end;b2=o*(D-1)+C;local b3=o-aw;if W then for b4=1,ax do for a5=1,aw do t[b2],u[b2]=colorBlend(t[b2],ac,W),colorBlend(u[b2],ac,W)b2=b2+1 end;b2=b2+b3 end else for b4=1,ax do for a5=1,aw do t[b2],u[b2],v[b2]=ac,ad,af;b2=b2+1 end;b2=b2+b3 end end end;local function b5(C,D,aw,ax,b6,b7,W)local b2;if C<w then aw=aw-w+C;C=w end;b2=C+aw-1;if b2>x then aw=aw-b2+x end;if D<y then ax=ax-y+D;D=y end;b2=D+ax-1;if b2>z then ax=ax-b2+z end;local b8,b3,b9,ba,bb,bc,bd,be,bf,bg,R,S,T=o*(D-1)+C,o-aw,{},1;b2=b8;if b7 then for b4=1,ax do for a5=1,aw do b9[ba]=colorBlend(t[b2],b7,W)b2,ba=b2+1,ba+1 end;b2=b2+b3 end else for b4=1,ax do for a5=1,aw do b9[ba]=t[b2]b2,ba=b2+1,ba+1 end;b2=b2+b3 end end;local bb,bc,bd,a7,R,S,T;for b4=1,ax do for a5=1,aw do bb,bc,bd,a7=0,0,0,0;for bh=j(1,b4-b6),i(b4+b6,ax)do for bi=j(1,a5-b6),i(a5+b6,aw)do R,S,T=colorIntegerToRGB(b9[aw*(bh-1)+bi])bb,bc,bd,a7=bb+R,bc+S,bd+T,a7+1 end end;R,S,T=bb/a7,bc/a7,bd/a7;R,S,T=R-R%1,S-S%1,T-T%1;t[b8]=colorRGBToInteger(R,S,T)u[b8]=0x0;v[b8]=" "b8=b8+1 end;b8=b8+b3 end end;local function bj(b7,W)b1(1,1,o,p,b7 or 0x0,0x000000," ",W)end;local function bk(C,D,aw,ax)local bl,ag={aw,ax}for b4=D,D+ax-1 do for a5=C,C+aw-1 do if a5>=1 and b4>=1 and a5<=o and b4<=p then ag=o*(b4-1)+a5;k(bl,t[ag])k(bl,u[ag])k(bl,v[ag])else k(bl,0x0)k(bl,0x0)k(bl," ")end end end;return bl end;local function bm(bn,bo,ab)local bp=ab[1]local b8,bq,br=o*(bo-1)+bn,3,o-bp;for D=bo,bo+ab[2]-1 do if D>=y and D<=z then for C=bn,bn+bp-1 do if C>=w and C<=x then t[b8]=ab[bq]u[b8]=ab[bq+1]v[b8]=ab[bq+2]end;b8,bq=b8+1,bq+3 end;b8=b8+br else b8,bq=b8+o,bq+bp*3 end end end;local function bs(H,I,J,K,bt)local bu,bv,bw,bx,by,bz,bA=H,J,I,K,false,h(J-H),h(K-I)if bz<bA then bu,bv,bw,bx,by,bz,bA=I,K,H,J,true,bA,bz end;if bw>bx then bw,bx=bx,bw;bu,bv=bv,bu end;local bB,bC,bD=bw,1,bz/bA;local bE=bD;for bF=bu,bv,bu<bv and 1 or-1 do if by then bt(bB,bF)else bt(bF,bB)end;bC=bC+1;if bC>bE then bB,bE=bB+1,bE+bD end end end;local function bG(bH,bI,bJ,bK,bt)local function bL(bM,bN)bt(bH+bM,bI+bN)bt(bH-bM,bI+bN)bt(bH-bM,bI-bN)bt(bH+bM,bI-bN)end;local C,D,bO,bP,bQ,bR,bS=bJ,0,bK*bK*(1-2*bJ),bJ*bJ,0,2*bJ*bJ,2*bK*bK;local bT,bU=bS*bJ,0;while bT>=bU do bL(C,D)D,bU,bQ=D+1,bU+bR,bQ+bP;bP=bP+bR;if 2*bQ+bO>0 then C,bT,bQ=C-1,bT-bS,bQ+bO;bO=bO+bS end end;C,D,bO,bP,bQ,bT,bU=0,bK,bK*bK,bJ*bJ*(1-2*bK),0,0,bR*bK;while bT<=bU do bL(C,D)C,bT,bQ=C+1,bT+bS,bQ+bO;bO=bO+bS;if 2*bQ+bP>0 then D,bU,bQ=D-1,bU-bR,bQ+bP;bP=bP+bR end end end;local function bV(bH,bI,bn,bo,bW,bt)local bX=360/bW;local bY,bZ=bn-bH,bo-bI;local b6=math.sqrt(bY^2+bZ^2)local b_=b6/2;local c0=math.deg(math.asin(bY/b6))local function c1(c2)if c2>=0 then return math.floor(c2+0.5)else return math.ceil(c2-0.5)end end;local function c3(c4)local c5=math.rad(c4)local c6=math.sin(c5)*b6;local c7=math.cos(c5)*b6;return c1(bH+c6),c1(bI+(bZ>=0 and c7 or-c7))end;local c8,c9,ca,cb=c3(c0)for c4=c0+bX-1,c0+360,bX do ca,cb=c3(c4)bs(c8,c9,ca,cb,bt)c8,c9=ca,cb end end;local function cc(H,I,J,K,ac,ad,af)bs(H,I,J,K,function(C,D)b0(C,D,ac,ad,af)end)end;local function cd(bH,bI,bJ,bK,ac,ad,af)bG(bH,bI,bJ,bK,function(C,D)b0(C,D,ac,ad,af)end)end;local function ce(bH,bI,bJ,bK,ac,ad,bW,af)bV(bH,bI,bJ,bK,bW,function(C,D)b0(C,D,ac,ad,af)end)end;local function cf(C,D,cg,ch,W)if D>=y and D<=z then local ci,b8=1,o*(D-1)+C;for ci=1,m(ch)do if C>=w and C<=x then if W then u[b8]=colorBlend(t[b8],cg,W)else u[b8]=cg end;v[b8]=n(ch,ci,ci)end;C,b8=C+1,b8+1 end end end;local function cj(C,D,ab,ck)local bp,cl,bq,b2=ab[1],ab[2],3;local cm,cn=bp,cl;if C<w then b2=w-C;cm,C,bq=cm-b2,w,bq+b2*4 end;b2=C+cm-1;if b2>x then cm=cm-b2+x end;if D<y then b2=y-D;cn,D,bq=cn-b2,y,bq+b2*bp*4 end;b2=D+cn-1;if b2>z then cn=cn-b2+z end;local b8,co,cp,ac,ad,ae,af=o*(D-1)+C,o-cm,(bp-cm)*4;for b4=1,cn do for a5=1,cm do ae,af=ab[bq+2],ab[bq+3]if ae==0 then t[b8],u[b8]=ab[bq],ab[bq+1]elseif ae>0 and ae<1 then t[b8]=colorBlend(t[b8],ab[bq],ae)if ck then u[b8]=colorBlend(u[b8],ab[bq+1],ae)else u[b8]=ab[bq+1]end elseif af~=" "then u[b8]=ab[bq+1]end;v[b8]=af;b8,bq=b8+1,bq+4 end;b8,bq=b8+co,bq+cp end end;local function cq(C,D,aw,ax,b7)local cr,cs,J="┌"..string.rep("─",aw-2).."┐","└"..string.rep("─",aw-2).."┘",C+aw-1;cf(C,D,b7,cr)D=D+1;for a5=1,ax-2 do cf(C,D,b7,"│")cf(J,D,b7,"│")D=D+1 end;cf(C,D,b7,cs)end;local function ct(ag,b7,cu)local cv,cw,cx="▀","▄"," "local ac,ad,af=t[ag],u[ag],v[ag]if cu then if af==cv then if b7==ad then t[ag],u[ag],v[ag]=b7,ad,cx else t[ag],u[ag],v[ag]=b7,ad,af end elseif af==cx then if b7~=ac then t[ag],u[ag],v[ag]=ac,b7,cw end else t[ag],u[ag],v[ag]=ac,b7,cw end else if af==cw then if b7==ad then t[ag],u[ag],v[ag]=b7,ad,cx else t[ag],u[ag],v[ag]=b7,ad,af end elseif af==cx then if b7~=ac then t[ag],u[ag],v[ag]=ac,b7,cv end else t[ag],u[ag],v[ag]=ac,b7,cv end end end;local function cy(C,D,b7)local cz=f(D/2)if C>=w and cz>=y and C<=x and cz<=z then ct(o*(cz-1)+C,b7,D%2==0)end end;local function cA(C,D,aw,ax,b7)local ag,cB,cC,cD,cE=o*(f(D/2)-1)+C,o-aw,aw;for cF=D,D+ax-1 do cD=f(cF/2)if cD>=y and cD<=z then cE=cF%2==0;for cG=C,C+aw-1 do if cG>=w and cG<=x then ct(ag,b7,cE)end;ag=ag+1 end else ag=ag+aw end;if cE then ag=ag+cB else ag=ag-cC end end end;local function cH(H,I,J,K,b7)bs(H,I,J,K,function(C,D)cy(C,D,b7)end)end;local function cI(bH,bI,bJ,bK,b7)bG(bH,bI,bJ,bK,function(C,D)cy(C,D,b7)end)end;local function cJ(cK,cL,cM)return{x=cK.x+(cL.x-cK.x)*cM,y=cK.y+(cL.y-cK.y)*cM}end;local function cN(cO,cM)local cP={}for cQ=1,#cO-1 do k(cP,cJ(cO[cQ],cO[cQ+1],cM))end;return cP end;local function cR(cO,cM)if#cO>1 then return cR(cN(cO,cM),cM)else return cO[1]end end;local function cS(cO,b7,cT)local cU={}for cM=0,1,cT or 0.01 do k(cU,cR(cO,cM))end;for cQ=1,#cU-1 do cH(g(cU[cQ].x),g(cU[cQ].y),g(cU[cQ+1].x),g(cU[cQ+1].y),b7)end end;local function cV(cW)local ag,b3,cX=o*(y-1)+w,o-x+w-1,{}local C,cY,cZ,c_,ci,an;local d0,d1,d2,d3,d4;local d5;for D=y,z do C=w;while C<=x do if q[ag]~=t[ag]or r[ag]~=u[ag]or s[ag]~=v[ag]or cW then d0,d1,d2=t[ag],u[ag],v[ag]q[ag]=d0;r[ag]=d1;s[ag]=d2;cY,cZ,c_,ci={d2},2,C+1,ag+1;while c_<=x do if d0==t[ci]and(v[ci]==" "or d1==u[ci])then q[ci]=t[ci]r[ci]=u[ci]s[ci]=v[ci]cY[cZ],cZ=s[ci],cZ+1 else break end;c_,ci=c_+1,ci+1 end;d3=cX[d0]or{}cX[d0]=d3;d4=d3[d1]or{index=1}d3[d1]=d4;d5=d4.index;d4[d5],d5=C,d5+1;d4[d5],d5=D,d5+1;d4[d5],d5=l(cY),d5+1;C,ag,d4.index=C+cZ-2,ag+cZ-2,d5 end;C,ag=C+1,ag+1 end;ag=ag+b3 end;for ac,d6 in pairs(cX)do e(A,"setBackground",ac)for ad,d7 in pairs(d6)do if an~=ad then e(A,"setForeground",ad)an=ad end;for a5=1,#d7,3 do e(A,"set",d7[a5],d7[a5+1],d7[a5+2])end end end;cX=nil end;return{loadImage=aq,getIndex=B,setDrawLimit=G,resetDrawLimit=L,getDrawLimit=M,flush=av,setResolution=aD,getMaxResolution=aC,bind=aL,setGPUProxy=aP,getGPUProxy=aO,setGPUAddress=az,getGPUAddress=ay,setScreenAddress=aL,getColorDepth=aE,setColorDepth=aF,getMaxColorDepth=aG,getScaledResolution=aR,getResolution=aI,getWidth=aJ,getHeight=aK,getCurrentFrameTables=E,getNewFrameTables=F,getScreenAspectRatio=aH,getScreenAddress=aB,rawSet=aY,rawGet=aZ,get=a_,set=b0,clear=bj,copy=bk,paste=bm,rasterizeLine=bs,rasterizeEllipse=bG,rasterizePolygon=bV,semiPixelRawSet=ct,semiPixelSet=cy,update=cV,drawRectangle=b1,drawLine=cc,drawEllipse=cd,drawPolygon=ce,drawText=cf,drawImage=cj,drawFrame=cq,blur=b5,drawSemiPixelRectangle=cA,drawSemiPixelLine=cH,drawSemiPixelEllipse=cI,drawSemiPixelCurve=cS}
  8.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement