View difference between Paste ID: YcjegNK3 and R0grpP2n
SHOW: | | - or go back to the newest paste.
1-
function wrapMon()
1+
-- This program is meant to give a variety of options to illustrate using the computercraft screen.
2-
    for i, v in ipairs(peripheral.getNames()) do
2+
3-
        if peripheral.getType(v) == 'monitor' then
3+
4-
            monitor = peripheral.wrap(v)
4+
5-
            return monitor
5+
6
7
function wrapMon() --if there is a monitor, wraps it and returns true, otherwise returns the termAPI and returns false
8
    if peripheral.find('monitor') then
9
        monitor = peripheral.find('monitor')
10-
wrapMon()
10+
        isMonitor = true
11
    else
12
        monitor = _G.term
13-
function middle()
13+
        isMonitor = false
14
    end
15
    return monitor, isMonitor
16
end  
17
18
function middle() --returns the middle of the screen in coordinates x, y.
19
    width, height = monitor.getSize()
20-
function draw(color)
20+
21
    y = math.floor(height/2)
22-
    monitor.write(' ')
22+
23
end
24
25
function drawBox(x1, y1, x2, y2, color, char) -- draws a box given the coordinates of two points 
26-
function drawDot(x, y, color)
26+
    local colorTable = {}
27
    local xinc, yinc = 1, 1
28-
    draw(color)
28+
    if x1 < x2 then
29
        xinc = 1
30
    else
31-
function drawLine(x1, y1, x2, y2, color)
31+
32-
    x = x2 - x1
32+
33-
    y = y2 - y1
33+
    if y1 < y2 then
34
       	yinc = 1
35
    else
36
       	yinc = -1
37
   	end
38
    for i = x1, x2, xinc do
39
       	colorTable[i] = {}
40
        for k = y1, y2, yinc do
41
           	colorTable[i][k] = color
42
            drawDot(i, k, color, char)
43-
    end -- if x1 > x2, 
43+
44-
    if math.abs(y/x)>1 then --if the gradient is more than 1
44+
45
    return colorTable
46-
           drawDot(math.floor((x1 + (x/y)*(i-y1)+0.5)), i, color)
46+
47
48-
    elseif math.abs(y/x)<1 then --if the gradient is less than 1
48+
function drawDot(x, y, color, char)
49-
        for i = x1, x2, xinc do --go along
49+
    if not char then
50-
            drawDot(i, math.floor((y1+(y/x)*(i-x1))+0.5), color)
50+
        char = ' '
51
    end
52
    monitor.setCursorPos(x, y)
53
    monitor.setBackgroundColor(color)
54-
            drawDot(i, y1+(i-x1), color)
54+
    monitor.write(char)
55
    monitor.setBackgroundColor(colors.black)
56
    return x, y, color, char
57
end
58
59
function drawLine(x1, y1, x2, y2, color) --returns table with x and y position of each pixel with the color, ie table[x][y]
60
    local colorTable={}
61
    local x = x2 - x1
62
    local y = y2 - y1
63
    if x < 0 then
64
        xinc = -1
65
    else 
66
        xinc = 1
67
    end
68
    if y < 0 then
69
        yinc = -1
70
    else
71
        yinc = 1
72
    end
73
    if math.abs(y/x)>1 then --if the gradient is more than 1, goes through the y values and finds the corresponding x value through a mathematical line approximation equation. This avoids making thick lines by forcing only one pixel per row, essentially giving 1 pixel thick lines.
74
        for i = x1, x2, xinc do
75
            colorTable[i] = {}
76
        end
77
        for i = y1, y2, yinc do
78
            local xpos = math.floor((x1 + (x/y)*(i-y1)+0.5))
79
            drawDot(xpos, i, color)
80
            colorTable[xpos][i] = color
81
        end
82
    elseif math.abs(y/x)<1 then --Works in a similr principle except forces one pixel per column
83
        for i = x1, x2, xinc do 
84
            local ypos = math.floor((y1+(y/x)*(i-x1))+0.5)
85
            drawDot(i, ypos, color)
86
            colorTable[i] = {}
87
            colorTable[i][ypos] = color
88
        end
89
    else
90
        for i = x1, x2, xinc do --in the case the line goes down 45 degrees the math is much simpler
91
            local ypos = y1+(y/x)*(i-x1)
92
            drawDot(i, ypos, color)
93
            colorTable[i] = {}
94
            colorTable[i][ypos] = color
95
        end
96
    end
97
    return colorTable
98
end