RitualEngine now uses the crafting results to create a description of the ritual's combat in a RitualAction struct.
This commit is contained in:
parent
43435509f6
commit
a342c53b02
5 changed files with 72 additions and 8 deletions
2
Makefile
2
Makefile
|
@ -22,7 +22,7 @@ tracy_build:
|
|||
meson compile -j 10 -C builddir
|
||||
|
||||
test: build
|
||||
./builddir/runtests
|
||||
./builddir/runtests "[rituals-finalize]"
|
||||
|
||||
run: build test
|
||||
powershell "cp ./builddir/zedcaster.exe ."
|
||||
|
|
|
@ -134,5 +134,35 @@
|
|||
"boost_damage_large",
|
||||
"combined"
|
||||
]
|
||||
},
|
||||
"effects": {
|
||||
"boost_magick": {
|
||||
"damage": 10,
|
||||
"probability": 1.0
|
||||
},
|
||||
"pierce_type": {
|
||||
"damage": 11,
|
||||
"probability": 1.1
|
||||
},
|
||||
"magick_type": {
|
||||
"damage": 12,
|
||||
"probability": 1.2
|
||||
},
|
||||
"heals_user": {
|
||||
"damage": 13,
|
||||
"probability": 1.3
|
||||
},
|
||||
"curses_user": {
|
||||
"damage": 14,
|
||||
"probability": 1.4
|
||||
},
|
||||
"boost_damage_large": {
|
||||
"damage": 15,
|
||||
"probability": 1.5
|
||||
},
|
||||
"combined": {
|
||||
"damage": 16,
|
||||
"probability": 1.6
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
20
rituals.cpp
20
rituals.cpp
|
@ -72,4 +72,24 @@ namespace combat {
|
|||
void RitualAI::dump() {
|
||||
ai::dump_script(script, start, plan.script);
|
||||
}
|
||||
|
||||
RitualAction RitualEngine::finalize(RitualAI& ritual) {
|
||||
(void)ritual;
|
||||
|
||||
RitualAction result;
|
||||
auto effects = $config["effects"];
|
||||
|
||||
for(auto action : ritual.plan.script) {
|
||||
if(effects.contains(action.name)) {
|
||||
auto& effect = effects[action.name];
|
||||
result.damage += int(effect["damage"]);
|
||||
result.probability += float(effect["probability"]);
|
||||
|
||||
fmt::println("ritual has action {} with damage {}, prob: {}",
|
||||
action.name, result.damage, result.probability);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
|
11
rituals.hpp
11
rituals.hpp
|
@ -25,6 +25,16 @@ namespace combat {
|
|||
ai::Action pop();
|
||||
};
|
||||
|
||||
enum class RitualElement {
|
||||
FIRE, LIGHTNING, PHYSICAL
|
||||
};
|
||||
|
||||
struct RitualAction {
|
||||
float probability = 1.0f;
|
||||
int damage = 0;
|
||||
RitualElement element{RitualElement::FIRE};
|
||||
};
|
||||
|
||||
struct RitualEngine {
|
||||
Config $config;
|
||||
ai::AIProfile $profile;
|
||||
|
@ -40,5 +50,6 @@ namespace combat {
|
|||
void reset(RitualAI& ritual);
|
||||
void set_state(RitualAI& ritual, std::string name, bool setting);
|
||||
void plan(RitualAI& ritual);
|
||||
RitualAction finalize(RitualAI& ritual);
|
||||
};
|
||||
}
|
||||
|
|
|
@ -49,15 +49,18 @@ TEST_CASE("RitualEngine basic tests", "[rituals]") {
|
|||
ritual.dump();
|
||||
}
|
||||
|
||||
TEST_CASE("confirm that cycles are avoided/detected", "[rituals]") {
|
||||
TEST_CASE("rituals can be finalized for the end result", "[rituals-finalize]") {
|
||||
RitualEngine re("assets/rituals.json");
|
||||
auto ritual = re.start();
|
||||
auto plan = re.start();
|
||||
|
||||
re.set_state(ritual, "has_magick", true);
|
||||
re.set_state(ritual, "cursed_item", true);
|
||||
re.set_state(ritual, "shiny_bauble", true);
|
||||
re.plan(ritual);
|
||||
re.set_state(plan, "has_magick", true);
|
||||
re.set_state(plan, "cursed_item", true);
|
||||
re.set_state(plan, "shiny_bauble", true);
|
||||
re.plan(plan);
|
||||
|
||||
fmt::println("\n\n------------ CYCLES AVOIDED");
|
||||
ritual.dump();
|
||||
plan.dump();
|
||||
|
||||
auto action = re.finalize(plan);
|
||||
(void)action;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue