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

Totoro

Гуру
  • Публикации

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

  • Посещение

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

    289

Все публикации пользователя Totoro

  1. Помните мост Рида? Ну так вот. Я тут изучаю Rust на досуге, и пишу мини проекты. Так и получился у меня... Stem Это интернет мост для OpenComputers. Что такое мост Для тех кто не знает что такое мост, и для чего он нужен: мост дает примерно такие же возможности как и linked карта. Он позволяет связать между собой компьютеры OpenComputers, где бы они не находились. Только мост реализует это через интернет карту. Однако по сравнению с linked картой есть один очень крутой плюс. Вы можете подключиться к своему OpenComputers компу не только с другого OpenComputers компа из Майнкрафта, но и из реального мира. Например с телефона. Или с вашего домашнего компьютера. Отличие от моста Рида Я немного по другому подошел к архитектуре проекта. Вместо попарного соединения, Stem реализует систему каналов. Работает это очень просто. Вы можете: 1) послать сообщение в канал X 2) подписаться на сообщения из канала X Количество подписчиков не ограничено. Количество клиентов которые могут посылать сообщения в канал тоже не ограничено. ID канала (по которому происходит подписка и отправка сообщений) служит заодно и паролем к нему. Поэтому если вы хотите создать публично доступный канал - просто опубликуйте его ID. А если хотите создать свой, приватный, канал - просто возьмите ID подлиннее и никому его не открывайте. ID - это последовательность любых байт длиной до 256. Число комбинаций (256 в степени 256) это огромное число, так что уникальных ключей хватит надолго. Пример local event = require('event') -- подключаем STEM local stem = require('stem') -- присоединяемся к серверу STEM local server = stem.connect('stem.fomalhaut.me') -- просим сервер присылать нам сообщения с канала 'my-channel-id' server:subscribe('my-channel-id') -- слушаем эвент 'stem_message' в цикле while true do local name, channel_id, message = event.pull('stem_message') if name ~= nil then print(channel_id, message) end end -- ...или регистрируем листенер event.listen('stem_message', function(_, channel_id, message) print(channel_id, message) end) -- мы можем посылать сообщение в канал -- (причем не обязательно быть подписанным на этот канал -- достаточно просто его ID) server:send('my-channel-id', 'hello there') -- просим сервер перестать присылать сообщение с канала server:unsubscribe('my-channel-id') -- полностью отключаемся от сервера STEM server:disconnect() Одновременно можно работать с несколькими серверами Stem и с любым количеством каналов. Библиотека stem.lua Библиотечку можно скачать напрямую по этой ссылке: https://gitlab.com/UnicornFreedom/stem/raw/master/stem.lua Либо установить через HPM: hpm install stem Подробная документация по командам библиотеки находится здесь. Сервер STEM Дефолтный сервер STEM запущен у меня на VPS по адресу: https://stem.fomalhaut.me/ Можете смело его использовать. Единственное, что это тестовый сервер пока. Может пропадать или менять протокол. Новости постараюсь писать сюда. Исходный код проекта находится тут: https://gitlab.com/UnicornFreedom/stem Вы можете скомпилировать его под свою систему и запустить где угодно. Настраивается сервер файлом stem.toml в корневой папке. Дефолтный конфиг может выглядеть так: [tcp] host = '127.0.0.1' port = 5733 [web] host = '127.0.0.1' port = 5780 [general] ping_interval = 60 Чтобы получить полностью свой отдельный и независимый сервер STEM, достаточно будет просто запустить бинарник, получившийся после компиляции. Не забудьте также положить в папку с бинарником папки static и templates. Они нужны для веб-интерфейса. Сервер мультипоточный, и очень производительный. Должен тянуть довольно большие объемы трафика. Но точных бенчмарков я не проводил. Если есть желающие - пишите в IRC, скооперируемся и померяем. 😃 Для того чтобы видеть логи сервера, используйте переменную окружения RUST_LOG. Например чтобы включить полное отображение всех логов: $ RUST_LOG=stem ./stem Веб-интерфейс Если перейти по ссылке на сервер STEM то вы увидите... веб-интерфейс. Веб интерфейс показывает счетчик активных каналов и сессий (клиентских подключений). Кроме того, он дает возможность подключиться к любому каналу STEM и поучаствовать в приеме-передаче сообщений прямо через сайт. Единственное ограничение - как ID канала, так и контент сообщений ограничивается тем, что можно закодировать в UTF-8. Ну вот и все Мост в принципе уже полностью работоспособен. Все идеи, пожелания, отчеты о багах пишите сюда, либо на issue трекер в репозитории. Если кто-нибудь хочет помочь с написанием клиента STEM на своём любимом языке программирования - обращайтесь ко мне в ЛС, IRC или пишите в этой теме. Написать клиент несложно - для примера можно глянуть на код библиотеки для OpenComputers. Она состоит всего из 150 строк кода. Enjoy! 😃
  2. Кстати, вспомнил еще один способ. Раз уж программа использует главный redstone component, то можно просто переназначить главный компонент на другой адрес. Это можно сделать либо программно, либо с использованием программки primary, которая есть в OpenOS. Использовать так: primary redstone <адрес компонента>. Адрес можно скопировать анализатором, если я правильно помню.
  3. В идеале такое изнутри программы делается. Потому что если программа тупо использует "главный" редстоун компонент - она и будет его использовать. А тебе надо обращаться к компоненту по адресу.
  4. Палево мультиакка. ) Кстати, учитывая что сервера у нас больше нет, мультиакки все еще под запретом? Или уже пофигу.
  5. Это просто факт. Так реализован интерпретатор Луа. Для локальных переменных присваивание идет слева направо, для глобальных - справа налево. Как сказал сам Роберто Иерузалимски: "Evaluation order and assignment order are both explicitly undefined." То есть, порядок вычисления и присваивания спецификацией языка не определен, и может быть любым теоретически. Поэтому полагаться на него нельзя. Он может меняться между различными реализациями интерпретатора. Небольшое исследование на тему можно полистать тут: http://lua-users.org/lists/lua-l/2006-06/msg00376.html
  6. Totoro

    Upong

    Дальше кто?
  7. Totoro

    Upong

    Меня тут попросили что-нибудь написать в блог. Например про мои заброшенные проекты. Честно перелопатил свои репозитории, но не нашел ничего интересного. Ни одного интересного заброшенного проекта. Просто беда какая-то. Даже на секунду померещился нимб над головой (такой наверняка есть у любого программиста, который всегда дописывает все свои проекты до единого). Но потом я пошел посмотрел в зеркало и морок пропал. Поэтому вот скриншотик из пинг-понга, который я начал было писать, чтобы потренироваться в работе с сетью (хотел приделать туда мультиплеер). Но дальше фотошопа (точнее гимпа) меню у меня дело не ушло, писать одному было скучно, и быстро нашлись дела по-прикольнее. Сохранился даже репозиторий: https://github.com/MoonlightOwl/Upong
  8. Это Леха коллизии тестит. Вообще обычные пули не должны друг друга проверять.
  9. А потом останется только запилить эквалайзер, добавить название трека, и можно бросать геймдев и пилить канал на Youtube.
  10. Отлично! Я рад что у нас уже есть довольные пользователи.
  11. Итак, более предметное обсуждение переносим в эту тему: Разработка игры Determinant. Задачки по разработке (легкие и сложные) будут тут: https://gitlab.com/cc-ru/determinant/issues Каждая задача имеет приблизительный уровень сложности (weight) по десятибальной шкале. Если вам кажется что он не соответствует реальности - тоже пишите, поправим. 😃 Если какая-та задача вас зацепила и есть желание попробовать свои силы - пишите в комменты к задаче, я (или кто-нибудь еще из мейнтейнеров) поставит ее на вас и поможет создать ветку. Либо, если вы не знакомы с Git - просто скачайте свежие исходники игры из ветки dev (https://gitlab.com/cc-ru/determinant/-/archive/dev/determinant-dev.zip) и добавьте свой код. Затем запакуйте игру с изменениями в архив и скиньте мне или другому разработчику игры. Мы уже подровняем и зальем в Git.
  12. Для того чтобы запустить последнюю версию игры необходимо: Установить на комп Love2D (либо скачать портативную версию, либо удостовериться что у вас уже установлен Love2D) Скачать проект по этой ссылке: https://gitlab.com/cc-ru/determinant/-/archive/master/determinant-master.zip Распаковать архив куда-нибудь. Там появится папка `determinant-master`. Перетащить эту папку мышью на exe или на ярлык Love. Либо выполнить команду в консоли: `love <путь до папки determinant-master>`. Всё, игра должна запуститься. В общем и в целом, она запускается точно так же как и все остальные игрушки на Love2D. Так что если процедура вам знакома - проблем не должно быть. P.S. Если вы будете запускать с Линукса через портативный AppImage - указывайте в качестве аргумента полный путь до папки с проектом, потому что с относительными путями там баг.
  13. Итак, суммирую что сделано на текущий момент. Название: Determinant Описание: 2D мультиплеерный шутер, с видом сверху, с механикой игры в стиле Crimson Land. Стек: Lua, Love2D Репозиторий: https://gitlab.com/cc-ru/determinant Скрин логотипа и текущего состояния проекта: Разработка игры пойдет по Git Flow: основная ветка - master, в ней находится код последней рабочей версии, ветка разработки - dev, в ней идет текущая работа, новые фичи сливаются именно сюда, ветки для отдельных фич - feature-xxx, это ветки в которых будут работать отдельные участники проекта над отдельными фичами. По завершению фичи, делается код ревью кем-то опытным, потом ветка сливается в dev. Когда в dev накопится достаточное количество фич для выпуска новой версии - dev сливается в master и маркируется новым номером версии. Номера версий - по semver. То есть имеют вид <мажорная версия>.<минорная версия>.<патч-версия>. Стартуем с 0.1.0. Все, кто желает принять участие в написании проекта, или изложить свои идеи - пишите сюда, добавляйтесь в группу на GitLab, создавайте реквесты, issue и т.п. Можете заходить для обсуждения в IRC, сегодня у нас там есть даже 1Ridav.
  14. Я не знаю C# и не очень хочу его учить. =)
  15. Вариант названия предложенный после короткого мозгового штурма в IRC: Determinant UPD: посколько возражений не было, запилили репозиторий для проекта. Репозиторий: https://gitlab.com/cc-ru/determinant Желающие принять участие в разработке - добавляйтесь в группу на GitLab.
  16. Да хоть прямо сейчас. Только название надо придумать. Репозиторий предлагаю создать в нашей группе на GitLab: https://gitlab.com/cc-ru Для документации можно использовать wiki репозитория.
  17. В Love2D есть системы частиц и шейдеры. Так что я думаю, особенных проблем с эффектами не должно быть.
  18. Короче, потыкал я Defold, и у меня ощущение сложилось, что штука прикольная, но малость забагованная. Например - нельзя скрыть курсор мыши в игре по дефолту. Надо ставить модуль на C++ (DefOS). Но этот модуль почему-то не виден из кода игры. Ещё я не могу поймать эвент отпускания клавиши мыши. Только нажатие. Вроде все по документации сделал. Короче, либо я что-то упускаю, либо в Defold'е нас будут мучать десятки таких мелочей. Попробуйте тоже что-нибудь простенькое сделать, и поделитесь впечатлениями. Возможно старый добрый Love2D будет все таки лучшим выбором. 😃
  19. Ну тут не issue надо наверное писать, а сначала набросать диз-док небольшой. Что будет, как будет выглядеть, каких механик ждать. Какой-то план на ближайшее будущее. А потом его на issue нарежем. Что касается игры - пока рабочий вариант это 2D top-down шутер на фреймфорке Defold. С мультиплеером в идеале. Я сейчас как раз скачал Defold и смотрю что он может.
  20. 😁 Стиль можно и векторный сделать. Набросать что-то в каком-нибудь Inkscape даже легче чем рисовать пиксельарт. Самостоятельно писать движок, ИМХО, не стоит. Так как написание движка - это во первых достаточно сложно (потому что низкоуровнево), а во вторых это обычная ошибка людей, который садятся писать игру. Обычно на движке все и заканчивается.
  21. Я скачал Defold пощупать. Я так понимаю - что-то типа Game Maker на Луа. Все делается в редакторе Defold'а по большей части, есть физика, графика, атласы, шрифты, частицы и т.п. Есть даже какие-то шейдеры, если хочется.
×
×
  • Создать...