Каким образом лучше всего реализовать пассивные навыки, и их влияние на персонажа?
Пока у меня приблизительно следующий формат - каждый навык реализован внешним классом, и в каждом есть определенное событие, реагирующее на изменение "переключателя". Соответственно, каждое действие героя или врага меняет "переключатель". В самом событии прописано непосредственно действие навыка.
Как на таком принципе работает, например, уворот.
  • происходит какое-либо действие, навык читает здоровье персонажа и записывает его;
  • враг наносит персонажу удар, таким образом, снова активируя действие навыка;
  • навык сравнивает текущее здоровье персонажа и сравнивает с записанным. Если записанное выше, то с определенным шансом текущему здоровью присваивается значение записанного. Если уворот не прошел, то значение здоровья в навыке просто перезаписывается.
Конечно, не все механики реализуемые таким методом.
Думал насчет модификации этого метода, только вместо "переключателя" делать делегаты, например, "начало хода", "конец хода", "атака", "получение урона", и просто при получении навыка заносить определенные методы класса навыка в определенный делегат, а сами делегаты выполнять в соответственные моменты.
Была еще мысль внести весь возможный функционал в класс персонажа, и сделать его зависимым от чисел, которые уже будут меняться навыками, но это сделает класс персонажа слишком большим, что не очень удобно.

Перешел на делегаты, посмотрим, как будет работать.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
26
Перешел на делегаты, посмотрим, как будет работать.
Принятый ответ
9
Перешел на делегаты, посмотрим, как будет работать.
Прочекай паттерн "Наблюдатель" на делегатах - будет прекрасно работать.
26
SomeFire, пока никак. Думаю, Каждый активный навык будет рисовать кнопочку на интерфейсе, и уже на самой кнопочке будет определенное действие. Если абилка ненаправленная, то действие будет выполняться сразу, если направленная - вероятней всего, сделаю делегат для непосредственно функционала, и буду выполнять его при непосредственно щелчке мышки. Когда делегат пустой, буду делать непосредственно действие мышки.
GeneralElConsul:
Прочекай паттерн "Наблюдатель" на делегатах
Я сейчас сделаю делегат, отвечающий за скиллы, действующие каждый ход, статическим, и, по сути, это и будет паттерн "Наблюдатель".
26
Возник вопрос поверх предыдущего. Как удалить метод с делегата? Обычное вычитание, вроде бы, не работает.
29
бтв есть интересная тема, типа как UI ивенты реализуются в некоторых системах, во все листенеры передается объект event, например и в любом листенере можно сделать event.setConsumed(true) и после этого вызов листенеров остановится, это к тому, как делается уворот. Только нужно будет как-то приоритеты листенеров расставлять.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.