bug(goap): fixed unexpected AI behaviour
- Death now removes entity from awareness - State failure now causes replan or goal reevaluation
This commit is contained in:
parent
a2240797b8
commit
111485437c
36 changed files with 845 additions and 88 deletions
|
|
@ -4,6 +4,11 @@ namespace goap {
|
|||
Action::~Action() {}
|
||||
|
||||
bool Action::is_possible(ActorWorldState *context) const {
|
||||
for(WorldProperty const &prop : this->required) {
|
||||
if(!context->check_property_match(prop)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return this->procedural_is_possible(context);
|
||||
}
|
||||
|
||||
|
|
@ -17,6 +22,14 @@ bool Action::is_completed(ActorWorldState *context) const {
|
|||
return this->procedural_is_completed(context);
|
||||
}
|
||||
|
||||
bool Action::procedural_is_possible(ActorWorldState *context) const {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Action::procedural_is_completed(ActorWorldState *context) const {
|
||||
return true;
|
||||
}
|
||||
|
||||
WorldState const &Action::get_required() const {
|
||||
return this->required;
|
||||
}
|
||||
|
|
@ -32,12 +45,4 @@ ActionID Action::get_id() const {
|
|||
bool Action::get_require_state_complete() const {
|
||||
return this->require_state_complete;
|
||||
}
|
||||
|
||||
bool Action::procedural_is_possible(ActorWorldState *context) const {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Action::procedural_is_completed(ActorWorldState *context) const {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,6 +38,8 @@ public:
|
|||
|
||||
bool is_completed(ActorWorldState *context) const;
|
||||
bool is_possible(ActorWorldState *context) const;
|
||||
virtual bool procedural_is_possible(ActorWorldState *context) const;
|
||||
virtual bool procedural_is_completed(ActorWorldState *context) const;
|
||||
|
||||
WorldState const &get_required() const;
|
||||
WorldState const &get_effects() const;
|
||||
|
|
@ -48,8 +50,6 @@ protected:
|
|||
Action() = default;
|
||||
template<class TState>
|
||||
TState *create_state() const;
|
||||
virtual bool procedural_is_possible(ActorWorldState *context) const;
|
||||
virtual bool procedural_is_completed(ActorWorldState *context) const;
|
||||
protected:
|
||||
WorldState blocking_required{};
|
||||
WorldState required{};
|
||||
|
|
|
|||
|
|
@ -171,7 +171,7 @@ gd::Vector<Action const *> &Planner::get_actions() {
|
|||
gd::Vector<Action const *> Planner::get_neighbours(WorldStateNode const &from) const {
|
||||
gd::Vector<Action const *> retval{};
|
||||
for(Action const *action : this->actions) {
|
||||
if(!action->is_possible(from.context) || !this->does_action_contribute(action, from))
|
||||
if(!action->procedural_is_possible(from.context) || !this->does_action_contribute(action, from))
|
||||
continue;
|
||||
retval.push_back(action);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue