Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local component = require("component")
- local hologram = component.hologram
- local c1 = 20
- local MAX_N = 250 -- задаем максимальное значение выполнения цикла отрисовки снежинок
- local n = 0 --счетчик
- --моделируем Снеговика
- local tSnowman = {10,10,11,11,11,12,12,12,12,11,11,11,10,9,8,7,6,7,8,8,9,9,9,9,9,8,8,7,6,7,6,6,6,6,6,6}
- --палитра цветов
- hologram.setPaletteColor(1, 0xFFFFFF)--белый
- hologram.setPaletteColor(2, 0x8B0000)--бардовый
- hologram.setPaletteColor(3, 0xFFA500)--оранжевый
- --цикл рисования круга так же взаимствован у Doob
- local function circle(x0, y, z0, R, i)
- local x = R
- local z = 0
- local err = -R
- while z <= x do
- hologram.set(x + x0, y, z+z0, i)
- hologram.set(z + x0, y, x + z0, i)
- hologram.set(-x + x0, y, z + z0, i)
- hologram.set(-z + x0, y, x + z0, i)
- hologram.set(-x + x0, y, -z + z0, i)
- hologram.set(-z + x0, y, -x + z0, i)
- hologram.set(x + x0, y, -z + z0, i)
- hologram.set(z + x0, y, -x + z0, i)
- z = z+1
- if err <= 0 then
- err = err + (2 * z + 1)
- else
- x = x - 1
- err = err + (2 * (z - x) + 1)
- end
- end
- end
- --рисуем пуговицы они же глаза
- local function stud(x, y0, z0, i)
- for y = 0, 1 do
- for z = 0, 1 do
- hologram.set(x, y0-y, z0-z, i)
- end
- end
- end
- -- рисуем снеговика
- local function snowman()
- for i = 1, 30 do
- circle(c1,i,c1, tSnowman[i], 1)--отрисовываем основу снеговика
- end
- for i = 30, #tSnowman do
- circle(c1,i,c1, tSnowman[i], 2)--рисуем шапку
- end
- --рисуем глаза
- stud(29, 23, 23, 3)
- stud(29, 23, 17, 3)
- --рисуем морковку
- for x = 1, 6 do
- for y = 1, 2 do
- for z = 1, 2 do
- hologram.set(27+x, 18+z, 18+y, 3)
- end
- end
- end
- -- правая рука
- for x = 1, 7 do
- for y = 1, 2 do
- hologram.set(20+y, 10+x, 10-x, 3)
- end
- end
- -- левая рука
- for x = 1, 7 do
- for y = 1, 2 do
- hologram.set(20-y, 10+x, 31+x, 3)
- end
- end
- --рисуем пуговицы
- stud(30, 14, 20, 2)
- stud(32, 10, 20, 2)
- stud(32, 6, 20, 2)
- end
- local tSnow = {}
- local function gen_snow() -- генерируем снежинку
- local x, y, z = math.random(1, 46), 32, math.random(1, 46)
- table.insert(tSnow,{x=x,y=y,z=z})
- hologram.set(x, y, z, 1)
- end
- local function falling_snow() -- сдвигаем снежинки вниз
- local i=1
- while i<=#tSnow do
- if tSnow[i].y>1 then
- local x,y,z=tSnow[i].x+math.random(-1, 1), tSnow[i].y-1, tSnow[i].z+math.random(-1, 1)
- if x<1 then x=1 end
- if x>46 then x=46 end
- if z<1 then z=1 end
- if z>46 then z=46 end
- c=hologram.get(x, y, z)
- if c==0 or c==1 then
- hologram.set(tSnow[i].x, tSnow[i].y, tSnow[i].z, 0)
- tSnow[i].x, tSnow[i].y, tSnow[i].z=x,y,z
- hologram.set(x, y, z, 1)
- i=i+1
- else
- table.remove(tSnow,i)
- end
- else
- table.remove(tSnow,i)
- end
- os.sleep(0)
- end
- end
- hologram.clear()
- function setHologram()
- print("Запускаю отрисовку...")
- snowman()
- t = 0 --снежинки бьют дыры в белом снеговике, а отрисовывать его каждой анимацией
- --глупо, поэтому создадим счетчик и каждые 20 тактов будем его перерисовывать
- while n<MAX_N do
- gen_snow()
- falling_snow()
- t = t + 1
- if t == 20 then
- t = 0
- snowman()
- end
- n = n + 1
- end
- snowman()
- print("Цикл завершен!")
- if n == MAX_N then
- print("Ухожу в сон")
- os.sleep(360)--отправляем анимацию в сон на час
- n = 0
- tSnow = {} --обнуляем снег
- print("Просыпаюсь")
- setHologram()
- end
- print("Прервано")
- end
- setHologram()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement