Реализация конечного автомата
Мой проект включает в себя класс BaseEntity, который делает базовые вещи, такие как рисование объекта на экране. У меня есть подкласс BaseEntity под названием Seeker, который заставляет объект BaseEntity идти в определенное место (через функцию, которая называется каждый кадр). У меня есть подкласс BaseEntity под названием Flee, который делает обратное. То, что я хочу сделать, - это создать объект BaseEntity, который будет действовать как искатель при инициализации, а после достижения пункта назначения я хочу изменить его поведение и действовать как беглец в течение короткого времени, а затем вернуться к поиску. Я думал о создании конечного автомата
class state:public BaseEntity { public: virtual void onenter() = 0; virtual void update() = 0; virtual void onexit() = 0; }; class seek : public state { public: void onenter() override; void update() override; void onexit() override; }; class flee : public state { public: void onenter() override; void update() override; void onexit() override; };
I am not sure how create my "player", where to put the piece of code which moves the player, how to make the tranzition between states, how to make make player2 aware of player1 state( once player1 reaches destination, player2 starts seeking and vice versa). My game will be pretty simple, only 2 states, which means I don't have to make it fully encapsulated or worry about 2 states running at the same time. I was thinking about using an enum/switch approach but I would like to do stuff while entering a state( like giving the player a specific colour to know what is he doing or just print a message), another problem is that I need to run onenter and onexit functions only once and I need to run update in a while(true){}
Что я уже пробовал:
Я попытался реализовать класс для каждого поведения, но я не знаю, как связать этот класс с объектом BaseEntity