Добавлен lentinant
Каким образом лучше всего реализовать пассивные навыки, и их влияние на персонажа?
Пока у меня приблизительно следующий формат - каждый навык реализован внешним классом, и в каждом есть определенное событие, реагирующее на изменение "переключателя". Соответственно, каждое действие героя или врага меняет "переключатель". В самом событии прописано непосредственно действие навыка.
Как на таком принципе работает, например, уворот.
- происходит какое-либо действие, навык читает здоровье персонажа и записывает его;
- враг наносит персонажу удар, таким образом, снова активируя действие навыка;
- навык сравнивает текущее здоровье персонажа и сравнивает с записанным. Если записанное выше, то с определенным шансом текущему здоровью присваивается значение записанного. Если уворот не прошел, то значение здоровья в навыке просто перезаписывается.
Конечно, не все механики реализуемые таким методом.
Думал насчет модификации этого метода, только вместо "переключателя" делать делегаты, например, "начало хода", "конец хода", "атака", "получение урона", и просто при получении навыка заносить определенные методы класса навыка в определенный делегат, а сами делегаты выполнять в соответственные моменты.
Была еще мысль внести весь возможный функционал в класс персонажа, и сделать его зависимым от чисел, которые уже будут меняться навыками, но это сделает класс персонажа слишком большим, что не очень удобно.
Принятый ответ
Перешел на делегаты, посмотрим, как будет работать.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован AsagiriGen
Отредактирован lentinant
GeneralElConsul:
lentinant, я бы запилил набор интерфейсов событий типа IDamage, IHeal, IDeath и т.д.
В нужной абилке реализовал бы нужные интерфейсы, например для уворота IDamage. А в базовом классе юнита, где происходит расчет нанесенного урона, взял бы список действующих заклинаний и поочередно бы вызывал их обработчики, если они реализуют нужный интерфейс. Просто и гибко!