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:
parent
75ffb49a53
commit
d6c09e111d
6 changed files with 25 additions and 6 deletions
|
@ -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);
|
||||
};
|
||||
|
|
15
gui.cpp
15
gui.cpp
|
@ -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() {
|
||||
|
|
2
gui.hpp
2
gui.hpp
|
@ -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…
Add table
Add a link
Reference in a new issue