AI can now walk to where healing items are and pick them up to use.
This commit is contained in:
parent
fe37aa11df
commit
a2192e25eb
2 changed files with 31 additions and 8 deletions
|
@ -3,7 +3,6 @@
|
||||||
#include "gui/ritual_ui.hpp"
|
#include "gui/ritual_ui.hpp"
|
||||||
#include "game_level.hpp"
|
#include "game_level.hpp"
|
||||||
#include "systems.hpp"
|
#include "systems.hpp"
|
||||||
#define DEBUG 1
|
|
||||||
|
|
||||||
struct InventoryStats {
|
struct InventoryStats {
|
||||||
int healing = 0;
|
int healing = 0;
|
||||||
|
@ -347,8 +346,8 @@ bool Autowalker::found_item() {
|
||||||
return aimed_at != DinkyECS::NONE && world->has<components::InventoryItem>(aimed_at);
|
return aimed_at != DinkyECS::NONE && world->has<components::InventoryItem>(aimed_at);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Autowalker::send_event(gui::Event ev) {
|
void Autowalker::send_event(gui::Event ev, std::any data) {
|
||||||
fsm.event(ev);
|
fsm.event(ev, data);
|
||||||
fsm.render();
|
fsm.render();
|
||||||
fsm.handle_world_events();
|
fsm.handle_world_events();
|
||||||
}
|
}
|
||||||
|
@ -393,6 +392,29 @@ bool Autowalker::face_enemy() {
|
||||||
return found;
|
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<inventory::Model>(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() {
|
void Autowalker::pickup_item() {
|
||||||
auto& level = GameDB::current_level();
|
auto& level = GameDB::current_level();
|
||||||
auto& player_pos = GameDB::player_position();
|
auto& player_pos = GameDB::player_position();
|
||||||
|
@ -403,9 +425,8 @@ void Autowalker::pickup_item() {
|
||||||
fmt::println("AIMING AT entity {} @ {},{}",
|
fmt::println("AIMING AT entity {} @ {},{}",
|
||||||
entity, player_pos.aiming_at.x, player_pos.aiming_at.y);
|
entity, player_pos.aiming_at.x, player_pos.aiming_at.y);
|
||||||
|
|
||||||
if(auto curative = level.world->get_if<components::Curative>(entity)) {
|
if(level.world->has<components::Curative>(entity)) {
|
||||||
send_event(gui::Event::AIM_CLICK);
|
pocket_potion(level);
|
||||||
(void)curative;
|
|
||||||
status(L"A POTION");
|
status(L"A POTION");
|
||||||
} else {
|
} else {
|
||||||
send_event(gui::Event::AIM_CLICK);
|
send_event(gui::Event::AIM_CLICK);
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "ai.hpp"
|
#include "ai.hpp"
|
||||||
|
|
||||||
#include "gui/fsm.hpp"
|
#include "gui/fsm.hpp"
|
||||||
|
#include <guecs/ui.hpp>
|
||||||
|
|
||||||
struct InventoryStats;
|
struct InventoryStats;
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ struct Autowalker {
|
||||||
void handle_boss_fight();
|
void handle_boss_fight();
|
||||||
void handle_player_walk(ai::State& start, ai::State& goal);
|
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();
|
void process_combat();
|
||||||
bool process_move(Pathing& paths, std::function<bool(Point)> cb);
|
bool process_move(Pathing& paths, std::function<bool(Point)> cb);
|
||||||
bool path_player(Pathing& paths, Point &target_out);
|
bool path_player(Pathing& paths, Point &target_out);
|
||||||
|
@ -49,4 +49,6 @@ struct Autowalker {
|
||||||
void face_target(Point target);
|
void face_target(Point target);
|
||||||
bool face_enemy();
|
bool face_enemy();
|
||||||
void pickup_item();
|
void pickup_item();
|
||||||
|
void pocket_potion(GameDB::Level &level);
|
||||||
|
void click_inventory(const std::string& name, guecs::Modifiers mods);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue