|
|
@ -39,13 +39,13 @@ namespace combat { |
|
|
|
return $actions.at(name); |
|
|
|
return $actions.at(name); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
RitualAI RitualEngine::start() { |
|
|
|
RitualBlanket RitualEngine::start() { |
|
|
|
auto start = load_state("initial"); |
|
|
|
auto start = load_state("initial"); |
|
|
|
auto goal = load_state("final"); |
|
|
|
auto goal = load_state("final"); |
|
|
|
return {"actions", start, goal}; |
|
|
|
return {"actions", start, goal}; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void RitualEngine::set_state(RitualAI& ritual, std::string name, bool setting) { |
|
|
|
void RitualEngine::set_state(RitualBlanket& ritual, std::string name, bool setting) { |
|
|
|
dbc::check($profile.contains(name), |
|
|
|
dbc::check($profile.contains(name), |
|
|
|
fmt::format("ritual action named {} is not in profile, look in {} config", |
|
|
|
fmt::format("ritual action named {} is not in profile, look in {} config", |
|
|
|
name, $config.$src_path)); |
|
|
|
name, $config.$src_path)); |
|
|
@ -53,38 +53,38 @@ namespace combat { |
|
|
|
ritual.start.set($profile.at(name), setting); |
|
|
|
ritual.start.set($profile.at(name), setting); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void RitualEngine::reset(RitualAI& ritual) { |
|
|
|
void RitualEngine::reset(RitualBlanket& ritual) { |
|
|
|
ritual.start = ritual.original; |
|
|
|
ritual.start = ritual.original; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void RitualEngine::plan(RitualAI& ritual) { |
|
|
|
void RitualEngine::plan(RitualBlanket& ritual) { |
|
|
|
ritual.plan = ai::plan_actions($scripts.at(ritual.script), ritual.start, ritual.goal); |
|
|
|
ritual.plan = ai::plan_actions($scripts.at(ritual.script), ritual.start, ritual.goal); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
bool RitualAI::will_do(std::string name) { |
|
|
|
bool RitualBlanket::will_do(std::string name) { |
|
|
|
if(plan.script.size() == 0) return false; |
|
|
|
if(plan.script.size() == 0) return false; |
|
|
|
|
|
|
|
|
|
|
|
return plan.script[0].name == name; |
|
|
|
return plan.script[0].name == name; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
ai::Action RitualAI::pop() { |
|
|
|
ai::Action RitualBlanket::pop() { |
|
|
|
auto result = plan.script.front(); |
|
|
|
auto result = plan.script.front(); |
|
|
|
plan.script.pop_front(); |
|
|
|
plan.script.pop_front(); |
|
|
|
return result; |
|
|
|
return result; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// BUG: maybe this should be called RitualBlanket instead?
|
|
|
|
// BUG: maybe this should be called RitualBlanket instead?
|
|
|
|
void RitualAI::dump() { |
|
|
|
void RitualBlanket::dump() { |
|
|
|
ai::dump_script(script, start, plan.script); |
|
|
|
ai::dump_script(script, start, plan.script); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
bool RitualAI::is_combined() { |
|
|
|
bool RitualBlanket::is_combined() { |
|
|
|
dbc::check(!plan.script.empty(), "you are attempting to check an empty plan"); |
|
|
|
dbc::check(!plan.script.empty(), "you are attempting to check an empty plan"); |
|
|
|
auto& last = plan.script.back(); |
|
|
|
auto& last = plan.script.back(); |
|
|
|
return plan.script.size() > 1 && last.name == "combined"; |
|
|
|
return plan.script.size() > 1 && last.name == "combined"; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
RitualAction RitualEngine::finalize(RitualAI& ritual) { |
|
|
|
RitualAction RitualEngine::finalize(RitualBlanket& ritual) { |
|
|
|
(void)ritual; |
|
|
|
(void)ritual; |
|
|
|
|
|
|
|
|
|
|
|
RitualAction result; |
|
|
|
RitualAction result; |
|
|
|