Доброе время суток! Пытаюсь сделать ИИ по совести, чтобы и ООП был, и универсальный, но не получается. Тупо C# не позволяет мне сделать это даже с генериками. Цель - пробросить в реализацию интерфейса IBotBehaviour кастомную информацию, нужную лишь для данного поведения. Хотелось бы пробросить ее через конструктор или метод. Но так, чтобы ее было обязательно пробрасывать.
Вот пример интерфейсов и реализаций:
IBotBehaviour - интерфейс поведения, который должен обязывать передавать ему информацию.
IBot - использует IBotBehaviour.
IdleBehaviour - ничего не делает, следовательно инфа ему никакая не нужна.
FollowBehaviour - требует 2 аргумента типа Positionу
BotTest - использует попеременно разные поведения и пробрасывает в них совершенно разные параметры.
Пример кодаpublic interface IBotBehaviour
{
void Process();
void Setup(); // ?
}
public interface IBot
{
void SetBehaviour(IBotBehaviour behaviour);
}
public class IdleBehaviour : IBotBehaviour
{
public void Process()
{
// wait 1s
}
public void Setup()
{
}
}
public class FollowBehaviour : IBotBehaviour
{
Position myPosition;
Position targetPosition;
public void Process()
{
// move my pos to target pos
}
public void Setup(Position myPosition, Position targetPosition)
{
this.myPosition = myPosition;
this.targetPosition = targetPosition;
}
}
public class BotTest : IBot
{
protected IBotBehaviour currentBehaviour;
public void SetBehaviour(IBotBehaviour behaviour)
{
currentBehaviour = behaviour;
}
// call currentBehaviour.Process() in game cycle
}