You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.6 KiB
63 lines
1.6 KiB
#include "ai.hpp"
|
|
#include "ai_debug.hpp"
|
|
|
|
namespace ai {
|
|
|
|
/*
|
|
* Yeah this is weird but it's only to debug things like
|
|
* the preconditions which are weirdly done.
|
|
*/
|
|
void dump_only(State state, bool matching, bool show_as) {
|
|
AIProfile* profile = ai::profile();
|
|
for(auto& [name, name_id] : *profile) {
|
|
if(state.test(name_id) == matching) {
|
|
fmt::println("\t{}={}", name, show_as);
|
|
}
|
|
}
|
|
}
|
|
|
|
void dump_state(State state) {
|
|
AIProfile* profile = ai::profile();
|
|
for(auto& [name, name_id] : *profile) {
|
|
fmt::println("\t{}={}", name,
|
|
state.test(name_id));
|
|
}
|
|
}
|
|
|
|
void dump_action(Action& action) {
|
|
fmt::println(" --ACTION: {}, cost={}", action.name, action.cost);
|
|
|
|
fmt::println(" PRECONDS:");
|
|
dump_only(action.$positive_preconds, true, true);
|
|
dump_only(action.$negative_preconds, true, false);
|
|
|
|
fmt::println(" EFFECTS:");
|
|
dump_only(action.$positive_effects, true, true);
|
|
dump_only(action.$negative_effects, true, false);
|
|
}
|
|
|
|
State dump_script(std::string msg, State start, Script& script) {
|
|
fmt::println("--SCRIPT DUMP: {}", msg);
|
|
fmt::println("# STATE BEFORE:");
|
|
dump_state(start);
|
|
fmt::print("% ACTIONS PLANNED:");
|
|
for(auto& action : script) {
|
|
fmt::print("{} ", action.name);
|
|
}
|
|
fmt::print("\n");
|
|
|
|
for(auto& action : script) {
|
|
dump_action(action);
|
|
|
|
start = action.apply_effect(start);
|
|
fmt::println(" ## STATE AFTER:");
|
|
dump_state(start);
|
|
}
|
|
|
|
return start;
|
|
}
|
|
|
|
void EntityAI::dump() {
|
|
dump_script(script, start, plan.script);
|
|
}
|
|
}
|
|
|