Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local reactor = peripheral.wrap("BigReactors-Reactor_0")
- local turbine = peripheral.wrap("BigReactors-Turbine_0")
- local tank = peripheral.wrap("dynamicValve_0")
- function fixedRound(x) return math.floor(x*10000)/10000 end
- function denull(x) if x == nil then return 0 else return x end end
- toboolean={[true]=true, ["true"]=true, [1]=true, ["1"]=true, [false]=false, ["false"]=false, [0]=false, ["false"]=false}
- block_chars = {'\128','\144','\143 ','\139 ','\131 ','\130 ','\128 '}
- local bars = {}
- function make_bar(name,center,x,y,start,length,maxi,vertical)
- local bar = {
- name = tostring(name),
- center_name = toboolean[center],
- length = tonumber(length),
- amount = 0,
- pre_amount = 0,
- maximum = tonumber(maxi),
- adjusting = tonumber(start),
- fill_frame = 0,
- render_x = tonumber(x),
- render_y = tonumber(y),
- vertical = toboolean[vertical],
- percentage = 0,
- speed = 1,
- }
- function bar:update()
- self.percentage = self.amount/self.maximum
- local block_percent = (self.maximum/self.length)/6/self.maximum
- local blocks = self.percentage/block_percent
- local blocks_round = math.floor(blocks+0.5)
- local tmpx = self.render_x
- if self.vertical then
- term.setCursorPos(self.render_x,self.render_y)
- io.write(self.name)
- self.render_x = self.render_x+math.floor(#self.name/2)-1
- term.setCursorPos(self.render_x,self.render_y+self.length+1)
- io.write("'\045'")
- else
- term.setCursorPos(self.render_x ,self.render_y ); io.write(string.format(".%s.",string.rep("-",self.length)))
- term.setCursorPos(self.render_x ,self.render_y+1); io.write("|")
- term.setCursorPos(self.render_x+length+1,self.render_y+1); io.write("|")
- term.setCursorPos(self.render_x ,self.render_y+2); io.write(string.format("'%s'",string.rep("\045",self.length)))
- term.setCursorPos(self.render_x+math.floor((#self.name/2)/(self.length/2)),self.render_y); io.write(self.name)
- term.setCursorPos(self.render_x+1,self.render_y+1)
- end
- for i=1,self.length do
- if self.vertical then
- --term.setCursorPos(1,17);
- --term.clearLine()
- --io.write(fixedRound(self.percentage),fixedRound(block_percent),fixedRound(blocks),i*6,math.min(blocks-((i-1)*6),6)+1,block_chars[math.min(math.max(blocks_round-((i-1)*6),0),6)+1])
- term.setCursorPos(self.render_x,self.length-i+self.render_y+1);
- io.write('|')
- if #block_chars[math.min(math.max(blocks_round-((i-1)*6),0),5)+1] > 1 then term.setBackgroundColor(colors.white); term.setTextColor(colors.black) end
- io.write(string.sub(block_chars[math.min(math.max(blocks_round-((i-1)*6),0),6)+1],1,1))
- term.setBackgroundColor(colors.black); term.setTextColor(colors.white)
- io.write('|')
- -- io.write('|',math.min(math.max(blocks-(i*6),0),5)+1,'|')
- else
- --term.setCursorPos(1,1);
- --term.clearLine()
- --print(fixedRound(self.percentage),fixedRound(block_percent),fixedRound(blocks),i*6,math.min(blocks-((i-1)*6),6)+1,block_chars[math.min(math.max(blocks_round-((i-1)*6),0),6)+1])
- --term.setCursorPos(self.render_x+i,self.render_y+1);
- if #block_chars[math.min(math.max(blocks_round-((i-1)*6),0),5)+1] > 1 then term.setBackgroundColor(colors.white); term.setTextColor(colors.black) end
- io.write(string.sub(block_chars[math.min(math.max(blocks_round-((i-1)*6),0),6)+1],1,1))
- --io.write(math.min(math.max(blocks-(i*6),0),5)+1)
- term.setBackgroundColor(colors.black); term.setTextColor(colors.white)
- end
- end self.render_x = tmpx
- --adjusting now
- if self.adjusting > 0 then
- self.adjusting = self.adjusting - self.speed
- self.amount = self.amount + self.speed
- if self.speed < self.adjusting/8 then
- self.speed = self.speed * 2
- else
- self.speed = math.max(self.speed/2,1)
- end
- elseif self.adjusting < 0 then
- self.adjusting = self.adjusting + self.speed
- self.amount = self.amount - self.speed
- if self.speed > self.adjusting/8 then
- self.speed = self.speed * 2
- else
- self.speed = math.max(self.speed/2,1)
- end
- end
- end
- function bar:move(x,y) self.render_x = tonumber(x); self.render_y = tonumber(y) end
- function bar:rename(str) self.name = tostring(str) end
- function bar:sub(x) self.adjusting = math.min(self.adjusting - tonumber(x),-self.amount) end
- function bar:add(x) self.adjusting = math.max(self.adjusting + tonumber(x),self.maximum-self.amount) end
- function bar:set(x) self.adjusting = math.min(math.max(tonumber(x) - self.amount, self.maximum-self.amount),-self.amount) end
- function bar:setmax(x) self.maximum = tonumber(x) end
- table.insert(bars,bar)
- end
- function updateBars()
- for i=1,#bars do bars[i]:update() end
- end
- function findBar(str)
- for i=1,#bars do
- if bars[i].name == tostring(str) then
- return i
- else
- print(string.format("Could Not Find Bar: \"%s\"",tostring(str)))
- end
- end
- end
- term.clear()
- --make_bar("Test1",false, 3,3, 50, 8,100, true)
- make_bar("Steam",false, 3,3,tank.getTankCapacity(),12,tank.getTankCapacity(), true)
- make_bar("Test2", true,10,3,255,12,256,false)
- local steam_bar = findBar("Steam") if not steam_bar then return end steam_bar = bars[steam_bar]
- while true do
- --term.clear()
- local tank_level = tank.getFilledPercentage()
- --bars[steam_bar]:set(denull(tank.getStored().amount))
- term.setCursorPos(1,1)
- term.clearLine() print(steam_bar.speed,steam_bar.amount,fixedRound(steam_bar.percentage),steam_bar.adjusting)
- term.clearLine() print(tank.getTankCapacity(),tank_level,reactor.getActive())
- if tank_level < 70 then
- reactor.setActive(True)
- elseif tank_level > 90 then
- reactor.setActive(false)
- end
- updateBars()
- os.sleep(0.01)
- end
Advertisement
Add Comment
Please, Sign In to add comment