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:
parent
fc8e65f4d6
commit
4bf9a9177f
8 changed files with 60 additions and 16 deletions
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue