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
|
meson compile -j 10 -C builddir
|
||||||
|
|
||||||
test: build
|
test: build
|
||||||
./builddir/runtests
|
./builddir/runtests "[rituals-finalize]"
|
||||||
|
|
||||||
run: build test
|
run: build test
|
||||||
powershell "cp ./builddir/zedcaster.exe ."
|
powershell "cp ./builddir/zedcaster.exe ."
|
||||||
|
|
|
@ -134,5 +134,35 @@
|
||||||
"boost_damage_large",
|
"boost_damage_large",
|
||||||
"combined"
|
"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() {
|
void RitualAI::dump() {
|
||||||
ai::dump_script(script, start, plan.script);
|
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();
|
ai::Action pop();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class RitualElement {
|
||||||
|
FIRE, LIGHTNING, PHYSICAL
|
||||||
|
};
|
||||||
|
|
||||||
|
struct RitualAction {
|
||||||
|
float probability = 1.0f;
|
||||||
|
int damage = 0;
|
||||||
|
RitualElement element{RitualElement::FIRE};
|
||||||
|
};
|
||||||
|
|
||||||
struct RitualEngine {
|
struct RitualEngine {
|
||||||
Config $config;
|
Config $config;
|
||||||
ai::AIProfile $profile;
|
ai::AIProfile $profile;
|
||||||
|
@ -40,5 +50,6 @@ namespace combat {
|
||||||
void reset(RitualAI& ritual);
|
void reset(RitualAI& ritual);
|
||||||
void set_state(RitualAI& ritual, std::string name, bool setting);
|
void set_state(RitualAI& ritual, std::string name, bool setting);
|
||||||
void plan(RitualAI& ritual);
|
void plan(RitualAI& ritual);
|
||||||
|
RitualAction finalize(RitualAI& ritual);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,15 +49,18 @@ TEST_CASE("RitualEngine basic tests", "[rituals]") {
|
||||||
ritual.dump();
|
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");
|
RitualEngine re("assets/rituals.json");
|
||||||
auto ritual = re.start();
|
auto plan = re.start();
|
||||||
|
|
||||||
re.set_state(ritual, "has_magick", true);
|
re.set_state(plan, "has_magick", true);
|
||||||
re.set_state(ritual, "cursed_item", true);
|
re.set_state(plan, "cursed_item", true);
|
||||||
re.set_state(ritual, "shiny_bauble", true);
|
re.set_state(plan, "shiny_bauble", true);
|
||||||
re.plan(ritual);
|
re.plan(plan);
|
||||||
|
|
||||||
fmt::println("\n\n------------ CYCLES AVOIDED");
|
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