Чтобы сказать, в чём отличия, мне надо врубаться в статью, но лень. Там автор пишет, что хочет систему, похожую на старкрафт или форкрафт. Вот у меня оно и есть, повторение того, что есть в старкрафте.
Основные фишки таковы:
Всю работу делают эффекты. Эффектов есть несколько типов: урон, поиск, запуск ракеты, применение баффа, утойчивый во времени, применение силы. У каждого эффекта есть три обяхательных поля - кастер, цель и источник. В них могут быть ссылки на юнита. Также есть дополнительные поля: у урона - величина урона, у поиска - радиус, у запуска ракеты - ссылка на ракету, у применения баффа - ссылка на бафф. Кроме того, эффекты могут образовывать цепочки и деревья через ссылки. Например, поиск находит три цели, и у поиска есть ссылка на эффект запуска ракеты, который происходит на кастере и целит в цель, ссылка на которую передаётся из предыдущего в цепочке эффекта - поиска. Срабатывает запуск трёх ракет, каждый эффект запуска имеет ссылку на эффект, который должен сработать при поражении цели, допустим, урон. И эта ссылка передаётся ракете, и при столкновении цели наносится урон. И вот, благодаря нескольким типам эффектов, взаимным ссылкам, а также ракетам и лучам, отвечающим за визуализацию, возникает неохватная сложность возможностей.
Ну и остальные сущности так работают, скажем, у оружия есть ссылка на корневой эффект, который дальше запускает всю цепочку. Баффы помнят ссылку на кастера, и могут тоже выполнять эффекты. Есть ещё реакция на урон, так что определённый эффект выполняется если юниту нанесли урон.
Есть ещё валидаторы, то есть, система условий, например, абилка "лечение" будет применена только к юнитам, у которых меньше 80% здоровья, и за это отвечают валидаторы.
Есть ещё система визуализации эффектов, в которую просто сообщаются эффекты и координаты, а она генерит в этих координатах частицы.
Сами сущности не являются строго объектами, это просто элементы типа struct с набором полей разных типов. А экземпляры класса - просто массив этих страктов с инициализированными полями.
Система ссылок между всеми этими сущностями - именованный int, enum.
Есть, например, класс Орк.
мы его определяем:
Используется csharp
units[unitTypes.orc].weapon = weaponTypes.orcWeapon
weapons[weaponTypes.orcWeapon].effect = effectTypes.orcDamage
unitTypes, weaponTypes и effectTypes - enum перечисления
получается чертовски удобно: никаких ссылок на экземпляры объектов, только на классы через int, но не цифрами, а названиями
А вообще, я 4 года делал карты в редакторе SC2, и только к концу этого срока разобрался в о всём, так что эдак слёту всё не расскажешь
движок ск2 реально очень крут, всё продумано, он стоит каждого цента из тех миллионов долларов, которые пошли, по слухам, на его разработку, и даже эти мельчайшие кусочки созданной ими системы, которые я реализовал для своей игры, очень здорово работают, но о них сложно вот так рассказывать