Advertisement
Pirnogion

layermanager

Nov 24th, 2014
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.21 KB | None | 0 0
  1. ----------------------------
  2. -- Programm: LayerManager --
  3. -- Author:  JaggerDer     --
  4. -- Created: --.--.14      --
  5. ----------------------------
  6.  
  7. --Зпрегестрированные слои
  8. local tLayers = {}
  9.  
  10. --Зарагестрировать слой
  11. RegisterLayer = function(aloLayer)
  12.  if (type(aloLayer) ~= "table" or not aloLayer:GetParameters()) then
  13.   error("Error: expected LayerObj.")
  14.  end
  15.  
  16.  table.insert(tLayers, aloLayer)
  17.  return #tLayers
  18. end
  19.  
  20. --Удалить слой
  21. UnregisterLayer = function(anID)
  22.  if (type(anID) ~= "number") then
  23.   error("Error: expected number, got " .. type(anID) .. ".")
  24.  elseif (anID > #tLayers or anID < 1) then
  25.   error("ID out of range: [layers] > [id] > 0")
  26.  end
  27.  
  28.  table.remove(tLayers, anID)
  29. end
  30.  
  31. --Отобразить все слои на экране
  32. DrawLayers = function(aDevice)
  33.  for i, v in pairs(tLayers) do
  34.   local _, _lr = next(tLayers, i)
  35.   DrawLayer(v, _lr, aDevice)
  36.  end
  37. end
  38.  
  39. --Отобразить конкретный слой на экране
  40. DrawLayer = function(aloLayer, aloNextLayer, aDevice)
  41. local _nNextColor = 0
  42.  if (type(aloLayer) ~= "table" or not aloLayer:GetParameters()) then
  43.   error("Error: expected LayerObj.")
  44.  end
  45.  
  46.  local _, _nWidth, _nHeight, _nXs, _nYs, _bVis = aloLayer:GetParameters()
  47.  
  48.  if (bVis == false) then return end
  49.  
  50.  for y = 1, _nHeight, 1 do
  51.   for x = 1, _nWidth, 1 do
  52.    local _sText, _nTextColor, _nColor = aloLayer:GetPixel(x, y)
  53.    if (aloNextLayer ~= nil) then
  54.     _, _, _nNextColor = aloNextLayer:GetPixel(x, y)
  55.    end
  56.    if (_nColor > 0 and _nNextColor == 0) then
  57.     aDevice.setCursorPos(x + _nXs, y + _nYs)
  58.     aDevice.setTextColor(_nTextColor)
  59.     aDevice.setBackgroundColor(_nColor)
  60.     aDevice.write(_sText)
  61.    end
  62.   end
  63.  end
  64.  
  65. end
  66.  
  67. --Сдвиг слоя по z координате
  68. ShiftLayer = function(anID, asDir, anStep)
  69.  if (type(anID) ~= "number" or type(asDir) ~= "string" or type(anStep) ~= "number") then
  70.   error("Usage: <number> <string> <number>")
  71.  elseif ( (anID > #tLayers or anID < 1) or (asDir ~= "left" and asDir ~= "right") or ( (asDir == "right" and anID+anStep > #tLayers) or ( asDir == "left" and anID-anStep < 1) ) ) then
  72.   error("Arguments out of range: [layers] > [ID] > 0 ; shift direction only left or right; [steps]+[id] > [layers] and [steps]-[id] > 0")
  73.  end
  74.  
  75.  _loBf = tLayers[anID]
  76.  
  77.  if (asDir == "left") then
  78.   tLayers[anID] = tLayers[anID-anStep]
  79.   tLayers[anID-anStep] = _loBf
  80.  elseif (asDir == "right") then
  81.   tLayers[anID] = tLayers[anID+anStep]
  82.   tLayers[anID+anStep] = _loBf
  83.  end
  84. end
  85.  
  86. --Новое событие
  87. LayerClick = function(anX, anY)
  88.  if (type(anX) ~= "number" or type(anY) ~= "number") then
  89.   error("Usage: <number> <number>.")
  90.  end
  91.  
  92.  for i = #tLayers, 1, -1 do
  93.   local _sName, _, _, _nXs, _nXs = tLayers[i]:GetParameters()
  94.   local _sText, _nTextColor, _nColor = tLayers[i]:GetPixel(anX + _nXs, anY + _nYs)
  95.   if (_nColor > 0) then return _sName, _sText, _nTextColor, _nColor end
  96.  end
  97. end
  98.  
  99. --Дебаг
  100. Info = function()
  101.  term.setTextColor(colors.white)
  102.  term.setBackgroundColor(colors.black)
  103.  term.setCursorPos(1, 1)
  104.  term.clear()
  105.  
  106.  for i, v in pairs(tLayers) do
  107.   print("ID: ", i, ". Name: ", v:GetParameters(), ".")
  108.  end
  109. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement