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

Лидеры


Популярный контент

Показан контент с высокой репутацией 09.02.2022 в Сообщения

  1. 1 балл
    Сделал простенькую читалку для файлов GIF, поддерживает весь функционал со спецификации: слои/кадры, прозрачность, текст, комментарии, расширение NETSCAPE2.0 и прочее. Но не все доп. расширения были найдены, потому реализовал только описанные в интернете. Небольшая предыстория: В общем говоря, захотел я себе как-то анимированный "телек" для дома, в качестве украшения. С отображением были конечно проблемы - голо-проектор не вмещал больше 3х цветов в палитре, но это решалось количеством. Второй проблемой встала сама картинка - пнгшки кадрами собирать было лень, да ещё и в индексы надо переводить все цвета... Подождите-ка индексы, анимация, встроенная палитра... Это-же GIF! Эврика подумал я... Пока не увидел реализацию, а потом меня поглотила пучина гифа... При первом знакомстве GIF показался простым, как пробка, форматом (хотя, так и есть). Но сжатие изображения в LZW немного остудило мой пыл. Мне довольно трудно понимать работу хитроскрученных алгоритмов сжатия, но всё оказалось не так плачевно, и вооружившись методом проб и ошибок, я начал познавать это.. что-то. В конце концов, подняв несколько хабро-статеек, спецификацию, форумы покрывшиеся пылью, я начал открывать другую сторону GIF - она идеально подходит под реалии OpenComputers: 256 цветов, неплохое сжатие, встроенный текст. Всё это приправлено расширениями в виде анимаций, прозрачности слоёв, и разными дополнительными блоками. В конце-концов, этот формат может стать аналогом флеша в истории опенкомпов! Да здравствует новая эра, эра флеш-игр, когда-то покорившая интернет! В итоге всех скитаний по интернетам, мне удалось сделать более-менее полную читалку, хотя некоторые расширения потерялись в могилах истории, и я не решился пока их выкапывать. Саму читалку можно скачать для двух версий Lua: 5.2: wget -f https://github.com/Xytabich/GIF-Lua/raw/master/5.2/gif.lua /lib/gif.lua 5.3: wget -f https://github.com/Xytabich/GIF-Lua/raw/master/5.3/gif.lua /lib/gif.lua Различия между ними несущественны - Lua 5.3 использует встроенные битовые операции, а в Lua 5.2 используется библиотека bit32, соответственно. Функционал читалки: -- Сруктуры -- Заголовок GIF - базовая информация гифки. - width:number - ширина гифки - height:number - высота гифки - colorBits:number - кол-во бит, используемое для цветовой палитры. Устарело, но добавил на всякий. - bgIndex:number - индекс фонового цвета - aspectRatio:number - соотношение сторон, считается как: ширина/высота. Тоже устарело, но мало-ли. - colorsCount:number? - количество цветов в глобальной палитре - colors:number[]? - глобальная палитра цветов 0xRRGGBB, индексация начинается с 0 - extensions:table - список расширений гифки Блок изображения (image) - информация о слое/кадре гифки. Содерижит полное изображение, или только его часть. - x:number - отступ от левого края - y:number - отступ от верхнего края - width:number - ширина изображения - height:number - высота изображения - interlaced:bool - построчная или чересстрочная развертка - colorsCount:number? - количество цветов в локальной палитре - colors:number[]? - локальная палитра цветов 0xRRGGBB, индексация начинается с 0 - pixels:string - пиксели изображения, массив байт 0-255. Пиксель является индексом в локальной/глобальной палитре, и записаны в виде линий, слева-направо сверху-вниз. Порядок линий зависит от interlaced. - extension:table? - расширение изображения, параметры анимации и прозрачности - dispMethod:number - метод очистки экрана перед отображением: 1 - не очищается, 2 - закрасить фоновым цветом, 3 - восстановить состояние перед предыдущим кадром - delay:number - время до следующего кадра, в секундах - inputFlag:bool - ожидать ли ввода пользователя для продолжения отображения - transparentIndex:number - индекс цвета в палитре, использующегося в качестве прозрачного Блок текста (text) - отображает текст над изображением. По спецификации символы 7-bit ASCII, но ничто не мешает засунуть туда utf-8. - x:number - отступ от левого края - y:number - отступ от верхнего края - width:number - ширина текстовой области - height:number - высота текстовой области - charWidth:number - ширина символа - charHeight:number - высота символа - fgIndex:number - цвет символа - bgIndex:number - цвет фона символа - text:string - собственно, сам текст Блок комментария (comment) - произвольная текстовая запись, не влияющая на отображение. По спецификации так-же символы 7-bit ASCII, но и юникод спокойно помещается. Расширение гифки: NETSCAPE2.0 - информация о количестве циклов анимации. - iterations:number - количество итераций цикла (0 - бесконечное) - loop:bool - бесконечный ли цикл -- Функции -- gif.read(stream[, pos=0]):table -- читает весь файл. -- stream - поток данных, например - полученный через filesystem.open(...) -- возвращает заголовок с дополнительным полем - blocks:table {type:string, block:object}. В этом поле содержится список всех блоков в порядке чтения. gif.images(stream[, pos=0]):head, image -- итератор, последовательно считывает изображения. -- stream - поток данных, например - полученный через filesystem.open(...) gif.blocks(stream[, pos=0]):head, type, block -- итератор, последовательно считывает все блоки. -- stream - поток данных, например - полученный через filesystem.open(...) Особо сильно оптимизировать не стал, да и не знаю как, так что если есть предложения - выслушаю и внесу поправки. Один из вариантов ускорения чтения - сделать буферизированный поток данных. Код и тестовые изображения доступны в репозитории на github. В чересстрочной развёртке линии следуют не по прямому порядку, подробнее в выписке из спецификации: Пример приведу на тестовом коде, для проектора на картинке выше. Этот код просто рисует файл, так что настроить пересечение областей проекторов нужно вручную, или использовать один. Для OpenComputers этот формат имеет хорошие возможности, как для простого хранения сжатого изображения, или даже составного изображения из различных слоёв, так и для продвинутых действий: презентаций, анимаций, картинок с подписями. А если совсем заморочиться, то можно сделать свой Anone Gif Player, используя комментарии для записи кода, или собственные расширения приложения. По крайней мере, кинетические новелки возможно сделать и в стоковом варианте. История изменений:
  2. 1 балл
    Робот умеет сортировать, искать и выдавать предметы по запросу игрока из сундуков. Для управления используется приложение на Android, генерирующие программу для робота. Github: https://github.com/vladd11/OpenComputersStorage APK: https://github.com/vladd11/OpenComputersStorage/releases/download/1.0/app-release.apk UPD: при установке Google Play Защита ругается на неизвестного разработчика. Если вы не доверяете - соберите приложение самостоятельно. Демонстрация работы: Склад строится строго к положительной оси X (на отрицательной оси работа не тестировалась) и также может быть расширен по оси Z. Робот может использовать любые сундуки, в том числе те, которые расположены сбоку/снизу/сверху (он будет поворачиваться к ним). Используемая конфигурация (монитор и клавиатура с графической картой необязательны): Установка программы (OpenOS должна быть установлена на диск): mkdir chests rm .shrc wget https://raw.githubusercontent.com/vladd11/OpenComputersStorage/main/robot/.shrc wget https://raw.githubusercontent.com/vladd11/OpenComputersStorage/main/robot/find.lua wget https://raw.githubusercontent.com/vladd11/OpenComputersStorage/main/robot/movement.lua wget https://raw.githubusercontent.com/vladd11/OpenComputersStorage/main/robot/server.lua wget https://raw.githubusercontent.com/vladd11/OpenComputersStorage/main/robot/update.lua wget https://raw.githubusercontent.com/vladd11/OpenComputersStorage/main/robot/utils.lua edit server.lua В начале файла измените 192.168.1.106 на IP своего смартфона. Если он находится в локальной сети (подключение по WiFi), удалите диапазон 192.168.0.0/16 из blacklist (.minecraft/config/opencomputers/settings.conf, 607 строка). Сохраните и закройте файл (Ctrl+S, Ctrl+X). Перезагрузите робота и откройте приложение на Android'е. Выберите используемые моды, дождитесь загрузки. Проблемы: 1. Если предмет переименован на наковальне, его иконка не будет найдена (вместо этого будет видно новое название и количество). 2. Если предмет имеет NBT (зачарования, прочность, заряд и т.д.) сортировка попытается соединить их в 1 стак. В итоге предмет останется в инвентаре робота. 3. Задержка доставки команд - около 5 секунд. Можно изменить в файле server.lua UPD: Некорректная работа в одиночной игре, если язык - русский. В таком случае нужно переключится на английский (США) либо текстуры нужно переименовывать на русский язык вручную, BlocksRenderer не умеет сохранять Items с кириллицей. На серверах работает правильно вне зависимости от языка. TODO: 1. Более удобное сканирование сундуков (например по диапазону координат). 2. Перенос текстур из assets приложения в кэш (в папку Android/media) для того, чтобы дать пользователю возможность добавления новых текстур без перекомпиляции. Если нужно добавить мод, которого нет в списке, см. видео. Для выполнения нужно скачать скрипт и установить Python.
  3. 1 балл
    Coverett - библиотека для взаимодействия с HLAPI устройствами мода OpenComputers II. Что такое HLAPI устройство? Это новый тип устройств в OC2, к которому относятся большинство девайсов, вроде модулей для робота, красной карты, звуковой карты и прочих. Они управляются через "контроллер", который общается JSON сообщениями с компьютером через символьный файл-поток (по умолчанию "/dev/hvc0"). Для Lua автор уже добавил в систему библиотеку "devices", однако она не слишком быстра, как и Lua в целом. Для С (куда в первую очередь писалась библиотека) работа с JSON сообщениями - довольно утомительная задача. Coverett призван упростить общение с HLAPI устройствами в C и совместимых с ним языках. Разумеется, программы не станут от этого очень легкими в написании, C есть C. Однако, процесс разработки программ для OC2 заметно упростится. Сама по себе библиотека состоит только из "ядра" с набором стандартных функций. Наборы функций для устройств подключаются в виде отдельных "модулей" (папка devices) со своими заголовочными файлами (заголовки нужных устройств затем подключаются в исходнике программы). Поэтому, если вы очень хороший знаток C, то можете писать модули для своих устройств и подключать их к библиотеке при сборке. К сожалению на данный момент полноценная документация еще не готова (две руки - очень мало), но в заголовочных файлах библиотеки есть небольшие комментарии-описания (в формате doxygen), а также несколько программ-примеров, что немного поможет в работе с библиотекой. Также необходимо учесть, что библиотека находится в альфа-стадии. Поэтому не исключено наличие багов и (особенно) утечек памяти, поскольку ранее на C я практически не писал)). Репозиторий на GitHub. (Инструкция по сборке, а также собранная библиотека и программы находятся там) Немного про скорость:
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...