Я читаю в паттернах игрового программирования, что команды должны использоваться для указания направлений для актеров, а состояния используются для указания одного состояния, в котором будет находиться актер (стоя, прыжки, движение и т. Д. c).
В настоящее время я работаю над проблемой в моей кодовой базе, которая, кажется, не может хорошо обернуть голову. В настоящее время у меня есть 3 «состояния взаимодействия», в которых могут находиться мои персонажи - пассивный, рукопашный бой или дальний бой.
И есть несколько вещей, которые я считаю командами, в которых персонаж может находиться в данный момент: движение, говорение, атака и т. Д. c. Но персонаж не может атаковать в пассивном состоянии или говорить в боевом состоянии - мой вопрос заключается в том, имеют ли эти команды больше смысла в качестве команд или состояний, и я могу построить параллельный / иерархический конечный автомат?
Кроме того, мы должны думать о командах как о действиях, которые перемещают персонажей из состояния в состояние (например, если я щелкаю правой кнопкой мыши по врагу, я передаю команду «атака» в конструктор состояний, чтобы перейти из состояния «перемещение» в "атаковать" государство)? Я думаю, мне просто трудно понять, что здесь делать и как взаимодействуют состояния и команды.
Пример состояния будет привязан к символьному объекту:
public class MeleeState : InteractionState
{
public override void HandleInput(Character character, InteractionCommands command)
{
base.HandleInput(character, command);
if (command == InteractionCommands.CHANGETOPASSIVE)
{
}
else if (command == InteractionCommands.CHANGETORANGED)
{
}
else
{
}
}
}
Пример команды :
public class Attack : Command
{
Attack(Character aggressor, Enemy victim)
{
}
public override void Execute()
{
base.Execute();
}
public override void Undo()
{
base.Undo();
}
// Update is called once per frame
void Update()
{
}
}