diff --git a/assets/rituals.json b/assets/rituals.json index e24c464..35545f8 100644 --- a/assets/rituals.json +++ b/assets/rituals.json @@ -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"] + } + ] } diff --git a/autowalker.cpp b/autowalker.cpp index 62fb052..f0f7b03 100644 --- a/autowalker.cpp +++ b/autowalker.cpp @@ -259,7 +259,6 @@ void Autowalker::handle_player_walk(ai::State& start, ai::State& goal) { } - void Autowalker::autowalk() { handle_window_events(); if(!fsm.autowalking) { diff --git a/events.hpp b/events.hpp index f0d2e28..1a725aa 100644 --- a/events.hpp +++ b/events.hpp @@ -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 }; diff --git a/gui_fsm.cpp b/gui_fsm.cpp index 4b30900..19277d3 100644 --- a/gui_fsm.cpp +++ b/gui_fsm.cpp @@ -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: diff --git a/levelmanager.cpp b/levelmanager.cpp index e77dd64..5d8afcb 100644 --- a/levelmanager.cpp +++ b/levelmanager.cpp @@ -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(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 clone_load_world(shared_ptr prev_world) { diff --git a/levelmanager.hpp b/levelmanager.hpp index 12f2084..a51faff 100644 --- a/levelmanager.hpp +++ b/levelmanager.hpp @@ -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); }; diff --git a/ritual_ui.cpp b/ritual_ui.cpp index b09ced1..fbdd783 100644 --- a/ritual_ui.cpp +++ b/ritual_ui.cpp @@ -29,13 +29,12 @@ namespace gui { } void RitualUI::init() { - std::vector junk_list{ - {"chess_pawn"}, - {"dirty_kerchief"}, - {"mushroom"}, - {"pocket_watch"}, - {"rusty_nails"}, - {"severed_finger"} + Config config("assets/rituals.json"); + std::vector 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) { diff --git a/rituals.cpp b/rituals.cpp index c93390b..a5e4eb9 100644 --- a/rituals.cpp +++ b/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; diff --git a/rituals.hpp b/rituals.hpp index 1a9710e..4abd18a 100644 --- a/rituals.hpp +++ b/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 { diff --git a/tests/rituals.cpp b/tests/rituals.cpp index a1f2bdd..f3e3b70 100644 --- a/tests/rituals.cpp +++ b/tests/rituals.cpp @@ -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(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); -}