-
Notifications
You must be signed in to change notification settings - Fork 0
/
console.lua
94 lines (74 loc) · 2.59 KB
/
console.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
local console = {}
local info
function Color( red, green, blue )
return { r = red, g = green, b = blue }
end
function console:init( xPos, yPos, xSize, ySize, bgColor, font )
if console.initiated then return end
console.initiated = true
console.info = {}
console.history = {}
console.lines = {}
console.info.xPos = xPos or 0
console.info.yPos = yPos or 0
console.info.xSize = xSize or love.graphics.getWidth()
console.info.ySize = ySize or love.graphics.getHeight()
console.info.bgColor = bgColor or Color( 0, 0, 0 )
console.info.font = font or love.graphics.newFont(12)
-- the number of lines the bottom displayed line is offset from the latest printed line
console.info.lineOffset = 0
console.info.maxLines = math.floor( ( console.info.ySize - 20 ) / 12 )
end
local function getOffset()
return console.info.lineOffset
end
local function refreshLines()
local offset = getOffset()
console.lines = {}
-- add 1 because otherwise maxLines + 1 are placed into lines
local firstLine = #console.history - console.info.maxLines - offset + 1
if firstLine < 1 then
firstLine = 1
end
for i = firstLine, #console.history - offset do
table.insert( console.lines, console.history[i] )
end
end
local function setOffset( offset )
if offset > #console.history - console.info.maxLines then
offset = #console.history - console.info.maxLines
end
if offset < 0 then
offset = 0
end
console.info.lineOffset = offset
refreshLines()
end
function console:scroll( amount )
if not console.initiated then return end
setOffset( getOffset() + amount )
end
function console:scrollToBottom()
if not console.initiated then return end
setOffset( 0 )
end
function console:print( text )
if not console.initiated then return end
local width, wrapped = console.info.font:getWrap( text, console.info.xSize - 20 ) -- wrap the text, using the console width - 20 to take the padding into account
for k, line in ipairs( wrapped ) do
table.insert( console.history, line )
end
console:scrollToBottom()
end
function console:draw()
if not console.initiated then return end
local bgColor = console.info.bgColor
love.graphics.setColor( bgColor.r, bgColor.g, bgColor.b )
love.graphics.rectangle( "fill", console.info.xPos, console.info.yPos, console.info.xSize, console.info.ySize )
love.graphics.setColor( 255, 255, 255 )
love.graphics.setFont( console.info.font )
for line, text in ipairs( console.lines ) do -- draw the lines
love.graphics.print( text, console.info.xPos + 10, console.info.yPos + 12 * ( line - 1 ) + 10 )
end
end
return console