Блог розробників (FFF#272) – GUI меню модів

Поделиться

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

Привіт,
велика частина команди відвідує GDS, якщо ви перебуваєте в Празі і зацікавлені в Іграх, ви також можете приїхати.

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

Коли ми переглядали головне меню, покращуючи зовнішній вигляд, а іноді і взаємодію більшості графічних інтерфейсів, було очевидно, що управління модами вимагає деякої уваги. Велика частина взаємодії була досить неінтуітівна і обмежена, і більшість гравців вважають за краще використовувати веб-версію і управляти файлами вручну.

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

Зверніть увагу, що це всього лише макети, інтеграція в гру почнеться найближчим часом, і це повинно бути зроблено для 0,17.

Найбільш помітні зміни:

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

Як завжди, я написав внутрішній документ, який буде використовуватися в якості довідки. Це досить нудно і містить ту ж інформацію, тільки більш детальну. Якщо ви дійсно цього хочете, ви можете побачити його тут.

Потрібні інваріанти (Rseding)

У версії Factorio давно у нас була ця повторювана проблема з предметами і інвентарем. Коли елемент був доданий або вилучений з деякого інвентарю, він призначений для створення події про те, що змінилося. Ці події використовуються для безлічі різних речей і допускають багато спрощень і оптимізацій коду, таких як «відключити вставку до появи нового елементу в ящику, який він бере». Він працював так:

  • Код для видалення / додавання деякого елемента в інвентар
  • Деяка логіка з цими предметами
  • Надіслати подія про те, що змінилося в інвентарі

Однак, як і в більшості речей – все змінилося. Хтось додасть нову логіку або просто забуде і не відправить змінену подію. Адже – програмісти  люди, і ми робимо помилки. Проблема повторювалася, і було неймовірно складно її перевірити, тому що ви не можете написати тест на якусь логіку, яка ще не існує: ви не можете перевірити, що щось правильно, поки ви не написали її, і якщо ви забули відправити змінену подію, ви можете забути написати тест, який перевіряє, що ви його не забули.

Єдине рішення, яке я міг придумати для «людської проблеми», – це видалити людську частину проблеми. Якщо нам більше не потрібно запам’ятовувати написання коду для відправки події, і він «просто стався автоматично» в будь-який час, коли ми міняли предмети навколо, проблема просто зникла. Цей інваріант, який змінює будь-який елемент, відправляє подію – вирішив проблему. Однак це також навчило мене чогось: якщо якийсь інваріант будь-коли дозволяв змінюватися (крім очевидного «інваріант, який змінюється, не є інваріантом»), це абсолютно марно.

Інваріанти – дивовижні інструменти. Ми можемо написати тести для забезпечення інваріанта. Програмістам не потрібно думати про те, як поводитися з речами поза інваріанта, тому що вони завжди можуть сказати: «він повинен працювати, як описує інваріант, тому мені просто не потрібно обробляти інші випадки». Якщо інваріант будь-коли зламався, це явно помилка і має чітке рішення.

Також можна згадати щось на кшталт: Інваріанти також роблять для більш чистого коду, тому що нам не потрібно додавати багато надлишкової перевірки помилок на кожному рівні логіки.

Як завжди, дайте нам знати, що ви думаєте на нашому форумі.


Поделиться

Comments: