daily pastebin goal
51%
SHARE
TWEET

Hologram Viewer 0.60 (English version)

MoonlightOwl Nov 11th, 2014 1,401 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --         Hologram Viewer
  2. -- by NEO, Totoro (aka MoonlightOwl)
  3. -- 11/12/2014, all right reserved =)
  4.  
  5. local fs = require('filesystem')
  6. local com = require('component')
  7. local args = { ... }
  8.  
  9. -- ================================ H O L O G R A M S   S T U F F ================================ --
  10. -- loading add. components
  11. function trytofind(name)
  12.   if com.isAvailable(name) then
  13.     return com.getPrimary(name)
  14.   else
  15.     return nil
  16.   end
  17. end
  18.  
  19. -- constants
  20. HOLOH = 32
  21. HOLOW = 48
  22.  
  23. -- hologram vars
  24. holo = {}
  25. colortable = {{},{},{}}
  26. hexcolortable = {}
  27. proj_scale = 1.0
  28.  
  29. function set(x, y, z, value)
  30.   if holo[x] == nil then holo[x] = {} end
  31.   if holo[x][y] == nil then holo[x][y] = {} end
  32.   holo[x][y][z] = value
  33. end
  34. function get(x, y, z)
  35.   if holo[x] ~= nil and holo[x][y] ~= nil and holo[x][y][z] ~= nil then
  36.     return holo[x][y][z]
  37.   else
  38.     return 0
  39.   end
  40. end
  41. function rgb2hex(r,g,b)
  42.   return r*65536+g*256+b
  43. end
  44.  
  45. function loadHologram(filename)
  46.   if filename == nil then
  47.     error("[ERROR] Wrong file name.")
  48.     return false
  49.   end
  50.   if string.sub(filename, -3) ~= '.3d' then
  51.     filename = filename..'.3d'
  52.   end
  53.   if fs.exists(filename) then
  54.     file = io.open(filename, 'rb')
  55.     -- load palette
  56.     for i=1, 3 do
  57.       for c=1, 3 do
  58.         colortable[i][c] = string.byte(file:read(1))
  59.       end
  60.       hexcolortable[i] = rgb2hex(colortable[i][1], colortable[i][2], colortable[i][3])
  61.     end
  62.     -- load voxel array
  63.     holo = {}
  64.     for x=1, HOLOW do
  65.       for y=1, HOLOH do
  66.         for z=1, HOLOW, 4 do
  67.           byte = string.byte(file:read(1))
  68.           for i=0, 3 do
  69.             a = byte % 4
  70.             byte = math.floor(byte / 4)
  71.             if a ~= 0 then set(x,y,z+i, a) end
  72.           end
  73.         end
  74.       end
  75.     end
  76.     file:close()
  77.     print("File is successfully loaded.")
  78.     return true
  79.   else
  80.     error("[ERROR] File "..filename.." not found.")
  81.     return false
  82.   end
  83. end
  84.  
  85. function scaleHologram(scale)
  86.   if scale == nil or scale<0.33 or scale>4 then
  87.     error("[ERROR] Hologram scale value should be in [0.33, 4.00] range.")
  88.   end
  89.   proj_scale = scale
  90. end
  91.  
  92. function drawHologram()
  93.   -- check hologram projector availability
  94.   h = trytofind('hologram')
  95.   if h ~= nil then
  96.     local depth = h.maxDepth()
  97.     -- clear projector
  98.     h.clear()
  99.     -- set projector scale
  100.     h.setScale(proj_scale)
  101.     -- send palette
  102.     if depth == 2 then
  103.       for i=1, 3 do
  104.         h.setPaletteColor(i, hexcolortable[i])
  105.       end
  106.     else
  107.       h.setPaletteColor(1, hexcolortable[1])
  108.     end
  109.     -- send voxel array
  110.     for x=1, HOLOW do
  111.       for y=1, HOLOH do
  112.         for z=1, HOLOW do
  113.           n = get(x,y,z)
  114.           if n ~= 0 then
  115.             if depth == 2 then
  116.               h.set(x,y,z,n)
  117.             else
  118.               h.set(x,y,z,1)
  119.             end
  120.           end
  121.         end
  122.       end      
  123.     end
  124.     print("Done.")
  125.   else
  126.     error("[ERROR] Hologram projector not found.")
  127.   end
  128. end
  129. -- =============================================================================================== --
  130.  
  131. -- Main part
  132. loadHologram(args[1])
  133.  
  134. if args[2] ~= nil then
  135.   scaleHologram(tonumber(args[2]))
  136. end
  137.  
  138. drawHologram()
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top