Этот репозиторий - маленкая часть моего домашнего проекта. Т.к. проект домашний - комментарии в исходниках есть лишь там, где лично мне, через какое-то время, может быть неясно, почему сделано так, а не иначе.
Проект кроссплатформенный, в первую очередь на мобильные платформы нацелен. Написан на C++, ObjC, Java. Редакторы на C#. Старые видео можно тут посмотреть:
https://www.youtube.com/watch?v=Nl-oXwyt8iQ
https://www.youtube.com/watch?v=0tiVvB1qcFQ
https://www.youtube.com/watch?v=-5DUHQWIa9E
https://www.youtube.com/watch?v=4EYf-mkdARY
В папке Roulette находится generic класс для выбора произвольного объекта среди группы зарегистрированных.
Roulette/Impl/RouletteImpl - класс-реализация, используется для реализации более высокоуровневых Roulette и PricedObjectRoulette
Roulette/Roulette - класс, в котором регистрируются объекты и шанс их выпадения. Далее, с помощью метода GetNext, можно получать следующий объект с учетом шанса выпадения.
Roulette/PricedObjectRoulette - подобен Roulette, но объекты имеют еще один параметр - стоимость в очках. В PricedObjectRoulette, с помощью метода SetPointsAmount, задается общее количество очков, GetNext выдает следующий объект, на который хватает очков и с учетом шанса выпадения, а также вычитает стоимость выпавшего объекта из общего количества очков.
Roulette/RouletteHistoryMixin - миксина, которая при применении к Roulette, PricedObjectRoulette и подобным добавляет слежение за историей выпадений объектов, позволяя исключить повторное выпадение объекта, если он выпадал недавно, т.е. еще находится в очереди выпавших объектов. Размер очереди задается методом SetHistoryLength.
В папке Creature находятся базовые классы для игровых созданий.
ICreatureBase - базовый интерфейс созданий, без возможности назначения высокоуровневых задач(преследование, атака и прочие). Создается посредством применения миксин для представления пространственных объектов(SpatialDBObjectMixin - добавляет возможность манипулировать объектом в пространственной базе данных), миксин физических объектов(добавляет представление объекта в физическом мире, со скоростями, массами и всем остальным), миксин управляемых объектов(IManagedSeekObjectMixin - позволяет управлять объектом, задавая различные скоростные характеристики). Т.е. все эти миксины являются reusable - они используются в различных проектах и на разных объектах.
ICreature - наследник ICreatureBase, главная функция - предоставляет возможность назначения высокоуровневых задач(преследование, атака и прочие). В основном высокоуровневые задачи реализуются посредством класса CreatureMotionSys.
CreatureMotionSys - реализация системы для управления низкоуровневыми двигательными задачами(следовать в определенную позицию, по определенному углу, за определенной целью и прочие), посредством которых реализуются высокоуровневые задачи ICreature. Реализуется через объекты-задачи из библиотеки для управляемых объектов, т.е. весь код тоже reusable.