A bit of optimization to keep from generating the sorted sprite list over and over. Also tried to solve the problem of tombstone covering everything but no luck.
This commit is contained in:
parent
077f0e84ea
commit
9bf6926dc3
9 changed files with 36 additions and 32 deletions
|
@ -9,7 +9,7 @@ namespace gui {
|
|||
|
||||
MainUI::MainUI(sf::RenderWindow& window) :
|
||||
$window(window),
|
||||
$rayview(RAY_VIEW_WIDTH, RAY_VIEW_HEIGHT)
|
||||
$rayview(std::make_shared<Raycaster>(RAY_VIEW_WIDTH, RAY_VIEW_HEIGHT))
|
||||
{
|
||||
$window.setVerticalSyncEnabled(VSYNC);
|
||||
$window.setFramerateLimit(FRAME_LIMIT);
|
||||
|
@ -23,25 +23,25 @@ namespace gui {
|
|||
auto& player_position = $level.world->get<Position>($level.player);
|
||||
auto player = player_position.location;
|
||||
|
||||
$rayview.init_shaders();
|
||||
$rayview.set_position(RAY_VIEW_X, RAY_VIEW_Y);
|
||||
$rayview.position_camera(player.x + 0.5, player.y + 0.5);
|
||||
$rayview->init_shaders();
|
||||
$rayview->set_position(RAY_VIEW_X, RAY_VIEW_Y);
|
||||
$rayview->position_camera(player.x + 0.5, player.y + 0.5);
|
||||
|
||||
$overlay_ui.init();
|
||||
}
|
||||
|
||||
DinkyECS::Entity MainUI::camera_aim() {
|
||||
// what happens if there's two things at that spot
|
||||
if($level.collision->something_there($rayview.aiming_at)) {
|
||||
return $level.collision->get($rayview.aiming_at);
|
||||
if($level.collision->something_there($rayview->aiming_at)) {
|
||||
return $level.collision->get($rayview->aiming_at);
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void MainUI::render() {
|
||||
if($needs_render) $rayview.render();
|
||||
$rayview.draw($window);
|
||||
if($needs_render) $rayview->render();
|
||||
$rayview->draw($window);
|
||||
|
||||
$overlay_ui.render($window);
|
||||
}
|
||||
|
@ -51,9 +51,9 @@ namespace gui {
|
|||
}
|
||||
|
||||
std::optional<Point> MainUI::play_rotate() {
|
||||
if($rayview.play_rotate()) {
|
||||
if($rayview->play_rotate()) {
|
||||
$needs_render = false;
|
||||
return std::make_optional<Point>($rayview.aiming_at);
|
||||
return std::make_optional<Point>($rayview->aiming_at);
|
||||
} else {
|
||||
$needs_render = true;
|
||||
return std::nullopt;
|
||||
|
@ -61,11 +61,11 @@ namespace gui {
|
|||
}
|
||||
|
||||
std::optional<components::Position> MainUI::play_move() {
|
||||
if($rayview.play_move()) {
|
||||
if($rayview->play_move()) {
|
||||
$needs_render = false;
|
||||
return std::make_optional<Position>(
|
||||
$rayview.camera_target(),
|
||||
$rayview.aiming_at);
|
||||
$rayview->camera_target(),
|
||||
$rayview->aiming_at);
|
||||
} else {
|
||||
$needs_render = true;
|
||||
return std::nullopt;
|
||||
|
@ -76,15 +76,15 @@ namespace gui {
|
|||
// -1 is left, 1 is right
|
||||
int extra = (amount == 0.5) * dir;
|
||||
$compass_dir = ($compass_dir + dir + extra) % COMPASS.size();
|
||||
$rayview.plan_rotate(dir, amount);
|
||||
$rayview->plan_rotate(dir, amount);
|
||||
}
|
||||
|
||||
Point MainUI::plan_move(int dir, bool strafe) {
|
||||
return $rayview.plan_move(dir, strafe);
|
||||
return $rayview->plan_move(dir, strafe);
|
||||
}
|
||||
|
||||
void MainUI::abort_plan() {
|
||||
$rayview.abort_plan();
|
||||
$rayview->abort_plan();
|
||||
}
|
||||
|
||||
void MainUI::dead_entity(DinkyECS::Entity entity) {
|
||||
|
@ -92,7 +92,7 @@ namespace gui {
|
|||
// (see System::distribute_loot) then this can be fixed or improved
|
||||
if($level.world->has<components::Sprite>(entity)) {
|
||||
auto &sprite = $level.world->get<components::Sprite>(entity);
|
||||
$rayview.update_sprite(entity, sprite);
|
||||
$rayview->update_sprite(entity, sprite);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -101,10 +101,10 @@ namespace gui {
|
|||
auto& player_position = $level.world->get<Position>($level.player);
|
||||
auto player = player_position.location;
|
||||
|
||||
$rayview.update_level($level);
|
||||
$rayview.position_camera(player.x + 0.5, player.y + 0.5);
|
||||
$rayview->update_level($level);
|
||||
$rayview->position_camera(player.x + 0.5, player.y + 0.5);
|
||||
|
||||
player_position.aiming_at = $rayview.aiming_at;
|
||||
player_position.aiming_at = $rayview->aiming_at;
|
||||
|
||||
$compass_dir = 0;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue