Made an AI debug view to I can make working on the AI easier. I might add the ability to toggle things on/off live to see what the AI does.

This commit is contained in:
Zed A. Shaw 2025-08-23 01:40:51 -04:00
parent fc8e65f4d6
commit 4bf9a9177f
8 changed files with 60 additions and 16 deletions

View file

@ -354,10 +354,9 @@ namespace gui {
$loot_ui.update();
event(Event::LOOT_OPEN);
break;
case KEY::Z: {
auto& player_pos = GameDB::player_position();
System::distribute_loot({player_pos.aiming_at});
} break;
case KEY::Z:
$main_ui.toggle_mind_reading();
break;
case KEY::X:
event(Event::STAIRS_DOWN);
break;

View file

@ -4,6 +4,7 @@
#include <fmt/xchar.h>
#include "constants.hpp"
#include "game_level.hpp"
#include "ai.hpp"
namespace gui {
using namespace components;
@ -31,20 +32,12 @@ namespace gui {
$overlay_ui.init();
}
DinkyECS::Entity MainUI::camera_aim() {
auto& level = GameDB::current_level();
// what happens if there's two things at that spot
if(level.collision->something_there($rayview->aiming_at)) {
return level.collision->get($rayview->aiming_at);
} else {
return 0;
}
}
void MainUI::render() {
if($needs_render) $rayview->render();
$rayview->draw($window);
if($mind_reading) render_mind_reading();
$overlay_ui.render($window);
}
@ -97,6 +90,32 @@ namespace gui {
}
}
void MainUI::toggle_mind_reading() {
$mind_reading = !$mind_reading;
if($mind_reading) {
render_mind_reading();
} else {
$overlay_ui.close_text("left");
}
}
void MainUI::render_mind_reading() {
auto level = GameDB::current_level();
if(level.collision->occupied($rayview->aiming_at)) {
auto entity = level.collision->get($rayview->aiming_at);
if(auto enemy_ai = level.world->get_if<ai::EntityAI>(entity)) {
$overlay_ui.show_text("left", fmt::format(L"AI: {}",
guecs::to_wstring(enemy_ai->to_string())));
} else {
$overlay_ui.show_text("left", L"no mind to read");
}
} else {
$overlay_ui.show_text("left", L"nothing there");
}
}
void MainUI::update_level() {
auto& level = GameDB::current_level();
auto& player_position = GameDB::player_position();

View file

@ -14,6 +14,7 @@ namespace gui {
public:
int $compass_dir = 0;
bool $needs_render = true;
bool $mind_reading = false;
sf::Clock $clock;
sf::RenderWindow& $window;
OverlayUI $overlay_ui;
@ -31,7 +32,6 @@ namespace gui {
Point plan_move(int dir, bool strafe);
void abort_plan();
void update_level();
DinkyECS::Entity camera_aim();
void init();
void render();
@ -39,5 +39,7 @@ namespace gui {
lel::Cell overlay_cell(const std::string& name);
void dead_entity(DinkyECS::Entity entity);
void toggle_mind_reading();
void render_mind_reading();
};
}