Появилась определенность в реализации командной строки, системных команд платформы, и способа расширения набора системных команд.
Поставленные цели:
- сделать командную строку удобной как для игрока так и для разработчика игр;
- освободить dll-движок от функций завязанных на интерфейс (run, save, load, и т.п);
- для большей гибкости платформы сделать возможным использование произвольных внешних функций.
Архитектура платформы не претерпела особых изменений:
- движок вынесен в отдельную dll;
- плеер представляет из себя интерфейс к dll-движку;
Внешние функции
Функции, реализованные в интерфейсе, является внешними по отношению к движку.
После загрузки dll возможно зарегистрировать неограниченное количество внешних функций.
Для регистрации необходимо передать в dll имя функции и указатель на эту функцию.
В программе на TOML вызов внешней функции происходит по зарегистрированному имени и не отличается от вызова встроенных функций движка.
Команды run, save, load, и им подобные должны быть реализованы на стороне интерфейса и зарегистрированы как внешние функции.
Для использования синонимов допускается многократная регистрация внешней функции под различными именами.
Режимы командной строки:
- Системный режим командной строки:
В системном режиме допускается ввод команд как на ЕЯ, так и выражений на TOML.
Следовательно, имя функции, введенное в командной строке, одновременно является командой на её выполнение.
- Игровой режим командной строки:
Допускается ввод команд только на ЕЯ.
Системные команды в этом режиме должны обрабатываться стандартной библиотекой парсера.
Платформа стартует с системной командной строкой. Ввод команды "run" приводит к вызову внешней функции которая загрузит файл игры и передаст его движку ТОМа. После старта игры командная строка переключается в игровой режим.
В системном режиме разработчик имеет возможность "на ходу" из командной строки просматривать и изменять значения переменных, создавать и модифицировать объекты, вызывать функции, использовать командую строку как калькулятор.
Создание и использование произвольных интерфейсных функций, возможно, расширит область применения платформы и разнообразит её возможности.