Prep for the actually making ritual crafting work.
This commit is contained in:
parent
ad1d08ca96
commit
292711f91f
10 changed files with 56 additions and 74 deletions
|
@ -169,5 +169,31 @@
|
|||
"damage": 16,
|
||||
"probability": 1.0
|
||||
}
|
||||
},
|
||||
"junk": [
|
||||
{
|
||||
"name": "chess_pawn",
|
||||
"provides": ["cursed_item"]
|
||||
},
|
||||
{
|
||||
"name": "dirty_kerchief",
|
||||
"provides": ["has_magick"]
|
||||
},
|
||||
{
|
||||
"name": "mushroom",
|
||||
"provides": ["has_magick"]
|
||||
},
|
||||
{
|
||||
"name": "pocket_watch",
|
||||
"provides": ["shiny_bauble"]
|
||||
},
|
||||
{
|
||||
"name": "rusty_nails",
|
||||
"provides": ["has_spikes"]
|
||||
},
|
||||
{
|
||||
"name": "severed_finger",
|
||||
"provides": ["cursed_item"]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -259,7 +259,6 @@ void Autowalker::handle_player_walk(ai::State& start, ai::State& goal) {
|
|||
}
|
||||
|
||||
|
||||
|
||||
void Autowalker::autowalk() {
|
||||
handle_window_events();
|
||||
if(!fsm.autowalking) {
|
||||
|
|
|
@ -4,7 +4,7 @@ namespace Events {
|
|||
enum GUI {
|
||||
START, COMBAT, LOOT, DEATH, STAIRS_UP, STAIRS_DOWN, TRAP,
|
||||
COMBAT_START, NO_NEIGHBORS, HP_STATUS,
|
||||
ATTACK, BLOCK, EVADE, HEAL,
|
||||
ATTACK, BLOCK, EVADE,
|
||||
UPDATE_SPRITE, ENEMY_SPAWN, NOOP
|
||||
};
|
||||
|
||||
|
|
|
@ -24,7 +24,6 @@ namespace gui {
|
|||
$mini_map($level),
|
||||
$font{FONT_FILE_NAME}
|
||||
{
|
||||
$levels.temp_create_player_rituals();
|
||||
}
|
||||
|
||||
void FSM::event(Event ev) {
|
||||
|
@ -401,7 +400,6 @@ namespace gui {
|
|||
} break;
|
||||
case eGUI::EVADE:
|
||||
case eGUI::BLOCK:
|
||||
case eGUI::HEAL:
|
||||
dbc::log("YOU NEED TO IMPLEMENT THIS!!!!!");
|
||||
break;
|
||||
case eGUI::ATTACK:
|
||||
|
|
|
@ -22,32 +22,6 @@ LevelScaling LevelManager::scale_level() {
|
|||
};
|
||||
}
|
||||
|
||||
void LevelManager::temp_create_player_rituals() {
|
||||
auto& level = current();
|
||||
auto player = level.player;
|
||||
auto& the_belt = level.world->get<combat::RitualBelt>(player);
|
||||
Config config("assets/config.json");
|
||||
combat::RitualEngine re("assets/rituals.json");
|
||||
|
||||
int slot = 0;
|
||||
|
||||
for(auto& settings : config["test_rituals"]) {
|
||||
if(settings["active"]) {
|
||||
auto blanket = re.start();
|
||||
|
||||
settings.erase("active");
|
||||
|
||||
for(auto& el : settings.items()) {
|
||||
re.set_state(blanket, el.key(), el.value());
|
||||
}
|
||||
|
||||
re.plan(blanket);
|
||||
auto ritual = re.finalize(blanket);
|
||||
the_belt.equip(slot, ritual);
|
||||
slot++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
inline shared_ptr<DinkyECS::World> clone_load_world(shared_ptr<DinkyECS::World> prev_world)
|
||||
{
|
||||
|
|
|
@ -42,7 +42,5 @@ class LevelManager {
|
|||
GameLevel &get(size_t index);
|
||||
LevelScaling scale_level();
|
||||
|
||||
void temp_create_player_rituals();
|
||||
|
||||
DinkyECS::Entity spawn_enemy(std::string named);
|
||||
};
|
||||
|
|
|
@ -29,13 +29,12 @@ namespace gui {
|
|||
}
|
||||
|
||||
void RitualUI::init() {
|
||||
std::vector<std::string> junk_list{
|
||||
{"chess_pawn"},
|
||||
{"dirty_kerchief"},
|
||||
{"mushroom"},
|
||||
{"pocket_watch"},
|
||||
{"rusty_nails"},
|
||||
{"severed_finger"}
|
||||
Config config("assets/rituals.json");
|
||||
std::vector<std::string> junk_list;
|
||||
|
||||
for(auto& el : config["junk"]) {
|
||||
std::string name = el["name"];
|
||||
junk_list.push_back(name);
|
||||
};
|
||||
|
||||
for(auto& [name, cell] : $gui.cells()) {
|
||||
|
@ -70,7 +69,6 @@ namespace gui {
|
|||
$ritual_anim = animation::load("ritual_blanket");
|
||||
|
||||
$gui.init();
|
||||
|
||||
}
|
||||
|
||||
bool RitualUI::is_open() {
|
||||
|
@ -91,6 +89,8 @@ namespace gui {
|
|||
float y = Random::uniform(inner_y, inner_y + ritual_cell.h / 2);
|
||||
bs.sprite->setPosition({float(x), float(y)});
|
||||
}
|
||||
|
||||
// this is where we add the junk to the engine
|
||||
}
|
||||
|
||||
void RitualUI::reset_inv_positions() {
|
||||
|
@ -113,6 +113,9 @@ namespace gui {
|
|||
bs.sprite->setColor({200, 0, 0});
|
||||
animation::center(*bs.sprite, {(float)cell.x, (float)cell.y});
|
||||
animation::rotate(*bs.sprite, 20.0);
|
||||
|
||||
// finalize here ritual here
|
||||
// add it to the belt
|
||||
}
|
||||
|
||||
bool RitualUI::mouse(float x, float y, bool hover) {
|
||||
|
|
18
rituals.cpp
18
rituals.cpp
|
@ -39,13 +39,13 @@ namespace combat {
|
|||
return $actions.at(name);
|
||||
}
|
||||
|
||||
RitualAI RitualEngine::start() {
|
||||
RitualBlanket RitualEngine::start() {
|
||||
auto start = load_state("initial");
|
||||
auto goal = load_state("final");
|
||||
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),
|
||||
fmt::format("ritual action named {} is not in profile, look in {} config",
|
||||
name, $config.$src_path));
|
||||
|
@ -53,38 +53,38 @@ namespace combat {
|
|||
ritual.start.set($profile.at(name), setting);
|
||||
}
|
||||
|
||||
void RitualEngine::reset(RitualAI& ritual) {
|
||||
void RitualEngine::reset(RitualBlanket& ritual) {
|
||||
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);
|
||||
}
|
||||
|
||||
bool RitualAI::will_do(std::string name) {
|
||||
bool RitualBlanket::will_do(std::string name) {
|
||||
if(plan.script.size() == 0) return false;
|
||||
|
||||
return plan.script[0].name == name;
|
||||
}
|
||||
|
||||
ai::Action RitualAI::pop() {
|
||||
ai::Action RitualBlanket::pop() {
|
||||
auto result = plan.script.front();
|
||||
plan.script.pop_front();
|
||||
return result;
|
||||
}
|
||||
|
||||
// BUG: maybe this should be called RitualBlanket instead?
|
||||
void RitualAI::dump() {
|
||||
void RitualBlanket::dump() {
|
||||
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");
|
||||
auto& last = plan.script.back();
|
||||
return plan.script.size() > 1 && last.name == "combined";
|
||||
}
|
||||
|
||||
RitualAction RitualEngine::finalize(RitualAI& ritual) {
|
||||
RitualAction RitualEngine::finalize(RitualBlanket& ritual) {
|
||||
(void)ritual;
|
||||
|
||||
RitualAction result;
|
||||
|
|
16
rituals.hpp
16
rituals.hpp
|
@ -6,19 +6,19 @@
|
|||
#include "components.hpp"
|
||||
|
||||
namespace combat {
|
||||
struct RitualAI {
|
||||
struct RitualBlanket {
|
||||
std::string script;
|
||||
ai::State start;
|
||||
ai::State original;
|
||||
ai::State goal;
|
||||
ai::ActionPlan plan;
|
||||
|
||||
RitualAI(std::string script, ai::State start, ai::State goal) :
|
||||
RitualBlanket(std::string script, ai::State start, ai::State goal) :
|
||||
script(script), start(start), original(start), goal(goal)
|
||||
{
|
||||
}
|
||||
|
||||
RitualAI() {};
|
||||
RitualBlanket() {};
|
||||
|
||||
bool will_do(std::string name);
|
||||
void dump();
|
||||
|
@ -55,11 +55,11 @@ namespace combat {
|
|||
|
||||
ai::State load_state(std::string name);
|
||||
ai::Action load_action(std::string name);
|
||||
RitualAI start();
|
||||
void reset(RitualAI& ritual);
|
||||
void set_state(RitualAI& ritual, std::string name, bool setting);
|
||||
void plan(RitualAI& ritual);
|
||||
RitualAction finalize(RitualAI& ritual);
|
||||
RitualBlanket start();
|
||||
void reset(RitualBlanket& ritual);
|
||||
void set_state(RitualBlanket& ritual, std::string name, bool setting);
|
||||
void plan(RitualBlanket& ritual);
|
||||
RitualAction finalize(RitualBlanket& ritual);
|
||||
};
|
||||
|
||||
struct RitualBelt {
|
||||
|
|
|
@ -96,19 +96,3 @@ TEST_CASE("the ritual belt works", "[rituals-belt]") {
|
|||
REQUIRE(!the_belt.has(0));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
TEST_CASE("LevelManager makes a temp belt", "[rituals-belt]") {
|
||||
LevelManager lm;
|
||||
lm.temp_create_player_rituals();
|
||||
auto& level = lm.current();
|
||||
auto& the_belt = level.world->get<RitualBelt>(level.player);
|
||||
|
||||
REQUIRE(the_belt.has(0));
|
||||
auto& ritual = the_belt.get(0);
|
||||
REQUIRE(ritual.damage > 0);
|
||||
|
||||
REQUIRE(the_belt.has(1));
|
||||
ritual = the_belt.get(1);
|
||||
REQUIRE(ritual.damage > 1);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue