From b62d06a5f7409b05b221824b3132cd97e1e4546f Mon Sep 17 00:00:00 2001 From: XProger Date: Sun, 11 Mar 2018 08:33:46 +0300 Subject: [PATCH] #23 select optimal water reflection plane --- src/cache.h | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/cache.h b/src/cache.h index 2f544e5..5bd245b 100644 --- a/src/cache.h +++ b/src/cache.h @@ -805,16 +805,23 @@ struct WaterCache { if (roomsCount) { // select optimal water plane - float waterLevel = -INF; + float waterDist = 10000000.0f; + int waterItem = 0; for (int i = 0; i < count; i++) { Item &item = items[i]; if (!item.visible) continue; - if (item.pos.y > waterLevel) - waterLevel = item.pos.y; + float d = fabsf(item.pos.y - camera->eye.pos.y); + + if (d < waterDist) { + waterDist = d; + waterItem = i; + } } + float waterLevel = items[waterItem].pos.y; + reflectPlane = vec4(0, 1, 0, -waterLevel); camera->reflectPlane = &reflectPlane; camera->setup(true);