JaggerDer
Пользователи-
Публикации
34 -
Зарегистрирован
-
Посещение
-
Победитель дней
6
Тип публикации
Блоги
Профили
Форум
Багтрекер
Магазин
Все публикации пользователя JaggerDer
-
Вон в стандартном event есть таймер считающий в секундах. Этот таймер еще может выполнятся на "фоне". Велосипед написал, ИМХО. К слову... Слушатели событий и таймеры позволяют творить чудеса без излишнего геммороя с coroutine.
-
Библиотека CURSOR ...позволяет создавать виртуальный курсор и предоставляет набор функций для управления им. Предполагается, что библиотека будет использоваться для создания различных текстовых полей, текстовых редакторов и т.п. Что умеет? Умеет перемещать курсор по тексту! А так же реализует основные возможности простейшего текстового редактора, такие как удалить символ, вставить символ, перенос строки, слияние двух строк... Немного о устройстве Библиотека позволяет создавать несколько независимых друг от друга курсоров, каждый из которых имеет свою позицию на тексте в трех экземплярах: Абсолютное положение Относительное положение Разность абсолютного и относительного - иначе просто дельта Кроме того каждый курсор хранит в себе массив строк. Абсолютные координаты для определения курсора в тексте; Относительные координаты используются только в пределах зоны редактирования текста; Дельта говорит нам о том насколько сильно разошлись эти значения: эта информация полезна для отрисовки текста. Вот и все, такая небольшая библиотека вышла. Описание функций Все функции описаны в файле с кодом. Выдержка: Скачать https://github.com/Pirnogion/OpenComputers_library/blob/master/cursor/cursor.lua https://github.com/Pirnogion/OpenComputers_library/blob/master/cursor/cursor-demo.lua Библиотека: wget https://raw.githubusercontent.com/Pirnogion/OpenComputers_library/master/cursor/cursor.lua lib/cursor.lua -f Демонстрация: wget https://raw.githubusercontent.com/Pirnogion/OpenComputers_library/master/cursor/cursor-demo.lua cursor-demo.lua -f
-
Нет. Тут немного не так. Требуется найти наиболее близкий по оттенку цвет к нужному, а не просто ближайший к нему цвет. Если начать искать ближайший цвет, то получится "немного" странные оттенки. Например я задам темнозеленый, а мне вернет непонятный оттенок красного. И да, эта функция очень медленная... Как ускорить ее мы не знаем. Простой поиск близкого по значению цвета дает не те результаты.
- 8 ответов
-
- палитра
- конвертация
-
(и ещё 1 )
Теги:
-
То же похвастаюсь. Сделал прогу, чтобы управлять роботом, которая делает карту местности и позволяет контролить инвентарь и отдавать простейшие команды роботу. Но отчего-то мне лень ее доделывать, очень лень. На планшет та же программа, но более мелкий интерфейс и другие цвета. А еще есть шняжка, которая привязывает робота к компу по разрешению.
-
А для чего нужна среда? Если не считать автозагрузку библиотек - интересная фича. Вон слушатели событий есть и в стандартных либах: http://ocdoc.cil.li/api:event.
-
Слушай, а ты похоже прав. Плюс прога в вечный цикл уйдет.
-
Какую ошибку кидает? Если ошибок не кидает, то что именно не работает? Что задумывалось? Слишком сложна, мой экстрасенс не понимать.
-
LeshaInc, успокойся. Уже можно не паниковать, т.к. все работает - проверено.
-
Спокойно. Без паники. Только спокойствие. Исправил. Последние две функции я переписывал с JavaScript и немного накосячил. На всякий случай сейчас проверю их в майне.
-
У меня в закромах завалялся небольшой файлик с функциями для работы с прямоугольниками. Лично мне эта библиотечка понадобилась всего пару раз(для создания кнопок). И я посчитал, что, может быть, все эти функции могут кому-то понадобиться. Как всегда приведу краткое описание функций: CreateRectXYWH(name:string, x:number, y:number, width:number, height:number):table Создает структуру прямоугольника используя информацию о местоположении(x, y),высоте и ширине. CreateRectXYXY(name:string, sx:number, sy:number, ex:number, ey:number):table Создает структуру прямоугольника используя информацию о местоположении двух точкек. CreateVoidRect(name:string):table Создает "пустой" прямоугольник, т.е. структуру с нулевыми значениями. PointInRectFree(x:number, y:number, sx:number, sy:number, ex:number, ey:number):boolean Проверяет, лежит ли точка(x, y) внутри прямоугольника заданного двумя точками. Возвращает true, если точка лежит внутри прямоугольника, а false в противном случае. PointInRect(x:number, y:number, rect:table):boolean Делает то же самое что и PointInRectFree, только с использованием структуры прямоугольника. bIntersectRects(rect1:table, rect2:table):boolean Проверяет, пересеклись ли два прямоугольника, возвращает true, если да. False - если нет. IntersectRects(rect1:table, rect2:table):table Делает то же самое, что и bIntersectRects, но возвращает прямоугольник образованный пересечением двух заданных. Структура прямоугольника выглядит следующим образом: local _rectangle = { ["name"] = name, ["sx"] = x, ["sy"] = y, ["ex"] = x+width, ["ey"] = y+height, ["width"] = width, ["height"] = height, ["area"] = width * height } name - название прямоугольника. sx, sy - первая точка прямоугольника. ex, ey - вторая точка прямоугольника. width, height - ширина высота. area - площадь прямоугольника. То что мне нравиться тут, так это то, что мы можем задать прямоугольник как x, y, width, height и такие параметры как sx, sy, ex, ey вычислятся автоматически. :3 Так же я написал "небольшой" пример, который использует все функции библиотеки и выдает следующее: Скачать можно с репозитория гитхаба или установив с помощью следующей строки: Библиотека: wget https://raw.githubusercontent.com/Pirnogion/OpenComputers_library/master/others/rectangle.lua lib/rectangle.lua Пример: wget https://raw.githubusercontent.com/Pirnogion/OpenComputers_library/master/others/rectExample rectExample
-
В стародавние времена я делал нечто подобное на Python(там все это дело делается относительно легко), когда писал плагин для SublimeText2. С помощью плагина можно изменять пасты на пастебине. Но мне кажется это неудобным, т.к. при способе "косить под браузер", через настоящий браузер придется перелогиниваться. Но ведь мне, как пользователю такого приложения, не хочется терять свою сессию в браузере... Короче, все это жутко неудобно. Посему считаю, что польза от такого приложения будет невелика, относительно гемморя, который придется испытать при его использовании и написании, и, следовательно, лучше заняться чем-нибудь более полезным. Например изучить как взимодействовать с гитхабом. Или изучением русского языка.
-
Еще можно написать велосипед. Но это на тот случай, если захочется изучить как в ОС скрипты писать или просто на lua(в данном случае), или понять самому как все эти библиотеки работают(примерно) - гемморой одним словом. Зато скилл повышает. Мне кажется, что все проходили через стадию написания своей GUI библиотеки Про то как это сделать могу описать примерно, как говорится в двух словах, т.к. возможных вариантов реализации о-о-очень много. Самый легкий спопоб это просто ловить эвент нажатия кнопки мыши в вечном цикле. Далее из эвента вытаскивать координаты и проверять лежит ли эта координата внутри некого прямоугольника, которым в нашем случае является кнопка. Код примерно такой: Информацию о всяких эвентах и встроенных библиотеках можно найти тут: http://ocdoc.cil.li.
-
Идея интересная, но все же, если так сделать, то не будет возможности нарисовать любой другой символ.
-
Какая разница кто там докажет. Просто допили скрипт свой, а когда посчитаешь, что программа уже готова, то можно смело выкладывать. Ругать точно никто не будет.
- 21 ответ
-
- 1
-
-
Интересная идея, мне понравилась. Уже сделал Можно хранить до 255 картинок в одном файле(выделить больше 1 байта на кол-во картинок не позволила большая жаба).
-
Но монитор третьего уровня почему-то выводит больше чем 240 цветов и больше 16 цветов grayscale. Но за формулу все-равно спасибо. Вот таблица цветов, которую я сгенерировал по вашей формуле. Может быть я где-то накосячил. Код генерации таблицы:
-
Сделал пару обновлений библиотеки. Добавил альфа-канал и провел пару оптимизаций. Достижение получено Написать и придумать РАБОЧИЙ формат картинок
-
"Недавно" почитал о формате .png и под впечатлением(ради чего сделал бесполезную семибайтную подпись файла) решил придумать свой формат изображения для OpenComputers и, естественно библиотеку для работы с ним. Изображение закодированное в этом формате имеет малый размер, поддерживает альфа-канал и в нем возможно закодировать utf8 символ на "пискель". Картинки: Библиотека для работы с .ocif Конечно же я сделал библиотеку для работы с форматом. Точнее сказать библиотека сделала формат, но это неважно. Сама же библиотека умеет делать три тривиальные вещи: Кодировать изображение и записывать в файл: write( filename:string, image:table, full_array:bool ):nil filename - название файла, в который запишется закодированное изображение image - массив изображения; может быть представлен в двух форматах: удобном для восприятия и оптимизированным для уменьшения занимаемой оперативной памяти full_array - выбор формата массива: true - "удобный" массив, в ином случае оптимизированный Читать изображение: read( filename:string, full_array:bool ):table filename - название файла, который будет прочитан и декодирован. Результат возвращается в виде оптимизированного формата массива full_array - выбор формата массива: true - "удобный" массив, в ином случае оптимизированный Рисовать прочитанное изображение: draw(image:table, frame:number, rawPosX:number, drawPosY:number, gpu:table ):nil image - принимает оптимизированный формат изображения frame - выбор фрейма, который будет отрисован. drawPosX, drawPosY - позиция с которой происходит отрисовка gpu - ваша видеокарта Функция неоптимизирована и нестабильна! Так же теперь есть небольшие настройки: Выбор режима работы: setMode( mode:string ):bool на данный момент режима только два, это: "24bit" - 24bit формат, и стандартный: "8bit" или nil - то есть 8bit. 24bit требует больше места для хранения, но точно передает все доступные цвета; 8bit занимет меньше места на диске, но у него хромает цветопередача(240 цветных оттенков + 16 оттенков серого). Выбор месторасположения файла ралитры: setPalette( palette_path:string ):nil выбирает местораположение файла с палитрой, т.к. вам, вероятно, будет неудобен стандартный вариант с расположением в корне и названием "palette.cia". В режиме 8bit необходимо загружать палитру этой функцией! Это собственно и все, что она умеет делать. .OCIF - Open Computers Image Format Так как объяснить как работает данный формат стало тяжело даже мне, я решил удалить этот раздел, пока не придумаю как описать то, что происходит в этой адской системе. Но вкраце расскажу. "Пиксель" в данном формате кодируется 4 байтами в лучшем случае и 9 байтами в худшем(т.к размер utf8 символа в байтах имеет переменную длину). Первый байт кодирует цвет символа, второй - цвет фона, третий - альфа-канал, а остальными байтами кодируется символ. В файл также записывается такая служебная информация как подпись формата и ширина с высотой изображения. Расскажу немного о массивах, в которых у нас хранится раскодированное изображение. Таких массива у нас два: обычный и оптимизированный. В первом массиве очень удобно редактировать нашу картинку, иначе он прост для восприятия, относительно; второй массив является оптимизированным, то есть его невозможно читать. Оптимизированный вид массива сделан для того, чтобы он занимал меньше места в оперативной памяти, так как изображения в памяти занимают достаточно много места. Так же данный формат поддерживает альфа-канал. Вот так выглядит обыный массив: А так оптимизированный: Думаю это наглядно объяснит, почему лучше не надо редактировать во втором формате массива? Установка Установка библиотеки: wget https://raw.githubusercontent.com/Pirnogion/OpenComputers_library/master/ocif/ocif.lua lib/ocif.lua Установка цветовой палитры: wget https://raw.githubusercontent.com/Pirnogion/OpenComputers_library/master/ocif/palette.cia lib/palette.cia Установка примера: wget https://raw.githubusercontent.com/Pirnogion/OpenComputers_library/master/ocif/example.lua /example В завершение Весь исходный код можно посмотреть на GitHub: https://github.com/Pirnogion/OpenComputers_library/tree/master/ocif З.Ы. Насчет бита-терминатора - так его обозвали в википедии, ко мне никаких претензий. З.Ы.Ы. Насчет моего английского - ОТСТАНЬТЕ! Во всем виноват Google translate. Обновления Обновление 1: Добавил альфа-канал, теперь есть возможность делать изображение полупрозрачными. Так же изменил "форму" массива(сырого изображения) для того, чтобы он занимал меньше оперативной памяти, к сожалению массив стал менее понятным "из кода". Добавил пример, который показывает как пользоваться библиотекой. Обновление 2: Изменил способ кодировки, теперь файл занимает вдвое меньший размер на диске. Добавил оптимизированный формат массива сырого изображения. Сделал возможность передавать массив в двух форматах. Небольшой фикс примера. Обновление 3: Изменил способ конвертации цветов при помощи формулы на таблицу цветов. Теперь для работы нужен файл цветовой палитры. Появились небольшие цветопотери. Неясно почему. Обновление 4: Исправил ситуацию с потерей цветов. Теперь можно выбирать режим работы 24bit(без цветопотерь) или 8bit(с небольшой потерей цветов). В первом случае размер файла выходит больше, а во-втором, соответственно, меньше. Обновление 5: Выловил кучу багов и сделал некоторые оптимизации Обновление 6: Добавил по предложению одного человека, возможность записывать в один файл до нескольких изображений. Добавил возможность чтения изображения в "удобной", неоптимизированной формате массива. Убрал принудительную загрузку палитры. Теперь ее необходимо прогружать функцией setPalette.
-
В сингле разрешения для КБ не нужны, только режим креатива. Если на сервере то нужен режим креатива, опка и разрешение в конфиге. Кстати, в КБ при малейшей ошибке в NBT данных всяк команда перестает работать. Может где запятую не поставил или закрывающую скобку. В длинных командах можно и пропустить нечаянно. Или просто кусочек реда пропустил, из-за чего вся система КБ не пашет. Есть вопрос. Какая именно команда не пашет? Или ни одна не работает?
-
Можно сделать 3-4 паттерна пушки. Если бы я делал пушку исключительно на КБ, то я бы так и сделал, и хранил паттерны в мире. А с компами круче. Компьютер - это своего рода огромный носитель информации в одном блоке, куда можно занести все паттерны. Если КБ блок компьютером обновляется достаточно быстро, то можно весь тир сделать с помощью одного КБ и одного компьютера. Игрок майнкрафта вряд ли будет расстроен пушкой из блоков. Это как старые пиксельные игры: на экране нарисовано два или три пиксела с двумя кадрами анимации, а воспринимаются они как полноценное "высокодетализированное" оружие. И этого достаточно. Стреляешь вправо - пушка вправо, влево - пушка влево, где то по центру - пушка по центру. Голопроектор же, скорее будет восприниматься как HD модель, и следовательно требования будут предъявляться к нему жестче. Неосознанно глаз будет цепляться за такие моменты как малое количество вокселей, недостаточности анимации, детализации и бог знает чего еще. По аналогии с тем, что было написано в предыдущем абзаце, голопроектор можно сравнить с новыми играми где одна мутная текстурка в углу уровня портит впечатление от всего игрового левела. А если учесть, что делать анимацию, детализацию, раскраску и прочее нужно вручную, т.е. писать кучу кода, а это еще и множество технических сложностей, по типу сжатия кадров анимации или просчета поворота модельки, да и время разработки такого чуда может затянуться черт знает на сколько.
-
Ммм... Попробую сделать такую штукенцию.
-
У меня в программе по клику мыши по GUI выбирается цвет bg, а по даблклику цвет символа. Выходит так, что цвет символа и фона становятся одинаковыми. Спасибо за ответы.
-
Я здесь и у меня несколько вопросов. Где можно посмотреть как работают стандартные события os.pullEvent и os.pullEventRaw, другими словами хочу посмотреть на их исходный код. Я хочу сделать свое событие mouse_double_click. Я его сделал. Работает. Да. С костылями. С костылями по типу parallel и отправки второго кастомного события mouse_click_checked(тот же самый mouse_click, только с окончанием _checked). В чем проблема? Проблема в том, что без костыля mouse_event_checked, события mouse_double_click и mouse_click начинают конкурировать, причем mouse_click выигрывет эту войну. Возможно ли как то переписать mouse_click так, чтобы при двойном щелчке отправлялось мое событие mouse_double_click, а mouse_click подавлялось? Если двойного щелчка нет, то mouse_click не подавляется, а mouse_double_click не отправляется в пул. Повторюсь. Алгоритм двойного щелчка у меня есть. Как переписать событие mouse_click?
-
Хочу знать, что делает вот это: os.pullEventRaw=SingleThread или os.pullEventRaw=MultiThread. Получается то, что мы присваиваем "не понимаю чему, но судя по названию пулу" pullEventRaw указатель на функцию SingleThread или MultiThread? Почему и зачем это нужно? А так же зачем нужно делать вот это: if coroutine.status( co ) == "dead" then filter[co],co=nil,next(filter,co) else То есть, если подпрограмма остановлена, то получаем список её аргументов из filters. Затем удаляем указатель на подпрограмму, чтобы её потом скушал сборщик мусора. Затем получаем следующие аргументы для последующей подпрограммы. Зачем нужно получать аргументы подпрограммы co если эти полученные значения в данный момент не используются? Или тут какое то хитромудреное присваивание? Просто я никак не могу понять, что эта строка делает...
-
Интересная тема, на днях то же посетила подобная идея, только с придумыванием головоломок есть сложность. Компьютеры позволяют делать все что хочешь, так что ограничивать игрока достаточно сложно, так как можно будет придумать 1001 способ обхода мимо головоломки: самый нехороший, по моему мнению, это подправить код головоломки. Так что, наверное, придется использовать связку сервер-клиент: пишем на клиент-компьютере программу и она отсылается на сервер на выполнение.
