|
|
|
@ -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() { |
|
|
|
|