diff options
-rw-r--r-- | src/main.cpp | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/src/main.cpp b/src/main.cpp index 24f3829..2daf153 100644 --- a/src/main.cpp +++ b/src/main.cpp | |||
@@ -358,11 +358,13 @@ void recalculateLighting(Game& game, fov_settings_type* fov) | |||
358 | 358 | ||
359 | fov_settings_set_apply_lighting_function( | 359 | fov_settings_set_apply_lighting_function( |
360 | fov, | 360 | fov, |
361 | [] (void* data, int x, int y, int dx, int dy, void*) { | 361 | [] (void* data, int x, int y, int dx, int dy, void* source) { |
362 | Game& game = *static_cast<Game*>(data); | 362 | Game& game = *static_cast<Game*>(data); |
363 | 363 | ||
364 | if (game.map.inBounds(x, y)) | 364 | if (game.map.inBounds(x, y)) |
365 | { | 365 | { |
366 | double lightRadius = static_cast<double>(*static_cast<int*>(source)); | ||
367 | |||
366 | if (!game.map.at(x,y).lit) | 368 | if (!game.map.at(x,y).lit) |
367 | { | 369 | { |
368 | game.litSpots++; | 370 | game.litSpots++; |
@@ -375,7 +377,7 @@ void recalculateLighting(Game& game, fov_settings_type* fov) | |||
375 | std::pow( | 377 | std::pow( |
376 | std::max( | 378 | std::max( |
377 | 0.0, | 379 | 0.0, |
378 | 1.0 - std::sqrt(dx * dx + dy * dy) / static_cast<double>(RADIUS)), | 380 | 1.0 - std::sqrt(dx * dx + dy * dy) / lightRadius), |
379 | 1.0/3.0)); | 381 | 1.0/3.0)); |
380 | } | 382 | } |
381 | }); | 383 | }); |
@@ -388,7 +390,24 @@ void recalculateLighting(Game& game, fov_settings_type* fov) | |||
388 | game.map.at(x,y).tile == Tile::Dust || | 390 | game.map.at(x,y).tile == Tile::Dust || |
389 | game.map.at(x,y).tile == Tile::Lamp) | 391 | game.map.at(x,y).tile == Tile::Lamp) |
390 | { | 392 | { |
391 | fov_circle(fov, static_cast<void*>(&game), nullptr, x, y, RADIUS); | 393 | int lightRadius; |
394 | |||
395 | if ((game.player_x == x && game.player_y == y && game.renderPlayer) || | ||
396 | game.map.at(x,y).tile == Tile::Lamp) | ||
397 | { | ||
398 | lightRadius = RADIUS; | ||
399 | } else if (game.map.at(x,y).tile == Tile::Dust) | ||
400 | { | ||
401 | lightRadius = 2; | ||
402 | } | ||
403 | |||
404 | fov_circle( | ||
405 | fov, | ||
406 | static_cast<void*>(&game), | ||
407 | static_cast<void*>(&lightRadius), | ||
408 | x, | ||
409 | y, | ||
410 | lightRadius); | ||
392 | 411 | ||
393 | game.map.at(x,y).lit = true; | 412 | game.map.at(x,y).lit = true; |
394 | game.map.at(x,y).visibility = 1.0; | 413 | game.map.at(x,y).visibility = 1.0; |
@@ -646,7 +665,7 @@ int main(int, char**) | |||
646 | Input keystate; | 665 | Input keystate; |
647 | SDL_Event e; | 666 | SDL_Event e; |
648 | 667 | ||
649 | size_t dustDt = 30; | 668 | size_t dustDt = 40; |
650 | size_t dustAcc = 0; | 669 | size_t dustAcc = 0; |
651 | 670 | ||
652 | size_t inputDt = 50; | 671 | size_t inputDt = 50; |