Перейти к содержимому

Oleshe

Пользователи
  • Публикации

    155
  • Зарегистрирован

  • Посещение

  • Победитель дней

    12

Сообщения, опубликованные пользователем Oleshe


  1. Предлагаю сделать так, что-бы оно показывало актуальные значения, а не предпологаемые:

    Скрытый текст
    
    local comp = require("Computer")
    local cmp = require("Component")
    local line = "---------------------------------------------------"
    print("Debian GNU/Linux")
    print("Debian4OpenComputers Loader")
    print("(C) 2020 by maxutka99 & maks12345(TheMiksHacker")
    os.sleep(0.7)
    print(line)
    print("       _,met$$$$$gg.")
    print("    ,g$$$$$$$$$$$$$$$P.")
    print("  ,g$$PX     LLKY$$. K")
    print(" ,$$PX              `$$$.")
    print("',$$P       ,ggs.     `$$b:")
    print("`d$$P     ,$PPL   .    $$$")
    print(" $$P      d$'     ,    $$P")
    print(" $$:      $$.   -    ,d$$'")
    print(" $$;      Y$b._   _,d$PL")
    print(" Y$$.    ... Y$$$$P L")
    print(" S$$b      K-.__")
    print("  XY$$")
    print("   LY$$.")
    print("     K$$b.")
    print("       LY$$b.")
    print("          XLY$b._")
    print("              ----")
    print(line)
    os.sleep(0.7)
    print("root@OpenComputers")
    os.sleep(0.7)
    print(line)
    print("OS: OpenOS")
    print("EFI: "..cmp.eeprom.getLabel())
    print("Kernel: "..comp.getArchitecture())
    print("Uptime: "..comp.uptime()..' sec.')
    print("Authors of Loader: maxutka99 & maks12345")
    comp.beep()

     


  2. 20 минут назад, eu_tomat сказал:

    А что ему мешает работать?

    Не работает компьютер. По логике чанк то загруженный, но код не выполняется

     

    21 минуту назад, eu_tomat сказал:

    Не понял. К чему прибавить один?

    i = 0 while true do require("Component").modem.broadcast(1, "Ping", i) i = i + 1 end

    22 минуты назад, eu_tomat сказал:

    А что мешает что-то поменять в конфиге?

    Ничего. Нечего менять. Я просматривал конфиг раз 20 и ни разу не видел что-то связанное с остановкой компьютеров при выгрузке чанка с ним. Максимум что +- по нашему запросу, при выгрузке чанка оставлять статус компьютере для того что-бы при обратной загрузке чанка был такой-же. Если отрубим то он будет перезапускаться каждый раз когда загружают его чанк. (disablePersistence 339 строка)

    30 минут назад, eu_tomat сказал:

    Что ты имеешь в виду? Что значит "компьютеров на целевой карте"? В моём понимании на целевую карту приходят сообщения. Подключить к ней несколько компьютеров возможно. Но как к ней подключить планшет? Или ты под целевой картой подразумеваешь что-то другое?

    Карта мира майнкрафт. Ну мир на котором появился этот вопрос.


  3. Есть компьютер, он отправляет данные серверу. Сервер должен дать ему ответ. Проблема: расстояние в 800 блоков. В теорий поставить всередине ретранслятор будет нормальная идея, но он работает только тогда, когда мы его прогружаем. Так-же он не передаёт данные другим ретрансляторам, только компьютерам(нельзя выстроить цепь ретрансляторов). Если мы возьмём туннельную карту, остаётся вопрос с сервером. Прогрузчик чанков (Если он вообще работает) не работает. Компьютер выгружается. Если мы будем спамить в канал, тогда будет норм, но когда дело доходит до разнообразия, на пример прибавить 1, то он выгружается. В конфиг файле вроде-бы ничего нельзя поменять, компьютеров будет на целевой карте+- 6, сейчас 2(планшет и пк).


  4. Что если мы сделаем таблицу сколько тепла вырабатывает определённое топливо за минуту. Тогда мы сможем включать и выключать его через определённое время так, что-бы нагрев составлял на пример 94% постоянно. Ну или отмерять то, сколько он тепла отдаёт так, что-бы мы шли по условию заказа и выключали его когда 95% и включали когда 80%.

    Zelenuydrakon, можно ссылку на принцип работы реактора, как его построить и чем питать? Адаптер я подключал к блоку Fusion Cоre который размером 3 на 3 блока 1-м предметом. Он вроде-бы питается жидким топливом, а вы упоминали стержни. Не состыковка.


  5. В компоненте energy_device (Подключение реактора через адаптер) нету метода ни как получить тепло, ни как выключить реактор. Можно выключать реактор прекращением подачи топлива, но он продолжит работать какое-то время из-за внутреннего хранилища, а как подгадать это время под тепло- та еще загадка, ведь мы незнаем его нынешнее тепло.

    Единственное что может отдать нам реактор-
      Сколько энергий в нём сейчас.

      Сколько максимум энергий он может хранить.

      Может ли он отдавать/получать энергию на данный момент из/в реактор(а).


  6. Есть огрызок кода:

    Скрытый текст
    
        for e, p in pairs(obj) do
          if obj.raw then -- Перед этим мы ставим raw. Предохранитель на то что всё пойдёт не так.
            if e == 'onTocuh' or e == 'type' or e == 'raw' or e == 'path' then -- Пропускаем. Содержат либо таблицы либо функций. Нежелательно их трогать.
            elseif e == 'mode' and obj.type == 'button' then -- Потом вынесем в отдельную функцию.
              obj.raw:remove()
              create(obj)
            elseif e == 'mode' then -- Потом вынесем в отдельную функцию. Тут вообще не тот параметр кст.
              obj.stage = 0
              obj:tick()
            elseif e == 'items' and obj.type == 'comboBox' then -- Потом вынесем в отдельную функцию.
              obj.raw:clear()
    			    for j = 1,#obj.items do
    			      local tmp = obj.raw:addItem(ocj.items[j].name,obj.items[j].active)
                tmp.path = obj.items[j].path
                tmp.index = j
                tmp.onTouch = function(tmp,tmp01)
                  execute(tmp01.path,tmp.index,tmp01.index)
                end
    			    end
            elseif e == 'colorbg' then
              obj.raw.colors.default.background = obj[e] -- Привязываем через =
            elseif e == 'colorbgp' and obj.type == 'input' then
              obj.raw.colors.focused.background = obj[e] -- Привязываем через =
            elseif e == 'colorbgp' then
              obj.raw.colors.pressed.background = obj[e] -- Привязываем через =
            elseif e == 'colorfg' or e == 'colort' then
              obj.raw.colors.default.text = obj[e] -- Привязываем через =
            elseif e == 'colorfgp' and obj.type == 'input' then -- Этот ..
              obj.raw.colors.focused.text = obj[e] -- Привязываем через =
            elseif e == 'colorfgp' then -- .. первее этого т.к. имя параметра объекта у них одинаковые, но параметры в raw разные.
              obj.raw.colors.pressed.text = obj[e] -- Привязываем через =
            elseif e == 'colorph' then
              obj.raw.colors.placeholderText = obj[e] -- Привязываем через =
            elseif e == 'colorv' then
              obj.raw.colors.value = obj[e] -- Привязываем через =
            elseif e == 'colora' then
              obj.raw.colors.arrow.text = obj[e] -- Привязываем через =
            elseif e == 'colorabg' then
              obj.raw.colors.arrow.background = obj[e] -- Привязываем через =
            elseif e == 'colorp' and obj.type == 'switch' or obj.type == 'slider' and e == 'colors' or obj.type == 'progressBar' and e == 'colorp' then
              obj.raw.colors.active = obj[e] -- Привязываем через =
            elseif (e == 'colors' and obj.type == 'switch' or obj.type == 'progressBar') or obj.type == 'slider' and e == 'colorpp' or obj.type == 'progressIndicator' and e == 'colorpa' then
              obj.raw.colors.passive = obj[e] -- Привязываем через =
            elseif e == 'colorpp' and obj.type == 'switch' or obj.type == 'slider' and e == 'colorp' then
              obj.raw.colors.pipe = obj[e] -- Привязываем через =
            elseif e == 'textph' then
                obj.raw.placeholderText = obj[e] -- Привязываем через =
            elseif obj.type == 'panel' then
                if e == 'color' then
                  obj.raw.colors.background = obj[e] -- Привязываем через =
                end
            elseif obj.type == 'switch' then
                if e == 'state' then
                  obj.raw:setState(obj[e]) -- Потом вынесем в отдельную функцию.
                end
            elseif obj.type == 'progressIdnicator' then
              if e == 'colorp' then
                obj.raw.colors.primary = obj[e] -- Привязываем через =
              elseif e == 'colorp' then
                obj.raw.colors.secondary = obj[e] -- Привязываем через =
              end
            else
              obj.raw[params[e] or e] = obj[e] -- Привязываем через = то что осталось. есть таблица параметров аля x = 'localX', если параметра в таблицуе нету, значит мы используем параметр буквку в букву.
            end
          end
        end

     

    Как мы видим, оно должно привязывать параметры к их эквивалентам в raw. Но, когда мы изменяем параметр объекта, параметр raw-а остаётся тем-же.

    Соответственно нужно что-бы если мы изменяли параметр объекта, мы изменяли его и в raw.

    Аля:

    local object = {}
    local raw = {localX = -20}
    object.raw = raw
    object.x = 15
    object.raw.localX = object.x
    print(object.x,object.raw.localX) -- 15  15
    object.x = 0
    print(object.x,object.raw.localX) -- 0  0
    object.localX = 20
    print(object.x,object.raw.localX) -- 20  20

    Вручную каждый друг к другу привязывать не вариант т.к. их слишком много, можно объединить параметры, наставить сравнений, то через цикл оно будет само подбирать нужный вариант.

    • Против 1

  7. Скрытый текст
    
    
          for i = 1,#scenes[e].game.screen do
           scenes[e].game.screen[i].raw:remove()
           scenes[e].game.screen[i].raw = nil -- Изменили
           if scenes[e].game.screen[i].type == 'animation' then
             OE.breakAtlas(scenes[e].game.screen[i])
    	   end
          end

     

    table.remove(table,index). Мы вводили таблицу, но без индекса. Сделал через = нил и всё заработало.


  8. 10 часов назад, eu_tomat сказал:

    А каков диапазон чисел? И каковы шансы встретить маленькие числа в сравнении с большими?

    Не знаю. Большие цифры: звуковые частоты, задержка (Длинна звука) и adsr. Из маленьких цифр: наличие adsr, инструмент (Ну там-ж пилавые, квадратные, треугольникавые, круглые звуковые волны), канал, и предохранитель на то, есть ли следующая "часть".


    Вот сделал +- норм сжатие. Оно превращает:

    2,1,2000,4000,2,1000,10,1,1000 -- с ADSR
    
    2,2,2000,4000,2 -- Без ADSR
    
    2,3,2000,4000,2,0,2000,0,1 -- c ADSR

    В 38 байт:

    �����o -- (В майне оно занимает больше символов. В AkelPad-е 3 сноса cтрок и пустые символы. Интересно.)

    Возможно вы найдёте путь сжать еще сильнее.


  9. Нужно записать цифры и я думаю что писать их в 1 строку по символам будет лучше чем пихать таблицу через сериализацию.

    Требуется сократить объем в байтах, размер итогового файла.

    Придумал дополнение к ранее описанной схеме, мы не записываем 127 столько раз сколько надо для цифры, вместо него мы используем множитель для 127 (Сколько их будет) и цифру которая меньше 127, остаток. (Если надо 1000, то делим 1000 на 127, отделяем то, что после запятой и это будет 1 символом. Тот множитель который мы получили только что умножаем на 127 и отнимаем от 1000, это остаток, второй символ. 7(множитель, символ)111(остаток, символ))


  10. 7 часов назад, eu_tomat сказал:

    Какую задачу ты пытаешься решить?

    У меня есть циферки, их нужно записать в файл максимально сжато, желательно. В уникоде куча символов, то-есть мы можем записать целое число в 1 символ (Числа будут в диапазоне от 0 до 40000). Я тестил это и оно работало, но когда мы выходили за пределы string.byte оно ломалось и читало не правильно, за 2 :read оно читало 1 символ. Если совместить их нельзя то сделаем так,  что-бы оно записывало максимальные значение так, что-бы в итоге получилось нормальное. Что-бы не попутать в конце поставим ноль ( если на пример число 128, то мы записываем 127 и 1. Если число 129, то запишем 127 и 2. Если число 1007 то записываем 127 7 раз, а в конце 118. Еще не делал, так-что это пока теория. Пойду сделаю.:smile44:


  11.  

    7 часов назад, ECS сказал:

    Из символа в байты:

    
    local char = unicode.char(128)
    local bytes = {char:byte(1, #char)}
    
    print(table.unpack(bytes))
    > 194 128

     

     

    Мы получаем 2 числа, а нужно одно. Возьмём число побольше, на пример 1007, получиться {207,175},. Как из них получить 1 цифру, ту-же 1007 которую мы и вкладывали?


  12. Предположим у нас есть цифра 128. Мы попускаем её через unicode.char и получаем символ. Этот символ мы пропускаем через string.byte и вот не задача, начиная с 127 уникодовского символа оно выдаёт 194. Если мы попустим 130 а не 128, мы получим 194.
    Как сделать так что-бы цифры сохранялись без огромных циклов в символ и обратно?


  13. Скрытый текст

     

    image.png.5da16c8ef9cafdf9b78dcda2c23daed6.png

    😋🥰

     

    image.png.fd797b0bdecfb7d63f79534f7efb6f41.png

    Скрытый текст
    
    local function destantion(point1,point2)
      return math.sqrt((point1[1]-point2[1])^2+(point1[2]-point2[2])^2)
    end
    
    workspace.eventHandler = function(_,_,...)
      local args=  {...}
      if args[1] == 'touch' then
      object = workspace:addChild(GUI.object(args[3], args[4], light.radius*2, light.radius*2))
      object.draw = function(object)
        local tmp
        for xx = 0,light.radius*2 do
          for yy = 0,light.radius do
            local was = {screen.get(object.x+xx,object.y+yy)}
            local radius = destantion({object.x + light.radius, object.y + light.radius/2}, {object.x+xx,object.y+yy})
            screen.set(
              object.x + xx,
              object.y + yy,
              color.blend(was[1], light.color, -((light.intensivity / math.max(1, radius ^ 2))-1)), -- -((light.intensivity / math.max(1, radius ^ 2))-1) - Обратное от полученого числа. Если 1 то 0, 0.25 то 0.75, 0.47 то 0.53. Сделано т.к. оно наоборот засасывало цвет в центр, а не высвобождало его.
              color.blend(was[2], light.color, -((light.intensivity / math.max(1, radius ^ 2))-1)),
              was[3]
            )
          end
        end
      end
    workspace:draw()
      end
    end

     

     

    Получил что-то похожее на круг. Теперь интенсивность решает, но радиус перестал. Cтранно красит середину.

    Забавно что при повторных кликах "освещение" растёт у каждой точки, даже ранее поставленной. При этом центр становиться чёрным. Пробовал сделать через штуку которая 1234 в 0.5 для того что-бы цвет пофиксить, но оно выдавало в конченом счёте..: бесконечность.

    image.png.172749f81323fdccc3c8933e924b71ce.png

    Буквально бесконечность.

    Не знаю что теперь с этим делать. надо-бы в алго с прозрачностью итоговый радиус присобачить, но не знаю куда его тут поставить

     

    8 часов назад, ProgramCrafter сказал:

    P.S. Хочу потом увидеть программу, где это будет использоваться.

     

    Здесь присобачим как объект света. Подумаем как сделать ограниченное поле освещения, весь фарш и готово. Мы-ж объекты можем там таскать туда-сюда, изменять их на ходу. Удобно вроде сделал. Недавно кстати появились сцены как в унити, но лучше пока с ними не гулять, а то зарежут. В них лучше использовать только базовые объекты (Всё кроме анимации и файлов, скрипты норм работают), остальные хз как поведут.  Добавить объект легче чем создать. Но и там бывают траблы... Этот трабл кстати появился из-за идеи всё упаковывать, что касается определённых сцен (Файлы скрипты, локализация) отдельно друг от друга: в архив. То-же будет и в экспорте. Еще будут "общие файлы" которые будут доступны во всех сценах.

    Наверное больше подробностей, чем ожидалось.


  14. Скрытый текст
    
    local function save(path)
    		gamepath = path
    	  OE.gamepath = gamepath
        if not path then return false end
        fs.makeDirectory('/Temporary/ProjectSave')
        local idk = {}
        for e = 1,#scenes do
          local idk1 ={}
          for i = 1,#scenes[e].game.storage do
          	table.insert(idk1,'/Temporary/ProjectSave/' ..fs.name(scenes[e].game.storage[i].path))
            fs.copy(scenes[e].game.storage[i].path,'/Temporary/ProjectSave/' ..fs.name(scenes[e].game.storage[i].path))
          end
          for i = 1,#scenes[e].game.scripts do
          	table.insert(idk1,'/Temporary/ProjectSave/' ..fs.name(scenes[e].game.scripts[i].path))
            fs.copy(scenes[e].game.scripts[i].path,'/Temporary/ProjectSave/'..fs.name(scenes[e].game.scripts[i].path))
          end
          table.remove(OE.ABN)
          for i = 1,#scenes[e].game.screen do
           scenes[e].game.screen[i].raw:remove() -- удаляем
           table.remove(scenes[e].game.screen[i].raw) -- удаляем вообще
           print(scenes[1].game.screen[1].raw) -- отладка, видим что не удаляеться.
           if scenes[e].game.screen[i].type == 'animation' then
             OE.breakAtlas(scenes[e].game.screen[i]) -- удаляет функций к анимациям
    	   end
          end
          OE.cleanBuffers()
          table.insert(idk,string.gsub('/Temporary/ProjectSave/'..scenes[e].name,'.part','')..'.part')
          compressor.pack(string.gsub('/Temporary/ProjectSave/'..scenes[e].name,'.part','')..'.part',idk1)
        end
     -- fs.writeTable('/Temporary/ProjectSave/Game.dat',scenes) -- Выдаёт ошибку not enough memory. По теорий: потому-что там функций. Для тестов отрубли.
      compressor.pack(string.gsub(path,'.proj','')..'.proj',idk)
      adapting()
      OE.draw() -- Только сдесь и выдаёться raw обратно, но оно позже записи в файл
    end

     

    Ни в одной из функций не прописано что-бы в raw появлялись функций. Мы вообще её сносим и тут-же смотрим:

    .image.png.32be8f6b5e4ba032172b667af72308b4.png

    Таблица есть, функций присутствуют.

    xdd какой-то

    • Грусть 1

  15. В 08.07.2023 в 22:56, ProgramCrafter сказал:

    Взять тир3 видеокарту и монитор.

    Я не знаю и не видел людей которые используют т2 монитор для MineOS. Надеюсь и не увижу.

     

    В 08.07.2023 в 22:56, ProgramCrafter сказал:

    ..  зависимости от [квадрата] расстояния от центра. ..

    Как это сделать? Вообще не представляю. Ну, как мы узнаем какая прозрачность нам нужна от квадрата расстояния? Попустить получившуюся цифру через штуку которая делает из 123790  0.543?

    image.png.10ad7c6338943e26011f38338b4ea253.png

    Вот, это если радиусы в квадрат.

    Скрытый текст
    
    local GUI = require("GUI")
    local screen = require("Screen")
    local color = require('color')
    
    --------------------------------------------------------------------------------
    
    function round(num)
      return math.ceil(num)
    end
    local workspace = GUI.workspace()
    
    --------------------------------------------------------------------------------
    light = {intensivity=5,radius = 30,color = 0xFF0000}
    local object
    
    local function idk(x,step)
      return (x-step)/(light.radius^2-step) -- квадратик
    end
    
    workspace.eventHandler = function(_,_,...)
      local args=  {...}
      if args[1] == 'touch' then
      object = workspace:addChild(GUI.object(args[3], args[4], 50, 10))
      object.draw = function(object)
        local x,y = object.x, object.y
        local alr= {}
        for xx = 0,light.radius*2+object.x+1 do
          alr[xx] = {}
          for yy = 0,light.radius*2+object.y+1 do
            alr[xx][yy] = false
          end
        end
        function set(x,y,intensivity)
          local x,y = round(x), round(y)
          local was = {screen.get(x,y)}
          if x > light.radius*2 +object.x+1 then
            return
          end
          if not alr[x][y] then
            screen.set(x,y,color.blend(was[1],light.color,intensivity),color.blend(was[2],light.color,intensivity),was[3])
            alr[x][y] = true
          end
        end
        local step = light.intensivity/light.radius
        for radius = 0, light.radius do
          local calc = radius ^ 2 --квадратик
          local balance = calc
          local last = 0
          for angle = 1,math.max(5,math.ceil(180*radius/light.radius)) do
            if last ~= balance then
              print(idk(balance,step),balance,step,calc)
            end
            last = balance
            set(math.cos(math.deg(angle))*radius+x,(math.sin(math.deg(-angle))*radius)/2+y,idk(balance,step))
          end
        end
      end
        workspace:draw()
      end
    end
    workspace:draw()
    workspace:start()

     

    Интенсивность так-же не на что не влияет :/. Отличается тем что середина стала пухлее. Может я что-то не так считаю, не знаю.


  16. 12 часа назад, ProgramCrafter сказал:

    for angle = 1,math.max(5,math.ceil(180*radius/light.radius)) do

    Практически исправлено.

    image.png.6923b3b789cb922d8447f1bf4a994db8.png

    Радиус 30

    image.png.b124f0bb69f5c7ffcb9adb0636699f53.png

    Радиус 10

    В 10-м радиусе видно что оно всё еще концентрируется.

    Попробовал сделать сначала "карту" того что у нас есть, если мы уже ставили пиксель на это место мы скипнем set тем самым не повторяясь. Производительность по памяти немного будет плакать.

    image.png.ffbaeca582d66e94539dce12f29f76cc.png

    Радиус 30 интенсивность 10

    image.png.587bbd7a181874abda634a817d3d48ad.png

    Интенсивность 1 (Реально)

    Интенсивность до сих пор не на что не влияет. Есть линий которые не краситься.

    18 часов назад, Oleshe сказал:

    Должно-быть: чем больше интенсивность, тем больше должно убавляться света на радиус.

    Код:

    Скрытый текст
    
    object.draw = function(object)
        local x,y = object.x, object.y
        local alr= {} -- "карта" пикселей
        for xx = 1,light.radius+object.x do
          alr[xx] = {}
          for yy = 1,light.radius+object.y do
            alr[xx][yy] = false -- Заполняем "карту" пикселей
          end
        end
        function set(x,y,intensivity)
          local x,y = round(x), round(y)
          local was = {screen.get(x,y)}
          if not alr[x][y] then -- Если не закрасили
            screen.set(x,y,color.blend(was[1],light.color,intensivity),color.blend(was[2],light.color,intensivity),was[3])
            alr[x][y] = true -- Закрасили
          end
        end
        local step = light.intensivity/light.radius
        for radius = 0, light.radius do
          local calc = radius * step
          local balance = calc
          local last = 0
          for angle = 1,math.max(5,math.ceil(180*radius/light.radius)) do
            if last ~= balance then
              print(idk(balance,step),balance,step,calc)
            end
            last = balance
            set(math.cos(math.deg(angle))*radius+x,(math.sin(math.deg(-angle))*radius)/2+y,idk(balance,step))
          end
        end
      end

     

    И как кстати сделать больше изменений интенсивности на пиксель что-бы переход был плавнее.7 


  17. У меня есть наработка, идея: у нас есть список с 3 параметрами, цвет света, радиус (длинна) света и интенсивность.

    Код:

    Скрытый текст
    
    local GUI = require("GUI")
    local screen = require("Screen")
    local color = require('color')
    
    --------------------------------------------------------------------------------
    
    function round(num)
      return math.ceil(num)
    end
    local workspace = GUI.workspace()
    
    --------------------------------------------------------------------------------
    light = {intensivity=0.1,radius = 30,color = 0xFF0000}
    local object
    
    local function idk(x,step)
      return (x-step)/(light.intensivity-step) -- Что-бы значение интенсивности колебалось от 0 до 1, а не было 20
    end
    
    workspace.eventHandler = function(_,_,...)
      local args=  {...}
      if args[1] == 'touch' then -- При клике создадим объект
      object = workspace:addChild(GUI.object(args[3], args[4], 50, 10))
      object.draw = function(object)
        local x,y = object.x, object.y
        function set(x,y,intensivity)
          local x,y = round(x), round(y)
          local was = {screen.get(x,y)} -- Получаем цвета старого пикселя ..
          screen.set(x,y,color.blend(was[1],light.color,intensivity),color.blend(was[2],light.color,intensivity),was[3]) -- .. и миксуем его с нашим
        end
        local step = light.intensivity/light.radius -- шаг на 1 радиус, что-бы интенсивность света в конце +- была ровна 0
        for radius = 0, light.radius do
          local calc = radius * step -- Как-бы мерием сколько мы прошли, что-бы понять интенсивность света на этом этапе
          local balance = calc -- Раньше сдесь было доп условие, оно не нужно. Пока-что так.
          local last = 0 -- Затычка для будущего момета с отладкой
          for angle = 1,180 do -- Чем меньше, тем меньше "лучей" мы пустим. Полагаю большое количество не имеет смысла.
            if last ~= balance then     --      -   -  - -- Отладка
              print(idk(balance,step),balance,step,calc) -- Отладка
            end     --       -     -     -      -        -- Отладка
            last = balance   --   -        -  -      -   -- Отладка
            set(math.cos(math.deg(angle))*radius+x,(math.sin(math.deg(-angle))*radius)/1.5+y,idk(balance,step)) -- Ставим пиксели, высоту делим на 1.5 для более мене круга. Интересно как оно себя поведёт. 
          end
        end
      end
        workspace:draw()
      end
    end
    workspace:draw()
    workspace:start()

     

    image.png

    Пример к коду, недостаток angle в цикле. Недостаток "лучей" для круга. А еще красиво.

    image.png.7eeec3f0333886906dec6d313c305ad1.png

    Радиус 10

    image.png.b742b5577101aa7e41eb9740f3bc499e.png

    Радиус 30

    Проблема: Как бы ты не изменял интенсивность, результат тот-же. Не правильно считает центр, он заливается сплошным цветом вместо градиента.

    Должно-быть: чем больше интенсивность, тем больше должно убавляться света на радиус. Я не знаю что я делаю не так что-б результат получался одинаковым любом случаи. Вся интенсивность почему-то концентрируется в центре. Жэнтэльмены, помогите узнать что я делаю не так.


  18. 1 час назад, BenniShifer919 сказал:

    Почему все используют OpenComputers, а не CC: Tweaked?

    У него больше возможностей, мои причины почему я на OC:

    • Модульность. Да, он сложнее в сборке, но ты можешь собрать тот компьютер который подходит тебе под определённую задачу.
    • Обилие предметов. Когда в СС только компьютер и черепаха (по памяти), в ОС дроны, микроконтроллеры, гео анализатор, карта красного камня, адаптер (Взаимодействие с другими модами), и т.п.
    • У него нету сильных недостатков перед СС, наоборот он более продвинутый, имхо.
    1 час назад, BenniShifer919 сказал:
    • Он активно обновляется(Если мы говорим о Tweaked версии)

    Оба мода в разработке. Аргумент то прав но обновляться оба мода.

    1 час назад, BenniShifer919 сказал:

    (Не бросайтесь говном пожалуйста, просто я действительно не вижу весомых причин, чтобы сидеть только на OC)

    Мы пытаемся быть интеллигентным сообществом, поэтому лучше было-бы написать помидорами.

    Оба моды сильны в определённых аспектах, и не вижу причины опускать или завышать кого-либо. Один работает 1.12.2, другой на 1.19.*. Они взаимозаменяемы, просто кто-то начал с одного мода , а переходить на другой желания нету. Я не вижу вязкой причины переходить на СС, имхо ОС лучше. Каждый решает сам что ему использовать.
    Думаю что победит дружба, так-как выяснять разницу почему один мод лучше другого это как спросить: что лучше интел или амуде?

    • Нравится 2

  19. Большое обновление "Контент 02"

    Это будет последнее обновление в отдельном сообщений потому-что наверное и модератором надоел да и ветку засоряю, хотя кому еще писать.

    Добавлено:

      Граф. элементы:

        Объект анимации. С ним было интересно повозиться и вот он есть. Процесс сетапа:

        Выбираем в меню как обычный объект, и выбираем atlas.pic, тот атлас который мы будем использовать для анимаций. Сам атлас:

        Это мой тип атласа. В атласе должна быть нумерация кадров. По типу: Atlas:setImage(1,1,image.load('/Image.pic'),'FRAME_NUMBER')
        У самого объекта есть 2 функций:
        tick() -- Следующий кадр
       checkNext() -- Проверяет следующий кадр, является ли он последним.
      Библиотека:
        Добавлен OE.playAnimation(object, speed). Проигрывает анимацию object объекта со speed скоростью. Оно использует "многопоточность" которую мы прибили в прошлом обновлений.

        Добавлен clearCashe(), clearImageCashe(object.name) и clearScriptCashe(object.name). Первая очищает весь кэш, вторые 2 очищают кэш для определённого объекта. В clearImageCashe(object.name) объектом является объект в game.screen так-как оно хранит картинку для этого объекта.
    Оптимизация:
      Граф. элементы:

        Изображения в кэше, диск не будет каждый раз работать когда надо будет добавить одну и ту-же пикчу.
      Скрипты:

        Так-же как и с изображениями, только скрипты.
    Тут мои идеи закончились. Пишите сюда, или в лс что-бы вы хотели поменять, прояснить, зарепортить, добавить.


  20. Большое обновление "Скрипты"

    Добавлено:
      Библиотека:
        Добавлено несколько функций:
     

    Скрытый текст

    OE.getStorage()
    OE.getScreen()

    OE.getScripts()
    OE.getStorage(data)
    OE.getObject(data)

    OE.getScript(data)

        Это группа get которая возвращает всё логически от имени. В data у нас либо имя объекта, либо таблица объекта, либо имя объекта.
        Так-же у нас появилась OE.regScript(script,mode,interval,endTime,name) и OE.unregScript(name). Они прибивают скрипт к потоку от безымянного объекта который приделан к окну. Mode это режим, их 3: "execute", 'string", "function", загрузить из файла объекта скрипта, из строки и из функций. Script это сама функция на пример. Интервал и endTime это интервал выполнения и конец выполнения через n секунд. Если endTime будет меньше нуля, -1 на пример, то цикл выполнения будет вечен (Пока окно не закроется). UnregScript принудительно удаляет скрипт из выполнения потока.
        Помните Instance из патча? Он полностью доделан. Порядок входящих параметров такой-же какой и в параметрах и можно создать вообще любые граф. объекты. На пример:

    OE.Instence.new('panel',1,1,10,10,0x989898,true)
    --OE.Instence.new(type,x,y,width,height,color,visible)

        Еще есть Instance.remove(data). Data точно такая-же как и с get кластером. Удаляет объект с экрана.
      Граф. элементы:
        В очередной раз изменён алго счёта позиций названия окна.
    В планах сделать кэш подгружаемых объектов таких как те-же скрипты или изображения и сделать анимационный объект: атлас-анимация. Вырезаем-вставляем. Подкидывайте идеи..

    • В шоке 1

  21. Патч 01
    Не добавлено в инсталятор.
    Исправлено:
      Граф. элементы:
        Когда мы изменяли на пример стадию ползунка или переключателя она не отражалась в таблице объекта.
        Кнопки закрыть-свернуть при экспорте не отображались.
    Добавлено:
      Взрывоопасно:
        В библиотеку OE добавлен Instance в котором есть Instance.new(type:string, ...), в нём работает только панель, текст, кнопка и прогрессБар, и то не факт. Далее мы его доработаем и добавим Instance.remove(object or objectIndex or objectName:table or number or string) находит объект и удаляет его подтирая за ним. Взрывоопасно потому-что это пока-что огрызок, но патч сделать надо из-за косяков с граф. эл.
    Общее:
      Локализация:
        Теперь она стала гибче: если перед патчем нам нужно было имя объекта для его локализаций, то сейчас имя параметра локализаций идёт после {loc}. Пример: 

    object.text = '{loc} testLocalization'
    game.localization.testLocalization = 'Hello world!'

        Имя локализаций одним словом после пробела после {loc}.

    • В шоке 1

  22. 4 часа назад, WheatComp сказал:

    Сначала поставил, чтобы было что проверять, а затем проверил.

    Смотри: когда ты добавляешь компонент, он уже в компьютере, его не надо определять там что-то с ним делать, система разберётся сразу когда ты его вставишь.

    Здесь мы обозначаем модем, предполагается что он уже есть, хотя это не так. Уже после того как мы определили мы проверяем есть ли он, то-есть он у нас либо будет либо ошибка что его нету.
    На то и "No primaty 'modem' available" потому-что системе нечего регистрировать как модем и нечего дать программе.


    В компьютере нету модема что-бы его дать программе, а isAvailable проверяет есть ли он, то-есть мы проверяем есть ли он, и если есть то уже определяем его. Типа:

    local cmp = require('copmonent')
    if cmp.isAvailable('modem') then
      local modem = cmp.modem
      print('Есть :)')
    else
      print('Нету :(')
    end

     


  23. 11 час назад, WheatComp сказал:

     

    
    local component = require("component")
    local modem = component.modem
    
    if component.isAvailable("modem") == true then
      ...

     

    Ты ставишь компонент модема перед тем как проверить есть ли он.
    А почему ты используешь примари? component.invoke(addrs, functionName, ...) <-- обращается именно к компоненту addrs, имя функций пишешь в строковом варианте, например:
     

    local address = '0ab'
    local cmp = require('component')
    local address = cmp.get(address) --Получаем полный адрес из скороченого, обезательно
    local sides = require('sides')
    
    cmp.invoke(address,'setOutput',sides.up,5)
    print(cmp.invoke(address,'getOutput',sides.north))
    cmp.invoke(address,'setOutput',sides.down,12)

     

    • Спасибо 1

  24. Небольшое обновление "Оптимизация 01"

    Общие:

      Помните размер мэйна 110+- Кб? Теперь 80 !1! Установщик уже готов, а код а за-аплоужен.

      В репозиторий гитхаба в Applications был добавлен Install.app который содержит исходники инсталятора. Кроме data_NN потому-что там ничего интересно, просто код или кучка файлов в архиве с заумным названием.

×
×
  • Создать...