View difference between Paste ID: nkk2r0fk and edgAFD1y
SHOW: | | - or go back to the newest paste.
1
--Setup
2
os.loadAPI("touchpoint") --Touchpoinz API by Lyqyd
3
mon = peripheral.find("monitor")
4-
mat = peripheral.find("peripheralProxy:inductionMatrix")
4+
mat = peripheral.find("inductionPort")
5
6
--Round Function
7
function round(float)
8
	local int, part = math.modf(float)
9
	if float == math.abs(float) and part >= .5 then return int+1
10
	elseif part <= -.5 then return int-1
11
	end
12
	return int
13
end
14
15
--Round with 2 Decimals Function
16
function roundD(exact, quantum)
17
	local quant,frac = math.modf(exact/quantum)
18
	return quantum * (quant + (frac > 0.5 and 1 or 0))
19
end
20
21
--Conversion Function
22
function conversion(exact, text)
23
    local units = {"", "K", "M", "G", "T", "P", "E", "Z", "Y"}
24
    local pot = 1
25
    local absExact = math.abs(exact)
26
    while absExact >= (1000^pot) do
27
        pot = pot + 1
28
    end
29
    local out = tostring(roundD(exact / (1000^(pot - 1)), 0.1))
30
    if text then
31
        out = out .. " " .. units[pot]
32
    end
33
    return out
34
end
35
36
--Draw Function
37
function draw(xmin, xmax, ymin, ymax, c)
38
    mon.setBackgroundColor(c)
39
    mon.setCursorPos(xmin, ymin)
40
    if xmax ~= 1 then
41
        for i = 1, xmax, 1 do
42
            mon.write(" ")
43
            mon.setCursorPos(xmin+i, ymin)
44
        end
45
    end
46
    if ymax ~= 1 then
47
        for k = 1, ymax, 1 do
48
            mon.write(" ")
49
            mon.setCursorPos(xmin, ymin+k)
50
        end
51
    end
52
    mon.setBackgroundColor(32768)
53
end
54
55
--DrawBar Function
56
function drawBar(xmin, xmax, y, r, c)
57
	for i=1, r, 1 do	
58
		draw(xmin, xmax, y+i-1, 1, c)
59
	end
60
end
61
62
--DrawDiagrams Function
63
function drawDiagrams()
64
	local energy = round((mat.getEnergyFilledPercentage())*29)
65
	local input = round((mat.getLastInput()/mat.getTransferCap())*29)
66
	local output = round((mat.getLastOutput()/mat.getTransferCap())*29)
67
	drawBar(4, energy, 4, 3, 8)
68
	drawBar(4, input, 11, 2, 32)
69
	drawBar(4, output, 15, 2, 32)
70
end
71
72
--Draw Visuals Function
73
function drawVisuals()
74
	--Frame Induction Matrix
75
	draw(2, 2, 2, 1, 128)
76
	draw(22, 13, 2, 1, 128)
77
	draw(2, 1, 2, 17, 128)
78
	draw(2, 33, 18, 1, 128)
79
	draw(34, 1, 2, 17, 128)
80
    draw(2, 33, 8, 1, 128)
81
	mon.setCursorPos(5,2)
82
	mon.write("Induction Matrix")
83
84
	--Frame SPS Control
85
	draw(36, 2, 2, 1, 128)
86
    draw(36, 1, 2, 9, 128)
87
	draw(49, 1, 2, 9, 128)
88
	draw(36, 13, 10, 1, 128)
89
	draw(43, 6, 2, 1, 128)
90
	mon.setCursorPos(39,2)
91
	mon.write("SPS")
92
93
	--Frame Stats
94
	draw(36, 1, 12, 7, 128)
95
	draw(49, 1, 12, 7, 128)
96
	draw(36, 13, 18, 1, 128)
97
	draw(36, 2, 12, 1, 128)
98
	draw(45, 4, 12, 1, 128)
99
	mon.setCursorPos(39,12)
100
	mon.write("Stats")
101
    
102
    --energyBar
103
    drawBar(4, 29, 4, 3, 256)
104
105
	--inputBar
106
	drawBar(4, 29, 11, 2, 256)
107
	mon.setCursorPos(4,10)
108
	mon.write("Input:")
109
110
	--outputBar
111
	drawBar(4, 29, 15, 2, 256)
112
	mon.setCursorPos(4,14)
113
	mon.write("Output:")
114
end
115
116
--DrawStats Function
117
function drawStats()
118
	local cells = mat.getInstalledCells()
119
	local prov = mat.getInstalledProviders()
120
	local maxEnergy = conversion(mat.getMaxEnergy(), false)
121
	local energyStored = conversion(mat.getEnergy(), true)
122
	local energyInput = conversion(mat.getLastInput(), true)
123
	local energyOutput = conversion(mat.getLastOutput(), true)
124
	mon.setCursorPos(38,14)
125
	mon.write("Cells: "..cells)
126
	mon.setCursorPos(38,15)
127
	mon.write("Prov: "..prov)
128
	mon.setCursorPos(38,16)
129
	mon.write("Cap: "..maxEnergy)
130
	mon.setCursorPos(23,2)
131
	mon.write(" "..energyStored.."RF ")
132
	mon.setCursorPos(10,10)
133
	mon.write(" "..energyInput.."RF/t ")
134
	mon.setCursorPos(11,14)
135
	mon.write(" "..energyOutput.."RF/t ")
136
end
137
138
--Buttons
139
local t = touchpoint.new("top")
140
 
141
t:add("Inactive", nil, 38, 4, 47, 8, colors.red, colors.lime)
142
143
--Draw
144
t:draw()
145
drawVisuals()
146
drawDiagrams()
147
drawStats()
148
149
--Timer
150
local lastTime = 6
151
152
--Loop
153
while true do
154
        local event, p1 = t:handleEvents(os.pullEvent())
155
        if event == "button_click" then
156
                t:toggleButton(p1)
157
				if p1 == "Inactive" then
158
					t:rename("Inactive", "Active")
159
					rs.setOutput("left", true)
160
				elseif p1 == "Active" then
161
					t:rename("Active", "Inactive")
162
					rs.setOutput("left",false)
163
				end
164
        		drawVisuals()
165
				drawDiagrams()
166
				drawStats()
167
        end
168
		if os.clock() - lastTime >= 5 then
169
			mon.clear()
170
			t:draw()
171
			drawVisuals()
172
			drawDiagrams()
173
			drawStats()
174
			lastTime = os.clock()
175
		end
176
end