Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- r={}
- fps={}
- fps.old=os.time()
- fps.enable=true
- fps.count=0
- fps.fps=20
- c={1} --таблица цветов. просто для упрощения жизни.
- for i=1,15 do
- c[#c+1]=2^i
- end
- monitor = peripheral.wrap("right")
- r.s={} -- таблица для рендера.
- if monitor==nil then
- r.sx,r.sy=term.getSize() -- размер экрана
- else
- r.sx,r.sy=monitor.getSize()
- end
- r.d={} -- таблица для сравнения рендеров.
- r.se={} -- таблица несовпадений рендеров.
- r.to=os.time()
- r.renderspeed=0 -- чем больше число тем больше сошибок делает рендер но fps будет выше. если поставить 0 то fps упадет до 10 до не будет глюков рендера.
- gh={}
- angle=0
- defbackcolor=16 -- цвет заднего фона.
- keypress=0
- lcolor=1
- function fps.update()
- local time=os.time()*1000*0.05
- if time>fps.old+1 then
- fps.old=time
- fps.fps=fps.count
- fps.count=0
- end
- return fps.fps
- end
- function math.round(num, idp)
- local mult = 10^(idp or 0)
- return math.floor(num * mult + 0.5) / mult
- end
- for y=1,r.sy do
- r.s[y]={}
- for x=1,r.sx do
- r.s[y][x]={16,16," "}
- end end
- for y=1,r.sy do
- r.d[y]={}
- for x=1,r.sx do
- r.d[y][x]={16,16,"X"}
- end end
- function gh.rectangle(mode,x,y,x2,y2,color,altcolor,text)
- local func={}
- func["line"]= function(x,y,x2,y2,color,altcolor,text)
- for nx=0,x2 do
- for ny=0,y2 do
- if nx==0 or nx==x2 or ny==0 or ny==y2 then
- gh.point(x+nx,y+ny,color,altcolor,text) end
- end end
- end
- func["fill"]= function(x,y,x2,y2,color,altcolor,text)
- for nx=x,x2 do
- for ny=y,y2 do
- gh.point(nx,ny,color,altcolor,text)
- end end
- end
- func[mode](x,y,x2,y2,color,altcolor,text)
- end
- function gh.point(x,y,color,altcolor,text)
- if altcolor==0 then
- r.s[y][x]={color,r.s[y][x][2],text} else
- r.s[y][x]={color,altcolor,text} end
- end
- function gh.text(x,y,color,altcolor,text)
- local X=0
- for w in string.gmatch(text, ".") do
- gh.point(x+X,y,color,altcolor,w)
- X=X+1
- end
- end
- function gh.centertext(y,color,altcolor,text)
- local X=0
- for w in string.gmatch(text, ".") do
- gh.point(X+math.floor((r.sx-gh.getTextWidth(text))/2),y,color,altcolor,w)
- X=X+1
- end
- end
- function gh.getTextWidth(text)
- local i=0
- for S in string.gmatch(text, ".") do
- i=i+1
- end
- return i
- end
- function gh.line(x2,y2,x3,y3,color,altcolor,text)
- local x=x3-x2
- local y=y3-y2
- local nx=x2
- local ny=y2
- local h=math.sqrt(x^2+y^2)
- local sina= y/h
- local cosa= x/h
- for i=1,h do
- gh.point(math.floor(nx),math.floor(ny),color,altcolor,text)
- nx=nx+cosa
- ny=ny+sina
- end
- end
- function r.draw()
- -- пререндер
- for y=1,r.sy do
- for x=1,r.sx do
- for i=1,3 do
- if r.s[y][x][i]==r.d[y][x][i] then else
- r.se[#r.se+1]={y,x,r.s[y][x][1],r.s[y][x][2],r.s[y][x][3]}
- r.d[y][x][i]=r.s[y][x][i]
- r.s[y][x]={16,16," "}
- end
- end
- end
- -- рендер
- if #r.se>0 then
- for i=#r.se,1,-1 do
- if monitor==nil then
- term.setCursorPos(r.se[i][2],r.se[i][1])
- term.setTextColor(c[r.se[i][3] ])
- term.setBackgroundColor(c[r.se[i][4] ])
- write(r.se[i][5])
- else
- monitor.setCursorPos(r.se[i][2],r.se[i][1])
- monitor.setTextColor(c[r.se[i][3] ])
- monitor.setBackgroundColor(c[r.se[i][4] ])
- monitor.write(r.se[i][5])
- r.se[i]=nil
- end
- end
- end
- end
- for y=1,r.sy do
- for x=1,r.sx do
- r.s[y][x]={16,16," "}
- end end
- end
- function r.systemupdate()
- update()
- fps.count=fps.count+1
- draw()
- r.draw()
- sleep(0)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement