Berserker Wrote:Ещё остаётся проблема сериализации-сохрания-десириализации-загрузки данных модулей, размер этих данных, возможность отгрузки/перезагрузки модулей на лету и другие "мелочи".
Пока придумал вот что:
Инициализируются скрипты при запуске игры, а так же при старте карты. Под инициализацией подразумевается считывание кода всех файлов скриптов в оперативную память (в виде простых строк, содержащих нескомпилированный код скрипта) и их выполнение (т. е. объявление функций и пр. в модулях).
В самом модуле должны храниться только статические части скрипта (функции, классы, константы и т. д.), а так же временные переменные, которым не нужно быть сохранёнными при сохранении игры. Для меняющихся данных (глобальных переменных, не содержащих кода) выделяется специальный словарь (каждому модулю), доступ к которому есть из функций скрипта (но, скорее всего, не из его собственного кода без функций. В этом случае будет зарезервированная функция "init_", выполняющаяся при инициализации модуля, после того, как туда добавится ссылка на его словарь).
При сохранении игры сохраняется код скриптов из оперативной памяти (просто строки: имена файлов и их содержимое), а так же словари данных (скорее всего, при помощи стандартного питоновского модуля "pickle").
При загрузке игры сохранённый код скриптов выполняются (каждый в своём модуле), после этого распаковываются словари данных.
При экспортировании - код скриптов из оперативной памяти записывается в файлы.
При импортировании происходит резервное сохранение словарей данных, очистка всего, инициализация скриптов, восстановление словарей.
Учитывая, что инициализация - не очень тяжёлая команда (она, по сути, только объявляет функции и т. п.), всё должно быть довольно быстро.
Что с объёмом памяти сейва - представить сложно. Но, насколько я понимаю, строки неплохо запаковываются, и в запакованном виде он будет не так и велик.
Возможно, будут отдельные словари для данных, которые не будут грузиться из сейва (т. е. очищаются - только при выходе из игры) для скриптов, которые будут действовать с момента начала игры (в главном меню и т. п.).
Как с кампаниями - не знаю. Просто не обладаю информацией, о том, что там куда сохраняется.