diff --git a/displayword.lua b/displayword.lua index 866ee99..ce05d9d 100644 --- a/displayword.lua +++ b/displayword.lua @@ -58,6 +58,23 @@ end local data={} +-- @fn swapLine +-- @param lineOffset offset (starting at 1) where the line is located to be swapped +-- works on the rgbBuffer, defined in data struct +-- @return false on errors, else true +local swapLine = function(lineOffset) + if (data.rgbBuffer == nil) then + return false + end + + for i = 0,10 do + local tmpColor=data.rgbBuffer:get(lineOffset+i) + data.rgbBuffer:set(lineIdx+i, data.rgbBuffer:get(lineOffset+10-i)) + data.rgbBuffer:set(lineIdx+10-i, tmpColor) + end + return true +end + -- @fn generateLEDs -- Module displaying of the words -- @param rgbBuffer OutputBuffer with 114 LEDs @@ -134,9 +151,11 @@ local generateLEDs = function(rgbBuffer, words, colorBg, colorFg, colorM1, color -- Set the foreground color as the default color local buf=data.colorFg + local lineIdx=1 -- line 1---------------------------------------------- + lineIdx=11 if (rowbgColor[1] ~= nil) then - for i=1,11, 1 do data.rgbBuffer:set(i, rowbgColor[1]) end + for i=lineIdx,11, 1 do data.rgbBuffer:set(i, rowbgColor[1]) end end if (words.it==1) then drawLEDs(data,2) -- ES @@ -158,8 +177,9 @@ if (words.m5== 1) then data.dC=data.dC+4 end -- line 2-- even row (so inverted) -------------------- + lineIdx=12 if (rowbgColor[2] ~= nil) then - for i=12,23, 1 do data.rgbBuffer:set(i, rowbgColor[2]) end + for i=lineIdx,(lineIdx+11), 1 do data.rgbBuffer:set(i, rowbgColor[2]) end end if (words.m10 == 1) then drawLEDs(data,4) -- ZEHN @@ -171,10 +191,12 @@ if (words.m5== 1) then else data.dC=data.dC+7 end - + -- swap line + swapLine(lineIdx) -- line3---------------------------------------------- + lineIdx=23 if (rowbgColor[3] ~= nil) then - for i=23,34, 1 do data.rgbBuffer:set(i, rowbgColor[3]) end + for i=lineIdx,lineIdx+11, 1 do data.rgbBuffer:set(i, rowbgColor[3]) end end if (words.h3q == 1) then line= drawLEDs(data,11) -- DREIVIERTEL @@ -185,8 +207,9 @@ if (words.m5== 1) then data.dC=data.dC+11 end --line 4-------- even row (so inverted) ------------- - if (rowbgColor[4] ~= nil) then - for i=34,45, 1 do data.rgbBuffer:set(i, rowbgColor[4]) end + lineIdx=34 + if (rowbgColor[4] ~= nil) then + for i=lineIdx,lineIdx+11, 1 do data.rgbBuffer:set(i, rowbgColor[4]) end end if (words.ha == 1) then data.dC=data.dC+2 -- TG @@ -201,14 +224,12 @@ if (words.m5== 1) then data.dC=data.dC+5 end if (invertRows ~= true) then - for i = 0,10 do - -- TODO swap line in buffer - buf = buf .. line:sub((11-i)*3-2,(11-i)*3) - end + swapLine(lineIdx) end ------------------------------------------------ - if (rowbgColor[5] ~= nil) then - for i=45,56, 1 do data.rgbBuffer:set(i, rowbgColor[5]) end + lineIdx=45 + if (rowbgColor[5] ~= nil) then + for i=lineIdx,lineIdx+11, 1 do data.rgbBuffer:set(i, rowbgColor[5]) end end if (words.half == 1) then drawLEDs(data,4) -- HALB @@ -223,14 +244,12 @@ if (words.m5== 1) then data.dC=data.dC+6 end if (invertRows == true) then - for i = 0,10 do - --TODO swap line in the buffer - buf = buf .. line:sub((11-i)*3-2,(11-i)*3) - end + swapLine(lineIdx) end ------------even row (so inverted) --------------------- - if (rowbgColor[6] ~= nil) then - for i=56,67, 1 do data.rgbBuffer:set(i, rowbgColor[6]) end + lineIdx=56 + if (rowbgColor[6] ~= nil) then + for i=lineIdx,lineIdx+11, 1 do data.rgbBuffer:set(i, rowbgColor[6]) end end if (words.h7 == 1) then data.dC=data.dC+5 @@ -250,14 +269,12 @@ if (words.m5== 1) then data.dC=data.dC+7 end if (invertRows ~= true) then - --TODO invert buffer - for i = 0,10 do - buf = buf .. line:sub((11-i)*3-2,(11-i)*3) - end + swapLine(lineIdx) end ------------------------------------------------ - if (rowbgColor[7] ~= nil) then - for i=67,78, 1 do data.rgbBuffer:set(i, rowbgColor[7]) end + lineIdx=67 + if (rowbgColor[7] ~= nil) then + for i=lineIdx,lineIdx+11, 1 do data.rgbBuffer:set(i, rowbgColor[7]) end end if (words.h3 == 1) then data.dC=data.dC+1 @@ -270,8 +287,9 @@ if (words.m5== 1) then data.dC=data.dC+11 end ------------even row (so inverted) --------------------- - if (rowbgColor[8] ~= nil) then - for i=78,89, 1 do data.rgbBuffer:set(i, rowbgColor[8]) end + lineIdx=78 + if (rowbgColor[8] ~= nil) then + for i=lineIdx,lineIdx+11, 1 do data.rgbBuffer:set(i, rowbgColor[8]) end end if (words.h4 == 1) then data.dC=data.dC+7 @@ -286,11 +304,11 @@ if (words.m5== 1) then else data.dC=data.dC+11 end - - + swapLine(lineIdx) ------------------------------------------------ - if (rowbgColor[9] ~= nil) then - for i=89,99, 1 do data.rgbBuffer:set(i, rowbgColor[9]) end + lineIdx=89 + if (rowbgColor[9] ~= nil) then + for i=lineIdx,lineIdx+11, 1 do data.rgbBuffer:set(i, rowbgColor[9]) end end if (words.h8 == 1) then data.dC=data.dC+1 @@ -305,8 +323,9 @@ if (words.m5== 1) then end ------------even row (so inverted) --------------------- - if (rowbgColor[10] ~= nil) then - for i=100,110, 1 do data.rgbBuffer:set(i, rowbgColor[10]) end + lineIdx=100 + if (rowbgColor[10] ~= nil) then + for i=lineIdx,lineIdx+11, 1 do data.rgbBuffer:set(i, rowbgColor[10]) end end if (words.h6 == 1) then data.dC=data.dC+1 @@ -320,7 +339,7 @@ if (words.m5== 1) then else data.dC=data.dC+3 end - + swapLine(lineIdx) ------ Minutes ----------- if (words.m1 == 1) then data.rgbBuffer:set(111, colorFg)