Really crappy minimap now displays.

This commit is contained in:
Zed A. Shaw 2025-02-06 15:03:46 -05:00
parent e85b5d998b
commit 25ad9b51f8
5 changed files with 51 additions and 17 deletions

40
gui.cpp
View file

@ -14,12 +14,17 @@ namespace gui {
$window(sf::VideoMode({SCREEN_WIDTH, SCREEN_HEIGHT}), "Zed's Raycaster Thing"),
$font{"./assets/text.otf"},
$text{$font},
$map_display{$font},
$rayview($textures, RAY_VIEW_WIDTH, RAY_VIEW_HEIGHT)
{
$window.setVerticalSyncEnabled(VSYNC);
$window.setFramerateLimit(FRAME_LIMIT);
$text.setFillColor({255,255,255});
$text.setPosition({10,10});
$text.setFillColor({255,255,255});
$map_display.setPosition({10, SCREEN_HEIGHT-300});
$map_display.setFillColor({255,255,255});
$map_display.setLetterSpacing(0.5);
$map_display.setLineSpacing(0.9);
$textures.load_tiles();
$textures.load_sprites();
}
@ -44,7 +49,7 @@ namespace gui {
void FSM::MOVING(Event ) {
if($camera.play_move($rayview)) {
System::plan_motion(*level.world, {size_t($camera.targetX), size_t($camera.targetY)});
System::plan_motion(*$level.world, {size_t($camera.targetX), size_t($camera.targetY)});
run_systems();
state(State::IDLE);
}
@ -95,7 +100,7 @@ namespace gui {
Point move_to{size_t($camera.targetX), size_t($camera.targetY)};
if(level.map->can_move(move_to) && !level.collision->occupied(move_to)) {
if($level.map->can_move(move_to) && !$level.collision->occupied(move_to)) {
state(State::MOVING);
} else {
state(State::IDLE);
@ -153,10 +158,15 @@ namespace gui {
void FSM::draw_gui() {
sf::RectangleShape rect({SCREEN_WIDTH - RAY_VIEW_WIDTH, SCREEN_HEIGHT});
sf::RectangleShape map_rect({SCREEN_WIDTH - RAY_VIEW_WIDTH - 10, 300});
rect.setPosition({0,0});
rect.setFillColor({50, 50, 50});
map_rect.setPosition({0, SCREEN_HEIGHT-300});
map_rect.setFillColor({20, 20, 20});
$window.draw(rect);
$window.draw(map_rect);
$text.setString(
fmt::format("FPS\n"
@ -168,14 +178,18 @@ namespace gui {
"VSync? {}\n"
"FR Limit: {}\n"
"Debug? {}\n\n"
"Hit R to reset.\n\n"
"dir: {:>2.02},{:>2.02}\n"
"pos: {:>2.02},{:>2.02}",
"pos: {:>2.02},{:>2.02}\n\n",
$stats.mean(), $stats.stddev(), $stats.min,
$stats.max, $stats.n, VSYNC,
FRAME_LIMIT, DEBUG_BUILD, $rayview.$dirX,
$rayview.$dirY, $rayview.$posX, $rayview.$posY));
$window.draw($text);
std::wstring map = $level.map->tiles().minimap(int($rayview.$posX), int($rayview.$posY));
$map_display.setString(map);
$window.draw($map_display);
}
void FSM::render() {
@ -199,18 +213,18 @@ namespace gui {
}
void FSM::generate_map() {
level = $levels.current();
auto& player = level.world->get_the<Player>();
auto& player_position = level.world->get<Position>(player.entity);
$level = $levels.current();
auto& player = $level.world->get_the<Player>();
auto& player_position = $level.world->get<Position>(player.entity);
$player = player_position.location;
$rayview.set_level(level);
$rayview.set_level($level);
}
void FSM::run_systems() {
System::motion(level);
System::enemy_pathing(level);
System::collision(level);
System::death(level);
System::motion($level);
System::enemy_pathing($level);
System::collision($level);
System::death($level);
}
bool FSM::active() {