Для обработка команд и различных состояний персонажа нужны три базовые класса: Context, State, и Command.
Context — текущий контекст (режим) персонажа, хранящий в себе переменные, необходимые для отдельной группы состояний.
State — отдельное состояние персонажа, выдающее что-либо на экран при входе в него, и обрабатывающее особым образом ввод от персонажа. Использует данные из текущего контекста, потому всегда относится к какому-либо контексту.
Command — обработчик команды персонажа. Работает обычно независимо от контекста и состояния, но вызывается из обработчика состояния и может менять состояние.
В свойствах персонажа должен быть стек контекстов, на вершине которого находится текущий контекст. В контексте содержатся его временные данные и текущее состояние. Основных действий по переключению три: смена состояния (внутри контекста), начало нового контекста с сохранением предыдущего на стеке, и возврат предыдущего контекста.