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.

master
Zed A. Shaw 1 month ago
parent 75ffb49a53
commit d6c09e111d
  1. 5
      camera.cpp
  2. 1
      camera.hpp
  3. 15
      gui.cpp
  4. 2
      gui.hpp
  5. 6
      raycaster.cpp
  6. 2
      raycaster.hpp

@ -41,3 +41,8 @@ bool CameraLOL::play_move(Raycaster &rayview) {
rayview.$posY = std::lerp(rayview.$posY, targetY, t);
return t >= 1.0;
}
void CameraLOL::abort_plan(Raycaster &rayview) {
targetX = rayview.$posX;
targetY = rayview.$posY;
}

@ -18,4 +18,5 @@ struct CameraLOL {
bool play_rotate(Raycaster &rayview);
bool play_move(Raycaster &rayview);
void abort_plan(Raycaster &rayview);
};

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

@ -55,7 +55,7 @@ namespace gui {
void draw_gui();
void render();
void mouse();
Matrix generate_map();
void generate_map();
bool active();
};
}

@ -356,3 +356,9 @@ DinkyECS::Entity Raycaster::position_sprite(Point pos, string name) {
$collision.insert({pos.x, pos.y}, ent);
return ent;
}
void Raycaster::set_level(GameLevel level) {
$level = level;
auto& tiles = $level.map->tiles();
$map = $textures.convert_char_to_texture(tiles.$tile_ids);
}

@ -33,6 +33,7 @@ struct Raycaster {
int $width;
int $height;
sf::RenderWindow& $window;
GameLevel $level;
Matrix $map;
SpatialMap $collision;
std::vector<Sprite> $sprites;
@ -70,4 +71,5 @@ struct Raycaster {
return ((y) * $width) + (x);
}
void set_level(GameLevel level);
};

Loading…
Cancel
Save