View difference between Paste ID: z3p689g1 and FeTJXkU7
SHOW: | | - or go back to the newest paste.
1-
--v2.1
1+
--v4
2
local function update()
3-
  shell.run("delete","lg")
3+
  shell.run("delete","lgame")
4-
  shell.run("pastebin","get","sSF7NPYC","lg")
4+
  shell.run("pastebin","get","z3p689g1","lgame")
5
  os.reboot()
6
end
7-
local args = {...}
7+
-- function syscal = setmetatable({}, {__index = function(self,idx)
8
--   return function(...)
9
--     local retval  = table.pack(coroutine.yeild("syscall", idx, ...))
10
--     if retval[1] then return table.unpack(retval, 2, retval.n)
11
--     else error(retval[2],2) end
12
--   end
13
-- end, __newindex = function() end})
14
local args = {...}  
15-
  local bg = colors.black
15+
16-
  sprites = {}
16+
17
end
18
local tname = nil
19
function getVersion()
20
  return "5.1"
21
end
22-
    term.redirect(m)
22+
23
  sx,sy = nil
24
  buttons = {}
25
  tname = name
26
  pixels = {}
27
  local bg = colors.black 
28
  sprites = {}  
29
  inputs = {}
30
  oterm = term.current()
31
  if (name == "term") then
32
    sx,sy = term.getSize()
33
    local previous = term
34
  else
35
    m = peripheral.wrap(name)
36
    local previous = term.redirect(m)
37
    sx,sy = m.getSize()
38
  end
39
end
40
function createScene(x,y,w,h,visible)
41
  local window = window.create(term.current(), x, y, w,h,visible)
42
  local scene = {oterm=oterm,x=x,y=y,window = window, bg=colors.black,w=w,h=h,buttons = {}, pixels = {}, sprites = {}, inputs = {},
43
  drawText = function (self, x,y,color,colorb,text)
44
    term.setCursorPos(x,y)
45
    term.setTextColor(color)
46
    term.setBackgroundColor(colorb)
47
    term.write(text)  
48
  end,
49
  clearScreen = function ()
50
    term.clear()
51
  end,
52
  setBackgroundColor = function (color)
53
    term.setBackgroundColor(color)
54
  end,  
55
  setTextColor = function(color)
56
    term.setTextColor(color)
57
  end,
58
  drawBT = function(self,name,x,xe,y,ye,color,colorb,text)
59
    term.setBackgroundColor(colorb)
60
    term.setTextColor(color)
61
    for i=x,xe do
62
      for g=y,ye do
63
        term.setCursorPos(i,g)
64
        term.write(" ")
65
      end
66
    end
67
    textline = (y + ye) / 2
68
    textline = string.format("%.1f", textline)
69
    textline = tonumber(textline)
70
    lines = {}
71
    for word in string.gmatch(text,"[^\n]+") do
72
       table.insert(lines,word)
73
    end
74
    if (#lines > 1) then
75
      for w=1,#lines do
76
        term.setCursorPos(x,y+w)
77
        term.write(lines[w])
78
      end
79
    else
80
      term.setCursorPos(x,textline)
81
      term.write(text)
82
    end
83
    table.insert(self.buttons,name..";"..x..";"..xe..";"..y..";"..ye)  
84
  end,
85
  isButton = function(self,x,y)
86
    for i=1,#self.buttons do
87
      local parts = {}
88
      for word in string.gmatch(self.buttons[i],"[^;]+") do
89
        table.insert(parts,word)
90
      end
91
      name,bx,bxe,by,bye = parts[1],tonumber(parts[2]),tonumber(parts[3]),tonumber(parts[4]),tonumber(parts[5])
92
      if (bx-1 < x and x < bxe + 1 ) then
93
        if (by-1 < y and bye+1 > y) then
94
          return name
95
        end
96
      end
97
    end
98
    return self.buttons[1]
99
  end,
100
  fill  = function(self, x,x2,y,y2,color)
101
    term.setBackgroundColor(color)
102
    for i=x,x2 do
103
      for g=y,y2 do
104
        term.setCursorPos(i,g)
105
        self.pixels[x..y] = color
106
        term.write(" ")
107
      end
108
    end
109
  end,
110
  drawRect = function(self,x,x2,y,y2,color)
111
  term.setBackgroundColor(color)
112
  for i=x,x2 do
113
    term.setCursorPos(i,y)
114
    self.pixels[x..y] = color
115
    term.write(" ")
116
  end
117
  for i=y,y2 do
118
    term.setCursorPos(x2,i)
119
    self.pixels[x..y] = color
120
    term.write(" ")
121
  end
122
  paintutils.drawLine(x2,y2,x,y2,color)
123
  paintutils.drawLine(x,y2,x,y,color)
124
end,
125
  fillScreen  = function(self,color)
126
    term.setBackgroundColor(color)
127
    term.clear()
128
    self.pixels = {}
129
  end,
130
  drawImage  = function(x,y,name)
131
    image = paintutils.loadImage(name)
132
    paintutils.drawImage(image,x,y)
133
  end,
134
  getSize  = function(self)
135
    local sizet = {}
136
    sizet.x = self.w
137-
function getInput(x,y)
137+
    sizet.y = self.h
138
    return sizet
139
  end,
140
  drawInput  = function(self,name,x,x2,y,y2,limit)
141
    term.setBackgroundColor(colors.gray)
142
    term.setTextColor(colors.white)
143
    for i=x,x2 do
144
      for g=y,y2 do
145
        term.setCursorPos(i,g)
146
        term.write(" ")
147-
        local text = limitRead(limit)
147+
148
    end
149
    table.insert(self.inputs,name..";"..x..";"..x2..";"..y..";"..y2..";"..limit)
150
  end,
151
  isInput = function(self,x,y)
152
    for i=1,#self.inputs do
153
      local parts = {}
154
      for word in string.gmatch(self.inputs[i],"[^;]+") do
155
        table.insert(parts,word)
156
      end
157
      name,bx,bxe,by,bye = parts[1],tonumber(parts[2]),tonumber(parts[3]),tonumber(parts[4]),tonumber(parts[5])
158
      if (bx-1 < x and x < bxe + 1 ) then
159
        if (by-1 < y and bye+1 > y) then
160
          return name
161
        end 
162
      end
163
    end
164
    return false
165
  end,
166
  getInput  = function(self,x,y)
167
    for i=1,#self.inputs do
168
      local parts = {}
169
      for word in string.gmatch(self.inputs[i],"[^;]+") do
170
        table.insert(parts,word)
171
      end
172
      name,bx,bxe,by,bye,limit = parts[1],tonumber(parts[2]),tonumber(parts[3]),tonumber(parts[4]),tonumber(parts[5]),tonumber(parts[6])
173
      if (bx-1 < x and x < bxe + 1 ) then
174
        if (by-1 < y and bye+1 > y) then
175
          term.setCursorPos(bx,by)
176
          local text = limitRead(limit)
177
          return text
178
        end
179
      end
180
    end
181
    return false
182
  end,
183
  lggSetDefBG  = function(self,color)
184
    self.bg = color
185
  end,
186
  drawSprite  = function(self,name,x,y,iname)
187
    image = paintutils.loadImage(iname)
188
    paintutils.drawImage(image,x,y)
189
    table.insert(self.sprites,name..";"..x..";"..y..";"..iname)
190
  end,
191
  changeImage = function(self,name,iname)
192
    for h=1,#self.sprites do
193
      local parts = {}
194
      for word in string.gmatch(self.sprites[h],"[^;]+") do
195
        table.insert(parts,word)
196
      end
197
      if (parts[1] == name) then
198
        self.sprites[h] = parts[1]..";"..parts[2]..";"..parts[3]..";"..iname
199
      end
200
    end
201
  end,
202
  moveSprite = function(self,name,x,y,fill)
203
    for h=1,#self.sprites do
204
      local parts = {}
205
      term.setBackgroundColor(colors.black)
206
      for word in string.gmatch(self.sprites[h],"[^;]+") do
207
        table.insert(parts,word)
208
      end
209
      if (parts[1] == name) then
210
      local iname = nil
211
      local name,ox,oy,iname = parts[1],tonumber(parts[2]),tonumber(parts[3]),parts[4]
212
      image = paintutils.loadImage(iname)
213
      term.setCursorPos(10,1)
214
      term.setBackgroundColor(colors.black)
215
      if (fill) then
216
      for i=ox,ox+getWidth(image) do
217
        for g=oy,oy+getHeight(image) do
218
          if (pixels[i..g] ~= nil) then
219
            term.setCursorPos(i,g)
220
            term.setBackgroundColor(pixels[i..g])
221
            term.write(" ")
222
          else
223
            term.setCursorPos(i,g)
224
            term.setBackgroundColor(bg)
225
            term.write(" ")
226
          end
227
        end
228
      end
229
      end
230
      paintutils.drawImage(image,x,y)
231
      table.remove(self.sprites,h)
232
      table.insert(self.sprites,name..";"..x..";"..y..";"..iname)    
233
      else
234
      end
235
    end
236-
function limitRead(limX, rChar,color,colorb)
236+
    return false
237-
  		term.setBackgroundColor(colors.gray)
237+
  end,
238-
  		term.setTextColor(colors.white)
238+
  getSpriteColider = function(self,name)
239
    for h=1,#self.sprites do
240
      local parts = {}
241
      term.setBackgroundColor(colors.black)
242
      for word in string.gmatch(self.sprites[h],"[^;]+") do
243
        table.insert(parts,word)
244
      end
245
      if (parts[1] == name) then
246
      local iname = nil
247
      local name,ox,oy,iname = parts[1],tonumber(parts[2]),tonumber(parts[3]),parts[4]
248
      image = paintutils.loadImage(iname)
249
      local sizet = {}
250
      sizet.x = ox
251
      sizet.y = oy
252
      sizet.x2 = ox + getWidth(image)
253
      sizet.y2 = oy + getHeight(image)
254
      return sizet
255
      else
256
      end
257
    end
258
    return false
259
  end,
260
  isColiding  = function(self,name, name2)
261
    for h=1,#self.sprites do
262
      local parts = {}
263
      term.setBackgroundColor(colors.black)
264
      for word in string.gmatch(self.sprites[h],"[^;]+") do
265
        table.insert(parts,word)
266
      end
267
      if (parts[1] == name) then
268
        local iname = nil
269
        local nameo,ox,oy,iname = parts[1],tonumber(parts[2]),tonumber(parts[3]),parts[4]
270-
                elseif event == "key" and p1 == 259 then --backspace
270+
        image = paintutils.loadImage(iname)
271
        local sizet = {}
272
        sizet.x = ox
273
        sizet.y = oy
274
        sizet.x2 = ox + getWidth(image)
275
        sizet.y2 = oy + getHeight(image)
276
        local allCord = {}
277
        for a=sizet.x,sizet.x2 do
278
          for b=sizet.y,sizet.y2 do
279
            table.insert(allCord,a..";"..b)
280
          end
281
        end
282
        for g=1,#self.sprites do
283
          local parts2 = {}
284
          for word2 in string.gmatch(self.sprites[g],"[^;]+") do
285
            table.insert(parts2,word2)
286
          end
287
          local nameo2,ox2,oy2,iname2 = parts2[1],tonumber(parts2[2]),tonumber(parts2[3]),parts2[4]
288-
                elseif event == "key" and p1 == 257 then --enter
288+
          image2 = paintutils.loadImage(iname2)
289
          ox22 = ox2 + getWidth(image2)
290
          oy22 = oy2 + getHeight(image2)
291
          if (nameo2 == name2) then
292
            local allCord2 = {}
293
            for a=ox2,ox22 do
294
              for b=oy2,oy22 do
295
               table.insert(allCord2,a..";"..b)
296
            end
297
              end
298
              for i=1,#allCord do
299
                for g=1,#allCord2 do
300
                  if (allCord[i] == allCord2[g]) then
301
                     return true
302
                  end
303
                end
304
              end
305
          end
306
      end
307
      end
308
    end
309
    return false
310
  end,
311
  draw = function(self)
312
    self.window.setVisible(true)
313
    self.window.restoreCursor()
314
    self.window.redraw()
315
    term.redirect(self.window)
316
  end,
317
  focus = function(self)
318
    self.window.restoreCursor()
319
    term.redirect(self.window)
320
  end,
321
  unfocus = function(self)
322
    if (tname == "term") then
323
      term.redirect(self.oterm)
324
    else
325
      term.redirect(m)
326
    end
327
  end,
328
  hide = function(self)
329
    self.window.setVisible(false)
330
    if (tname == "term") then
331
      term.redirect(self.oterm)
332
    else
333
      term.redirect(m)
334
    end
335
    paintutils.drawFilledBox(self.x, self.y, self.w, self.h, self.bg)
336
   
337
  end,
338
  getPos = function()
339
    return self.window.getPosition()
340
  end,
341
  rePos  = function(self,x,y,h2,w2)
342
    if (h2 and w2) then
343
      self.window.reposition(x,y,h2,w2)
344
    else
345
      self.window.reposition(x,y)
346-
end
346+
347
  end
348
  }
349
  if (visible) then
350
    term.redirect(window)
351
  end
352
  return scene
353
end
354
function exit()
355
  term.native()
356
end
357
function drawText(x,y,color,colorb,text)
358
  term.setCursorPos(x,y)
359
  term.setTextColor(color)
360
  term.setBackgroundColor(colorb)
361
  term.write(text)
362
end
363
function clearScreen()
364
  term.clear()
365
end
366
function setBackgroundColor(color)
367
  term.setBackgroundColor(color)
368
end
369
function setTextColor(color)
370
  term.setTextColor(color)
371
end
372
function drawBT(name,x,xe,y,ye,color,colorb,text)
373
  term.setBackgroundColor(colorb)
374
  term.setTextColor(color)
375
  for i=x,xe do
376
    for g=y,ye do
377
      term.setCursorPos(i,g)
378
      term.write(" ")
379
    end
380
  end
381
  textline = (y + ye) / 2
382
  textline = string.format("%.1f", textline)
383
  textline = tonumber(textline)
384
  lines = {}
385
  for word in string.gmatch(text,"[^\n]+") do
386
     table.insert(lines,word)
387
  end
388
  if (#lines > 1) then
389
    for w=1,#lines do
390
      term.setCursorPos(x,y+w)
391
      term.write(lines[w])
392
    end
393
  else
394
    term.setCursorPos(x,textline)
395
    term.write(text)
396
  end
397
  table.insert(buttons,name..";"..x..";"..xe..";"..y..";"..ye)  
398
end
399
function isButton(x,y)
400
  for i=1,#buttons do
401
    local parts = {}
402
    for word in string.gmatch(buttons[i],"[^;]+") do
403
      table.insert(parts,word)
404
    end
405
    name,bx,bxe,by,bye = parts[1],tonumber(parts[2]),tonumber(parts[3]),tonumber(parts[4]),tonumber(parts[5])
406
    if (bx-1 < x and x < bxe + 1 ) then
407
      if (by-1 < y and bye+1 > y) then
408
        return name
409
      end
410
    end
411
  end
412
  return false
413
end
414
function clearBTNS()
415
  buttons = {}
416
end
417
function fill(x,x2,y,y2,color)
418
  term.setBackgroundColor(color)
419
  for i=x,x2 do
420
    for g=y,y2 do
421
      term.setCursorPos(i,g)
422
      pixels[x..y] = color
423
      term.write(" ")
424
    end
425
  end
426
end
427
function drawRect(x,x2,y,y2,color)
428
  term.setBackgroundColor(color)
429
  for i=x,x2 do
430
    term.setCursorPos(i,y)
431
    pixels[x..y] = color
432
    term.write(" ")
433
  end
434
  for i=y,y2 do
435
    term.setCursorPos(x2,i)
436
    pixels[x..y] = color
437
    term.write(" ")
438
  end
439
  paintutils.drawLine(x2,y2,x,y2,color)
440
  paintutils.drawLine(x,y2,x,y,color)
441
end
442
function fillScreen(color)
443
  term.setBackgroundColor(color)
444
  term.clear()
445
  pixels = {}
446
end
447
function drawImage(x,y,name)
448
  image = paintutils.loadImage(name)
449
  paintutils.drawImage(image,x,y)
450
end
451
function getSize()
452
  local sizet = {}
453
  sizet.x = sx
454
  sizet.y = sy
455
  return sizet
456
end
457
function drawInput(name,x,x2,y,y2,limit)
458
  term.setBackgroundColor(colors.gray)
459
  term.setTextColor(colors.white)
460
  for i=x,x2 do
461
    for g=y,y2 do
462
      term.setCursorPos(i,g)
463
      term.write(" ")
464
    end
465
  end
466
  table.insert(inputs,name..";"..x..";"..x2..";"..y..";"..y2..";"..limit)
467
end
468
function isInput(x,y)
469
  for i=1,#inputs do
470
    local parts = {}
471
    for word in string.gmatch(inputs[i],"[^;]+") do
472
      table.insert(parts,word)
473
    end
474
    name,bx,bxe,by,bye = parts[1],tonumber(parts[2]),tonumber(parts[3]),tonumber(parts[4]),tonumber(parts[5])
475
    if (bx-1 < x and x < bxe + 1 ) then
476
      if (by-1 < y and bye+1 > y) then
477
        return name
478
      end 
479
    end
480
  end
481
  return false
482
end	
483
function getInput(x,y,safe)
484
  for i=1,#inputs do
485
    local parts = {}
486
    for word in string.gmatch(inputs[i],"[^;]+") do
487
      table.insert(parts,word)
488
    end
489
    name,bx,bxe,by,bye,limit = parts[1],tonumber(parts[2]),tonumber(parts[3]),tonumber(parts[4]),tonumber(parts[5]),tonumber(parts[6])
490
    if (bx-1 < x and x < bxe + 1 ) then
491
      if (by-1 < y and bye+1 > y) then
492
        term.setCursorPos(bx,by)
493
        local text = limitRead(limit, safe)
494
        return text
495
      end
496
    end
497
  end
498
  return false
499
end
500
function lggSetDefBG(color)
501
  bg = color
502
end
503
function drawSprite(name,x,y,iname)
504
  image = paintutils.loadImage(iname)
505
  paintutils.drawImage(image,x,y)
506
  table.insert(sprites,name..";"..x..";"..y..";"..iname)
507
end
508
function moveSprite(name,x,y)
509
  for h=1,#sprites do
510
    local parts = {}
511
    term.setBackgroundColor(colors.black)
512
    for word in string.gmatch(sprites[h],"[^;]+") do
513
      table.insert(parts,word)
514
    end
515
    if (parts[1] == name) then
516
    local iname = nil
517
    local name,ox,oy,iname = parts[1],tonumber(parts[2]),tonumber(parts[3]),parts[4]
518
    image = paintutils.loadImage(iname)
519
    term.setCursorPos(10,1)
520
    term.setBackgroundColor(colors.black)
521
    for i=ox,ox+getWidth(image) do
522
      for g=oy,oy+getHeight(image) do
523
        if (pixels[i..g] ~= nil) then
524
          term.setCursorPos(i,g)
525
          term.setBackgroundColor(pixels[i..g])
526
          term.write(" ")
527
        else
528
          term.setCursorPos(i,g)
529
          term.setBackgroundColor(bg)
530
          term.write(" ")
531
        end
532
      end
533
    end
534
    paintutils.drawImage(image,x,y)
535
    table.remove(sprites,h)
536
    table.insert(sprites,name..";"..x..";"..y..";"..iname)    
537
    else
538
    end
539
  end
540
  return false
541
end
542
function getSpriteColider(name)
543
  for h=1,#sprites do
544
    local parts = {}
545
    term.setBackgroundColor(colors.black)
546
    for word in string.gmatch(sprites[h],"[^;]+") do
547
      table.insert(parts,word)
548
    end
549
    if (parts[1] == name) then
550
    local iname = nil
551
    local name,ox,oy,iname = parts[1],tonumber(parts[2]),tonumber(parts[3]),parts[4]
552
    image = paintutils.loadImage(iname)
553
    local sizet = {}
554
    sizet.x = ox
555
    sizet.y = oy
556
    sizet.x2 = ox + getWidth(image)
557
    sizet.y2 = oy + getHeight(image)
558
    return sizet
559
    else
560
    end
561
  end
562
  return false
563
end
564
function isColiding(name, name2)
565
  for h=1,#sprites do
566
    local parts = {}
567
    term.setBackgroundColor(colors.black)
568
    for word in string.gmatch(sprites[h],"[^;]+") do
569
      table.insert(parts,word)
570
    end
571
    if (parts[1] == name) then
572
      local iname = nil
573
      local nameo,ox,oy,iname = parts[1],tonumber(parts[2]),tonumber(parts[3]),parts[4]
574
      image = paintutils.loadImage(iname)
575
      local sizet = {}
576
      sizet.x = ox
577
      sizet.y = oy
578
      sizet.x2 = ox + getWidth(image)
579
      sizet.y2 = oy + getHeight(image)
580
      local allCord = {}
581
      for a=sizet.x,sizet.x2 do
582
        for b=sizet.y,sizet.y2 do
583
          table.insert(allCord,a..";"..b)
584
        end
585
      end
586
      for g=1,#sprites do
587
        local parts2 = {}
588
        for word2 in string.gmatch(sprites[g],"[^;]+") do
589
          table.insert(parts2,word2)
590
        end
591
        local nameo2,ox2,oy2,iname2 = parts2[1],tonumber(parts2[2]),tonumber(parts2[3]),parts2[4]
592
        image2 = paintutils.loadImage(iname2)
593
        ox22 = ox2 + getWidth(image2)
594
        oy22 = oy2 + getHeight(image2)
595
        if (nameo2 == name2) then
596
      		local allCord2 = {}
597
      		for a=ox2,ox22 do
598
        		for b=oy2,oy22 do
599
         		table.insert(allCord2,a..";"..b)
600
        	end
601
            end
602
            for i=1,#allCord do
603
              for g=1,#allCord2 do
604
                if (allCord[i] == allCord2[g]) then
605
                   return true
606
                end
607
              end
608
            end
609
        end
610
    end
611
    end
612
  end
613
  return false
614
end
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
-- FUNC
634
function limitRead(limX, safe, rChar)
635
        term.setBackgroundColor(colors.gray)
636
        term.setTextColor(colors.white)
637
        term.setCursorBlink(true)
638
        local origX, origY = term.getCursorPos()
639
        local returnString = ""
640
        while true do
641
                local xPos, yPos = term.getCursorPos()
642
                local event, p1, p2 = os.pullEvent()
643
                if event == "char" then
644
                        if safe and p1 == "-" or safe and p1 == "." or safe and p1 == "," then
645
                        else
646
                        returnString = returnString..p1
647
                        if not rChar then
648
                                if not limX then
649
                                        write(p1)
650
                                else
651
                                        if string.len(returnString) >= limX then
652
                                                term.setCursorPos(origX, origY)
653
                                                write(string.sub(returnString, (string.len(returnString)-limX)+1))
654
                                        elseif string.len(returnString) < limX then
655
                                                write(p1)
656
                                        end
657
                                end
658
                        else
659
                                if not limX then
660
                                        write(rChar)
661
                                else
662
                                        if string.len(returnString) >= limX then
663
                                                term.setCursorPos(origX, origY)
664
                                                write(string.rep(rChar, limX))
665
                                        elseif string.len(returnString) < limX then
666
                                                write(rChar)
667
                                        end
668
                                end
669
                        end
670
                end
671
                elseif event == "key" and p1 == keys.backspace and string.len(returnString) > 0 then --backspace
672
                        returnString = string.sub(returnString, 1, (string.len(returnString))-1)
673
                        term.setCursorPos(xPos-1,yPos)
674
                        write(" ")
675
                        term.setCursorPos(origX, origY)
676
                        if string.len(returnString) >= limX then
677
                                if not rChar then
678
                                        write(string.sub(returnString, (string.len(returnString)-limX)+1))
679
                                else
680
                                        write(string.rep(rChar,limX))
681
                                end
682
                        else
683
                                if not rChar then
684
                                        write(returnString)
685
                                else
686
                                        write(string.rep(rChar, string.len(returnString)))
687
                                end
688
                        end
689
                elseif event == "key" and p1 == keys.enter then --enter
690
                        break
691
                end
692
        end
693
        term.setCursorBlink(false)
694
        return returnString
695
end
696
function getHeight( image )
697
  --# init the image start and end variables, these are what track where the start and end are
698
  local imgStart = #image --# we need to start at the end so we can apply math.min
699
  local imgEnd = 0 --# we need to start at the start so we can apply math.max
700
  --# loop through the table
701
  for index,imageLine in ipairs(image) do
702
        --# create a variable to hold if the line has a pixel
703
        local isLine = false
704
        --# loop through the pixels in the line
705
        for i,pixel in ipairs(imageLine) do
706
          --# if the pixel is drawable
707
          if pixel ~= 0 then
708
                --# record that there is a pixel, and exit the loop, no need to check anymore, we know there is at least 1
709
                isLine = true
710
                break
711
          end
712
        end
713
        --# if the line has pixels, check if its the start or end
714
        if isLine then
715
          imgStart = math.min(imgStart,index)
716
          imgEnd = math.max(imgEnd,index)
717
        end
718
  end
719
  --# return the height of the image, which is the end plus the start, plus 1 because tables start at index 1 not 0
720
  return imgEnd - imgStart + 1
721
end
722
function getWidth(img)
723
  --# the max width
724
  local maxWidth = 0
725
  --# loop through the image
726
  for i,line in pairs(img) do
727
        --# the variable to hold where the line starts
728
        local lineStart = #line --# start it at the end so we can apply math.min
729
        --# the variable to hold where the line ends
730
        local lineEnd = 0 --# start at the start so we can apply math.max
731
        --# loop the line
732
        for index,v in pairs(line) do
733
          --# if its a pixel
734
          if v ~= 0 then
735
                --# check if its the start or the end of the line
736
                lineStart = math.min(lineStart,index)
737
                lineEnd = math.max(lineEnd,index)
738
          end
739
        end
740
        --# the length of the line is the end minus the start positions, +1 because tables start at index 1 not 0
741
        local length = lineEnd - lineStart + 1
742
        --# check if its the max length
743
        maxWidth = math.max(maxWidth, length)
744
  end
745
  --# return the max length
746
  return maxWidth
747
end
748
return {getVersion = getVersion, getSize = getSize, fill = fill, fillScreen = fillScreen, createScene = createScene, setup = setup, exit = exit, drawBT = drawBT, drawText = drawText, drawInput = drawInput, drawSprite = drawSprite, drawImage = drawImage, setBackgroundColor = setBackgroundColor, setTextColor = setTextColor, clear = clear, isButton = isButton, isInput = isInput, moveSprite = moveSprite, isColiding = isColiding, lggSetDefBG = lggSetDefBG, getSpriteColider = getSpriteColider, clearBTNS = clearBTNS, getInput = getInput}