Базовые концепции уровня игровых данных - ScreamingScythe/botgame GitHub Wiki
Сюда неплохо бы допилить про статические и динамические объекты. Статические могут воздействовать на динамические пассивным образом. Динамические никак не могут воздействовать на статические.
Есть мир, в нем есть объекты. Например, бот, камень, дерево. Каждый объект имеет тип. Об этом будет сказано ниже. Каждый объект обладает состоянием в виде набора свойств. Например, позиция, поворот, HP.
Время от времени в мире происходят события. События имеют тип, три типа верхнего уровня это:
- Появление объекта (бот кинул гранату, она пришла в этот мир)
- Исчезновение объекта (граната взорвалась и ее больше нет)
- Действие объекта (бот может передвинутся или выстрелить, дерево может упасть)
Появления и исчезновения мгновенны и не оказывают прямого влияния на геймплей и отображение.
Действия имеют начало и конец во времени, а также эффект. Эффект представляет изменение состояния объекта, совершающего действие в момент завершения действия. Некоторые действия могут быть прерваны и не привести к эффекту. Также действия имеют набор свойств.
Типы объектов и событий образуют иерархию, верхние уровни которой зафиксированы в коде (?), а нижние задаются скриптами.
Иерархия используется при расчете гемплея и отображении. Геймплей и отображение наследуются от корней иерархии к листьям (если гуи не знает анимации "перемещение робота на цыпочках", но знает просто "перемещение робота", то используется эта анимация). Это позволит в случае клиент-серверного взаимодействия обеспечить соместимость различных версий.