Пятничные факты #272 – Графический интерфейс меню модов

Spread the love

опубликовал Twinsen

Привет,
большая часть команды посещает GDS, если вы находитесь в Праге и заинтересованы в Играх, вы также можете приехать.

Новый интерфейс управления / установки / обновления модов (Twinsen)

Когда мы пересматривали  главное меню, улучшая внешний вид, а иногда и взаимодействие большинства графических интерфейсов, было очевидно, что управление модами требует некоторого внимания. Большая часть взаимодействия была довольно неинтуитивным и ограниченным, и большинство игроков предпочитают использовать веб-версию и управлять файлами вручную.

Моды будут управляться, устанавливаться и обновляться из одного и того же графического интерфейса, а три операции отображаются как 3 вкладки. Взаимодействие, расположение и интуитивность GUI должны быть значительно улучшены. Меню по-прежнему не будет иметь всех возможностей онлайн-портала (например, обсуждения), но обеспечивает очень быстрый способ установки и обновления модов без необходимости работать с  файлами.

Обратите внимание, что это всего лишь макеты, интеграция в игру начнется в ближайшее время, и это должно быть сделано для 0,17.

Наиболее заметные изменения:

  • Отображаются только моды, совместимые с вашей версией игры.
  • Список видимых модов может быть дополнительно отфильтрован по их категории.
  • Моды будут иметь изображение при просмотре списка модов.
  • При обновлении модов вы можете четко видеть номера версий, просматривать журнал изменений и выбирать, какие обновления, если таковые имеются, вы хотите пропустить.

Как обычно, я написал внутренний документ, который будет использоваться в качестве справки. Это довольно скучно и содержит ту же информацию, только более подробную. Если вы действительно этого хотите, вы можете увидеть его здесь.

Требуются инварианты (Rseding)

В версии Factorio давно у нас была эта повторяющаяся проблема с предметами и инвентарями. Когда элемент был добавлен или удален из некоторого инвентаря, он предназначен для создания события о том, что изменилось. Эти события используются для множества разных вещей и допускают много упрощений и оптимизаций кода, таких как «отключить вставку до появления нового элемента в сундуке, который он берет». Он работал так:

  • Код для удаления / добавления некоторого элемента в некоторые ресурсы
  • Некоторая логика с этими пунктами
  • Отправить событие о том, что изменилось в инвентаре

Однако, как и в большинстве вещей – все изменилось. Кто-то добавит новую логику или просто забудет и не отправит измененное событие. Ведь – программисты и люди, и мы совершаем ошибки. Проблема повторялась, и было невероятно сложно проверить, потому что вы не можете написать тест на какую-то логику, которая еще не существует: вы не можете проверить, что что-то правильно, пока вы не написали ее, и если вы забыли отправить измененное событие, вы можете забыть написать тест, который проверяет, что вы его не забыли.

Единственное решение, которое я мог придумать для «человеческой проблемы», – это удалить человеческую часть проблемы. Если нам больше не нужно запоминать, чтобы написать код для отправки события, и он «просто произошел автоматически» в любое время, когда мы меняли предметы вокруг, проблема просто исчезла. Этот инвариант, который меняет любой элемент, отправляет событие – решил проблему. Однако это также научило меня чему-то: если какой-то инвариант когда-либо позволял меняться (кроме очевидного «инварианта, который меняется, не является инвариантом»), это совершенно бесполезно.

Инварианты – удивительные инструменты. Мы можем написать тесты для обеспечения инварианта. Программистам не нужно думать о том, как обращаться с вещами вне инварианта, потому что они всегда могут сказать: «он должен работать, как описывает инвариант, поэтому мне просто не нужно обрабатывать другие случаи». Если инвариант когда-либо сломался, это явно ошибка и имеет четкое решение.

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

Как всегда, дайте нам знать, что вы думаете на нашем форуме.


Комментарии: