Мне нужно указать конкретный c подкласс AIState интерфейса IState в другом подклассе AIContext, который использует тот же класс интерфейса, что и общий c тип в IState ... У меня проблемы с правильным синтаксическим анализом.
Я создаю Statemachine, который работает на основе контекста: означает, что каждое состояние + SM существует один раз, и тот, кто использует SM, просто вызывает функцию в классе с контекстом в качестве параметра. Контекстные ссылки
У меня есть интерфейсы
public interface IStateContext
{
IState<IStateContext> CurrentState { get; }
}
Interface IState <T> where T:IStateContext {
Execute(T context);
}
Я реализую свое состояние для AI Behavior с помощью цвета для визуализации:
public class AIState : IState <AIContext> {
Color stateColor;
Execute(AIState) { //behavior}
}
ХОРОШО. Теперь вопрос начинается. Я могу создать только AIContext следующим образом:
[System.Serializable]
public class AIContext : IStateContext
{
public AI ai;
public Animator animator;
public NavMeshAgent agent;
private IState<IStateContext> activeState;
public IState<IStateContext> ActiveState
{
get => activeState;
set => activeState = value;
}
}
Мне нужно, чтобы активное состояние было AIState, но оно просто не позволяет подклассам ... Я хочу иметь доступ к (AIContext ) context.ActiveState.color! Но пока это просто IState, у него нет информации «цвет».
Попытка и ошибка 1: Мне не удалось разобрать его. Это просто не позволяет мне.
Попробуй и ошибка 2: Я не могу использовать общий c тип внутри IStateContext, который является IState, потому что тогда это всего лишь oop объявления общего c типа .. ... AIState : IState<AIContext<AIState<AI .....>>>
Боюсь, это структурная проблема? Надеюсь, кто-нибудь это увидит.
Изменить: проблема не только в цвете, я, возможно, захочу реализовать другие переменные позже. Его разбор. Мой StateMAchine просто использует обобщения (IState -> Выполняет их с IStateContext). Я просто не вижу возможности сохранить текущее активное состояние в контексте.
IStateContext имеет IState CurrentState, где T: IStateContext, а в AIState мне нужен AIContext CurrentState. Я просто не могу его разобрать!