1
+ #include < string>
2
+
1
3
#include " doctest.h"
2
4
3
5
#include " ../include/aitoolkit/goap.hpp"
@@ -9,6 +11,7 @@ struct blackboard_type {
9
11
int food;
10
12
int gold;
11
13
int stone;
14
+ std::string plan_order;
12
15
};
13
16
14
17
bool operator ==(const blackboard_type& a, const blackboard_type& b) {
@@ -48,6 +51,7 @@ class chop_wood final : public action<blackboard_type> {
48
51
49
52
virtual void apply_effects (blackboard_type& blackboard, bool dry_run) const override {
50
53
blackboard.wood += 1 ;
54
+ blackboard.plan_order += " W" ;
51
55
}
52
56
};
53
57
@@ -67,6 +71,7 @@ class build_storage final : public action<blackboard_type> {
67
71
virtual void apply_effects (blackboard_type& blackboard, bool dry_run) const override {
68
72
blackboard.have_storage = true ;
69
73
blackboard.wood -= 10 ;
74
+ blackboard.plan_order += " B" ;
70
75
}
71
76
};
72
77
@@ -82,6 +87,7 @@ class gather_food final : public action<blackboard_type> {
82
87
83
88
virtual void apply_effects (blackboard_type& blackboard, bool dry_run) const override {
84
89
blackboard.food += 1 ;
90
+ blackboard.plan_order += " F" ;
85
91
}
86
92
};
87
93
@@ -97,6 +103,7 @@ class mine_gold final : public action<blackboard_type> {
97
103
98
104
virtual void apply_effects (blackboard_type& blackboard, bool dry_run) const override {
99
105
blackboard.gold += 1 ;
106
+ blackboard.plan_order += " G" ;
100
107
}
101
108
};
102
109
@@ -112,6 +119,7 @@ class mine_stone final : public action<blackboard_type> {
112
119
113
120
virtual void apply_effects (blackboard_type& blackboard, bool dry_run) const override {
114
121
blackboard.stone += 1 ;
122
+ blackboard.plan_order += " S" ;
115
123
}
116
124
};
117
125
@@ -152,6 +160,7 @@ TEST_CASE("goap planning") {
152
160
p.run_next (initial);
153
161
}
154
162
CHECK (initial == goal);
163
+ CHECK (initial.plan_order .starts_with (" WWWWWWWWWWB" ));
155
164
}
156
165
157
166
SUBCASE (" planner fails to find a plan" ) {
0 commit comments