Все заметки

Восстанавливаем состояние редактора при перезапуске

Лето выдалось не очень продуктивным. После гейм джема я вяло вносил правки в игру, а потом поехал в отпуск, после которого тоже надо было отдохнуть.

Ludum Dare проходит два раза в год и следующий раз уже не за горами – 4 октября. Самое время вспомнить какие проблемы возникали во время разработки игры на апрельском эвенте.

Одна из таких проблем – при перезапуске редактора сбрасываются все настройки вроде размера сетки, выбранного уровня или открытых табов. Перезапускать его при этом приходится часто. Чтобы созданные для игры компоненты и системы подгружались в редакторе, нужно обновить страницу, поскольку под капотом редактора webpack пересобирает код, который берет из проекта с игрой. Возможно тут можно прикрутить hot module replacement чтобы перезагрузка не требовалась, но даже если редактор был закрыт, хотелось бы продолжить с того места на котором остановился.

Один из вариантов – использовать local storage, но порт на котором запускается редактор выбирается случайным образом для избежания коллизий с другими приложениями, поэтому доступ к сохраненным данным можно легко потерять.

Другой вариант – хранить состояние в файле. Способ простой и надежный. На нем я и остановился. Написал класс прослойку PersistentStorage, который отдает get, set методы, под капотом хранит все в обычном объекте и периодически пишет изменения в файл через node апишку проброшенную через electron. Далее во всех местах редактора, где было желание прихранить состояние, я добавил обращение к PersistentStorage.

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

Возвращаться к работе после долгого перерыва может быть тяжело, особенно если тебе за нее не платят, но я постарался взять быструю и понятную задачу и заставлял себя хотя бы по минут 15-20 в день смотреть в проект и писать пару строчек кода. Так и вернулся настрой.