Всем привет! Страшно извиняемся за 2.5 месяца молчания. Всё это время мы работали над сложными вещами, про которые не написать пока их не закончишь. Да и ГД заболел (доделать дизайн документы и тех. задания не успел). Плюс поступления и вступительные в университеты тоже не улучшили нашу продуктивность в проекте.
Как-то странно схема выглядит, если честно. Работать на уровне отдельной статистики и еще и влиять на стат напрямую - нормально для маленькой игры, но будет только мешать при реализации более сложной логики.
Обычно изолируют взаимодействие на уровне объектов: кто-то совершает атаку и управляет лишь своим состоянием (кулдаун, анимация, использование ресурсов, расчет статов), дальше атака (в зависимости от ее типа) выбирает подходящие цели и вызывает условный метод OnHit. А дальше уже цель реализует логику получения урона. Обычно это какой-то основной метод, который может переопределяться для реализации более сложной логики.
Допустим, у цели есть щит маны. Теперь функция изменения HP должна знать о игровых механиках и проверять есть ли у цели этот щит, отнимать ману вместо хп. А когда поймет, что маны у персонажа не предполагается?
Или у персонажа есть броня. Мы меняем HP напрямую, поэтому атака теперь должна знать как эта броня работает, куда был хит (сколько брони задействовано) и т.п. А что если мы теперь хотим просто отнять HP? Используя единый метод - попадаем в броню. Куда удобней, если бить напрямую по ХП нельзя, а TakeDamage получает данные об источнике, типе, размере урона, точке попадания и дальше решает что ему делать.
В общем, возможно в каком-то конкретном, узком случае эта система и работает, но как только начнете усложнять - уткнетесь в кучу проблем.
Так и происходит. Получив сигнал от инпут системы стат вычитает необходимое количество ресурсов, затем проверяет наличие других хитов (в этот список также входят блоки) и затем если хитов обнаружено не было ищет статы
Тот же щит с маной будет на слое с хитами, все что знает атакущий это то что это тоже хит, я в него попал, вызываю TakeDamage и отрубаюсь. А вот щит маны который ссылается на ману в TakeDamage и решает как этот удар на такое количество урона пережить
Если под броней ты имел ввиду броню как отдельную полоску жизни, то добавим новый лейер для брони и по нему будут бить после хитов но раньше хп. Или же можно будет расширить наследованный класс Health для выполнения логики брони тоже, без добавления нового слоя. У нас в игре такой механики не предполагается но если она появится реализовать ее не будет так сложно