diff --git a/autowalker.cpp b/autowalker.cpp index c003b04..8e0af59 100644 --- a/autowalker.cpp +++ b/autowalker.cpp @@ -3,7 +3,6 @@ #include "gui/ritual_ui.hpp" #include "game_level.hpp" #include "systems.hpp" -#define DEBUG 1 struct InventoryStats { int healing = 0; @@ -347,8 +346,8 @@ bool Autowalker::found_item() { return aimed_at != DinkyECS::NONE && world->has(aimed_at); } -void Autowalker::send_event(gui::Event ev) { - fsm.event(ev); +void Autowalker::send_event(gui::Event ev, std::any data) { + fsm.event(ev, data); fsm.render(); fsm.handle_world_events(); } @@ -393,6 +392,29 @@ bool Autowalker::face_enemy() { return found; } +void Autowalker::click_inventory(const std::string& name, guecs::Modifiers mods) { + auto& cell = fsm.$status_ui.$gui.cell_for(name); + fsm.$status_ui.mouse(cell.mid_x, cell.mid_y, mods); + fsm.handle_world_events(); +} + +void Autowalker::pocket_potion(GameDB::Level &level) { + auto& inventory = level.world->get(level.player); + + if(inventory.has("pocket_r") && inventory.has("pocket_l")) { + auto gui_id = fsm.$status_ui.$gui.entity("pocket_r"); + send_event(gui::Event::USE_ITEM, gui_id); + } + + send_event(gui::Event::AIM_CLICK); + + if(inventory.has("pocket_r")) { + click_inventory("pocket_l", {1 << guecs::ModBit::left}); + } else { + click_inventory("pocket_r", {1 << guecs::ModBit::left}); + } +} + void Autowalker::pickup_item() { auto& level = GameDB::current_level(); auto& player_pos = GameDB::player_position(); @@ -403,9 +425,8 @@ void Autowalker::pickup_item() { fmt::println("AIMING AT entity {} @ {},{}", entity, player_pos.aiming_at.x, player_pos.aiming_at.y); - if(auto curative = level.world->get_if(entity)) { - send_event(gui::Event::AIM_CLICK); - (void)curative; + if(level.world->has(entity)) { + pocket_potion(level); status(L"A POTION"); } else { send_event(gui::Event::AIM_CLICK); diff --git a/autowalker.hpp b/autowalker.hpp index 2517234..daf8bc1 100644 --- a/autowalker.hpp +++ b/autowalker.hpp @@ -1,7 +1,7 @@ #pragma once #include "ai.hpp" - #include "gui/fsm.hpp" +#include struct InventoryStats; @@ -29,7 +29,7 @@ struct Autowalker { void handle_boss_fight(); void handle_player_walk(ai::State& start, ai::State& goal); - void send_event(gui::Event ev); + void send_event(gui::Event ev, std::any data={}); void process_combat(); bool process_move(Pathing& paths, std::function cb); bool path_player(Pathing& paths, Point &target_out); @@ -49,4 +49,6 @@ struct Autowalker { void face_target(Point target); bool face_enemy(); void pickup_item(); + void pocket_potion(GameDB::Level &level); + void click_inventory(const std::string& name, guecs::Modifiers mods); };