Raycaster now has wall collision so won't go through walls. Next step is to render all the sprites being places and then implement the Systems.

This commit is contained in:
Zed A. Shaw 2025-02-04 14:13:00 -05:00
parent 75ffb49a53
commit d6c09e111d
6 changed files with 25 additions and 6 deletions

15
gui.cpp
View file

@ -36,7 +36,7 @@ namespace gui {
void FSM::START(Event ) {
// ZED: this must die
$rayview.$map = generate_map();
generate_map();
$rayview.set_position(RAY_VIEW_X, RAY_VIEW_Y);
$rayview.position_camera($player.x + 0.5, $player.y + 0.5);
state(State::IDLE);
@ -55,6 +55,8 @@ namespace gui {
}
void FSM::IDLE(Event ev) {
auto& level = $levels.current();
using FU = Event;
switch(ev) {
@ -89,6 +91,11 @@ namespace gui {
default:
dbc::sentinel("unhandled event in IDLE");
}
if(!level.map->can_move({size_t($camera.targetX), size_t($camera.targetY)})) {
state(State::IDLE);
$camera.abort_plan($rayview);
}
}
void FSM::END(Event ev) {
@ -194,14 +201,12 @@ namespace gui {
}
}
Matrix FSM::generate_map() {
void FSM::generate_map() {
auto& level = $levels.current();
auto& tiles = level.map->tiles();
auto& player = level.world->get_the<Player>();
auto& player_position = level.world->get<Position>(player.entity);
$player = player_position.location;
return $textures.convert_char_to_texture(tiles.$tile_ids);
$rayview.set_level(level);
}
bool FSM::active() {