Отслеживание изменений в одном объекте между X количеством объектов

Я могу показать точный код (к сожалению), но вот что я пытаюсь достичь, и я просто не знаю, с чего начать.

У меня есть 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;
и т.п.
Дело в том, что значение должно быть установлено один раз для каждого объекта и изменяться только тогда, когда другой объект изменяет его.

Будем благодарны за любые указания в правильном направлении, где начать искать правильное решение!

0

Решение

Поскольку вы не предоставили никакого кода, я думаю, что я отвечу на ваш вопрос с помощью псевдокода.

  1. Сделайте здоровье доступным через функции получения / установки.
  2. Всякий раз, когда вызывается setHealth (newVal), вызывайте что-либо на всех объектах AffectingObjs, чтобы сообщить им, что здоровье цели было изменено. Если вы не хотите вызывать объект, вызывающий немедленное изменение, передайте объект, вносящий изменение, в setHealth, и пусть setHealth вызывает только те объекты в AffectingObjs, которые не являются переданным объектом.

Постскриптум Я не уверен, почему вы хотите, чтобы ваши влияющие объекты были уведомлены об изменениях на основе вашего описания. Казалось бы, они должны просто вычесть здоровье, когда они начинают влиять на здоровье, и добавить здоровье, когда они закончили.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector