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