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);
|
rayview.$posY = std::lerp(rayview.$posY, targetY, t);
|
||||||
return t >= 1.0;
|
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_rotate(Raycaster &rayview);
|
||||||
bool play_move(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 ) {
|
void FSM::START(Event ) {
|
||||||
// ZED: this must die
|
// ZED: this must die
|
||||||
$rayview.$map = generate_map();
|
generate_map();
|
||||||
$rayview.set_position(RAY_VIEW_X, RAY_VIEW_Y);
|
$rayview.set_position(RAY_VIEW_X, RAY_VIEW_Y);
|
||||||
$rayview.position_camera($player.x + 0.5, $player.y + 0.5);
|
$rayview.position_camera($player.x + 0.5, $player.y + 0.5);
|
||||||
state(State::IDLE);
|
state(State::IDLE);
|
||||||
|
@ -55,6 +55,8 @@ namespace gui {
|
||||||
}
|
}
|
||||||
|
|
||||||
void FSM::IDLE(Event ev) {
|
void FSM::IDLE(Event ev) {
|
||||||
|
auto& level = $levels.current();
|
||||||
|
|
||||||
using FU = Event;
|
using FU = Event;
|
||||||
|
|
||||||
switch(ev) {
|
switch(ev) {
|
||||||
|
@ -89,6 +91,11 @@ namespace gui {
|
||||||
default:
|
default:
|
||||||
dbc::sentinel("unhandled event in IDLE");
|
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) {
|
void FSM::END(Event ev) {
|
||||||
|
@ -194,14 +201,12 @@ namespace gui {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Matrix FSM::generate_map() {
|
void FSM::generate_map() {
|
||||||
auto& level = $levels.current();
|
auto& level = $levels.current();
|
||||||
auto& tiles = level.map->tiles();
|
|
||||||
auto& player = level.world->get_the<Player>();
|
auto& player = level.world->get_the<Player>();
|
||||||
auto& player_position = level.world->get<Position>(player.entity);
|
auto& player_position = level.world->get<Position>(player.entity);
|
||||||
$player = player_position.location;
|
$player = player_position.location;
|
||||||
|
$rayview.set_level(level);
|
||||||
return $textures.convert_char_to_texture(tiles.$tile_ids);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FSM::active() {
|
bool FSM::active() {
|
||||||
|
|
2
gui.hpp
2
gui.hpp
|
@ -55,7 +55,7 @@ namespace gui {
|
||||||
void draw_gui();
|
void draw_gui();
|
||||||
void render();
|
void render();
|
||||||
void mouse();
|
void mouse();
|
||||||
Matrix generate_map();
|
void generate_map();
|
||||||
bool active();
|
bool active();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -356,3 +356,9 @@ DinkyECS::Entity Raycaster::position_sprite(Point pos, string name) {
|
||||||
$collision.insert({pos.x, pos.y}, ent);
|
$collision.insert({pos.x, pos.y}, ent);
|
||||||
return 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 $width;
|
||||||
int $height;
|
int $height;
|
||||||
sf::RenderWindow& $window;
|
sf::RenderWindow& $window;
|
||||||
|
GameLevel $level;
|
||||||
Matrix $map;
|
Matrix $map;
|
||||||
SpatialMap $collision;
|
SpatialMap $collision;
|
||||||
std::vector<Sprite> $sprites;
|
std::vector<Sprite> $sprites;
|
||||||
|
@ -70,4 +71,5 @@ struct Raycaster {
|
||||||
return ((y) * $width) + (x);
|
return ((y) * $width) + (x);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void set_level(GameLevel level);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue