From 72951f308f5ba2a2c14211ff8702cc49e49c1ff9 Mon Sep 17 00:00:00 2001 From: "Zed A. Shaw" Date: Fri, 28 Mar 2025 12:40:46 -0400 Subject: [PATCH] Converted almost everything to use wstring so that it works better with SFML and the unicode/utf8 usage in the system. --- ai.cpp | 2 +- autowalker.cpp | 28 +++++++------- autowalker.hpp | 4 +- boss_fight_ui.cpp | 9 +++-- guecs.cpp | 23 +----------- guecs.hpp | 93 ++++++++++++++--------------------------------- gui_fsm.cpp | 17 +++++---- main_ui.cpp | 29 ++++++++------- main_ui.hpp | 4 +- map_view.cpp | 13 ++++--- mini_map.hpp | 2 +- overlay_ui.cpp | 5 +-- overlay_ui.hpp | 8 ++-- status_ui.cpp | 20 ++++++---- status_ui.hpp | 4 +- tests/combat.cpp | 50 +++++++++++++++++++++++-- tests/guecs.cpp | 3 +- 17 files changed, 154 insertions(+), 160 deletions(-) diff --git a/ai.cpp b/ai.cpp index 54b7283..7315443 100644 --- a/ai.cpp +++ b/ai.cpp @@ -168,7 +168,7 @@ namespace ai { bool EntityAI::wants_to(std::string name) { ai::check_valid_action(name, "EntityAI::wants_to"); - return plan.script[0].name == name; + return plan.script.size() > 0 && plan.script[0].name == name; } bool EntityAI::active() { diff --git a/autowalker.cpp b/autowalker.cpp index 4f7d9e7..62fb052 100644 --- a/autowalker.cpp +++ b/autowalker.cpp @@ -40,12 +40,11 @@ Pathing compute_paths(gui::FSM& fsm) { return paths; } -void Autowalker::log(std::string msg) { - dbc::log(fmt::format(">>> AUTOWALK: {}", msg)); +void Autowalker::log(std::wstring msg) { fsm.$status_ui.log(msg); } -void Autowalker::status(std::string msg) { +void Autowalker::status(std::wstring msg) { fsm.$main_ui.$overlay_ui.show_text("bottom", msg); } @@ -71,12 +70,12 @@ void Autowalker::handle_window_events() { [&](const sf::Event::KeyPressed &) { fsm.autowalking = false; close_status(); - log("Aborting autowalk."); + log(L"Aborting autowalk."); }, [&](const sf::Event::MouseButtonPressed &) { fsm.autowalking = false; close_status(); - log("Aborting autowalk."); + log(L"Aborting autowalk."); } ); } @@ -99,8 +98,8 @@ Point Autowalker::get_current_position() { } void Autowalker::path_fail(Matrix& bad_paths, Point pos) { - status("PATH FAIL"); - log("Autowalk failed to find a path."); + status(L"PATH FAIL"); + log(L"Autowalk failed to find a path."); matrix::dump("MOVE FAIL PATHS", bad_paths, pos.x, pos.y); send_event(gui::Event::STAIRS_DOWN); } @@ -225,12 +224,12 @@ void Autowalker::handle_player_walk(ai::State& start, ai::State& goal) { if(action.name == "find_enemy") { // this is where to test if enemy found and update state - status("FINDING ENEMY"); + status(L"FINDING ENEMY"); auto paths = path_to_enemies(); process_move(paths); send_event(gui::Event::ATTACK); } else if(action.name == "kill_enemy") { - status("KILLING ENEMY"); + status(L"KILLING ENEMY"); // TODO: find the enemy and then rotate toward them Point current = get_current_position(); @@ -241,17 +240,18 @@ void Autowalker::handle_player_walk(ai::State& start, ai::State& goal) { process_combat(); } else if(action.name == "use_healing") { - status("USING HEALING"); + status(L"USING HEALING"); player_use_healing(); } else if(action.name == "collect_items") { - status("COLLECTING ITEMS"); + status(L"COLLECTING ITEMS"); auto paths = path_to_items(); process_move(paths); // path to the items and get them all } else if(action == ai::FINAL_ACTION) { close_status(); - log("Autowalk done, nothing left to do."); - send_event(gui::Event::STAIRS_DOWN); + log(L"FINAL ACTION! Autowalk done."); + fsm.autowalking = false; + ai::dump_script("AUTOWALK", start, a_plan.script); } else { close_status(); dbc::log(fmt::format("Unknown action: {}", action.name)); @@ -287,7 +287,7 @@ void Autowalker::process_move(Pathing& paths) { if(!path_player(paths, target)) { close_status(); - log("No paths found, aborting autowalk."); + log(L"No paths found, aborting autowalk."); return; } diff --git a/autowalker.hpp b/autowalker.hpp index a6930a1..984bdcd 100644 --- a/autowalker.hpp +++ b/autowalker.hpp @@ -28,8 +28,8 @@ struct Autowalker { Point get_current_position(); void rotate_player(Point current, Point target); void process_move(Pathing& paths); - void log(std::string msg); - void status(std::string msg); + void log(std::wstring msg); + void status(std::wstring msg); void close_status(); bool player_health_good(); void player_use_healing(); diff --git a/boss_fight_ui.cpp b/boss_fight_ui.cpp index 23d89f6..e757fb1 100644 --- a/boss_fight_ui.cpp +++ b/boss_fight_ui.cpp @@ -1,6 +1,7 @@ #include "boss_fight_ui.hpp" #include "easings.hpp" #include "sound.hpp" +#include namespace gui { using namespace guecs; @@ -72,9 +73,9 @@ namespace gui { } }); if(name == "main_status") { - $status.set(button, {fmt::format("HP: {}", $combat.hp)}); + $status.set(button, {fmt::format(L"HP: {}", $combat.hp)}); } else { - $status.set