Вам необходимо прикрепить Субъекта (какой-то солдат) к наблюдателю (какой-то другой солдат).
Для этого я сначала добавил три новых члена в Интерфейс Солдата:
event Action EnemyKilled;
void Attach(Soldier observer);
void Detach(Soldier observer);
Событие здесь заключается в том, чтобы уведомить субъекта и обстрел его достигается с помощью установщика свойства.Я изменил свойство следующим образом:
private bool isEnemyKilled;
private bool IsEnemyKilled {
get => isEnemyKilled;
set {
isEnemyKilled = value;
if(isEnemyKilled) EnemyKilled?.Invoke();
}
}
Реализация Attach
и Detach
выглядит следующим образом:
public void Attach(Soldier observer)
{
observer.EnemyKilled += BattleCry;
}
public void Detach(Soldier observer)
{
observer.EnemyKilled -= BattleCry;
}
Так как я вижу много повторений, когда вам нужнореализовать это для обоих солдат, рассмотрите возможность изменения Soldier
с interface
на abstract class
.
Когда вы все это сделаете, вам нужно будет соединить (всех) солдат вместе (конечно, в соответствии с желаемой игровой логикой).
Один из способов отслеживания всех солдат будетstatic List<Soldier>
в (ваш теперь абстрактный класс) Soldier
, где каждый солдат добавляет себя, когда-то созданный.Но вы можете делать все, что захотите.
Это всего лишь некоторые идеи, а не полноценный образец наблюдателя.Так как вы попросили идеи, я хотел бы добавить некоторые из них.Надеюсь, это приведет вас на правильный путь.
Еще один совет: если вам нужно только свойство IsEnemyKilled
для уведомления других, вы можете просто пропустить его и вызвать событие EnemyKilled
напрямую вместо установки IsEnemyKilled
в true
.