Я могу показать точный код (к сожалению), но вот что я пытаюсь достичь, и я просто не знаю, с чего начать.
У меня есть X объектов, чтобы упростить задачу, я предполагаю, что есть два из них Obj5s и Obj10s.
Также есть объект Target.
У цели есть единственное свойство Health = 100 и массив, в котором хранятся объекты типа Obj. Но последнее не важно (я думаю).
Теперь и Obj5, и Obj10 уменьшают целевое здоровье (но может быть произвольное количество объектов, влияющих на целевое здоровье одновременно).
Obj5s уменьшается на 20 в течение 5 секунд.
Obj10s уменьшается на 10 в течение 10 секунд.
Теперь оба объекта присоединяются к цели одновременно, поэтому здоровье цели должно быть:
100 — 20 — 10 = 70
Это должно длиться в течение 5 секунд.
Через 5 секунд здоровье обновляется. Obj5s удален и возвращается к 100. Obj10s получают эту информацию, и это выглядит так:
100-10 = 90;
Еще 5 секунд.
После чего он вернется к 100.
Классы это pesudocode
class Target
{
float Health;
Array<Obj*> AffectingObjs;
}
class Obj
{
float Damage;
float Duration;
}
class Obj5s : Obj /it sets values
{
Damage = 20;
Duration = 5;
}
Код на самом деле работает в игровом цикле.
Теперь мой вопрос: как мне сделать, чтобы Obj5s и Obj10s и любой другой ObjX знали об изменениях Здоровья?
Нужно ли указывать значение Health каждый раз, когда оно меняется на Obj, и они должны обновляться соответственно? Или оба объекта должны постоянно запрашивать значение, чтобы проверить, изменилось ли оно?
У меня была ранняя реализация последнего подхода, но он не сработал так, как я ожидал. Потому что после каждого запроса значение также обновлялось, поэтому я получал следующее поведение:
100-10 = 90;
90-10 = 80;
80-10 = 70;
и т.п.
Дело в том, что значение должно быть установлено один раз для каждого объекта и изменяться только тогда, когда другой объект изменяет его.
Будем благодарны за любые указания в правильном направлении, где начать искать правильное решение!
Поскольку вы не предоставили никакого кода, я думаю, что я отвечу на ваш вопрос с помощью псевдокода.
Постскриптум Я не уверен, почему вы хотите, чтобы ваши влияющие объекты были уведомлены об изменениях на основе вашего описания. Казалось бы, они должны просто вычесть здоровье, когда они начинают влиять на здоровье, и добавить здоровье, когда они закончили.
Других решений пока нет …