From 3a8db50da8478a03e1c953bc57a3d347bc152c5b Mon Sep 17 00:00:00 2001 From: sigonasr2 Date: Sun, 11 Jun 2023 18:32:21 -0500 Subject: [PATCH] Snap camera to integer values so there's no floating point errors. --- Crawler/main.cpp | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/Crawler/main.cpp b/Crawler/main.cpp index 44f7ec6d..29d6e38d 100644 --- a/Crawler/main.cpp +++ b/Crawler/main.cpp @@ -37,13 +37,20 @@ public: camera.SetMode(olc::utils::Camera2D::Mode::LazyFollow); camera.SetTarget(player.pos); camera.SetWorldBoundary({0,0},WORLD_SIZE*24); - camera.EnableWorldBoundary(true); + camera.EnableWorldBoundary(false); view=TileTransformedView{GetScreenSize(),{1,1}}; return true; } bool OnUserUpdate(float fElapsedTime) override { + HandleUserInput(fElapsedTime); + UpdateCamera(fElapsedTime); + RenderWorld(); + return true; + } + + void HandleUserInput(float fElapsedTime){ if(GetKey(RIGHT).bHeld){ player.pos.x+=fElapsedTime*player.moveSpd; } @@ -56,19 +63,21 @@ public: if(GetKey(DOWN).bHeld){ player.pos.y+=fElapsedTime*player.moveSpd; } + } + void UpdateCamera(float fElapsedTime){ camera.Update(fElapsedTime); - view.SetWorldOffset(camera.GetViewPosition()); - //view.HandlePanAndZoom(); - // called once per frame + view.SetWorldOffset(vi2d(camera.GetViewPosition())); + } + + void RenderWorld(){ Clear(BLACK); - for (int x = view.GetTopLeftTile().x/24; x <= view.GetBottomRightTile().x/24; x++){ - for (int y = view.GetTopLeftTile().y/24; y <= view.GetBottomRightTile().y/24; y++){ - view.DrawRect(vi2d{x,y}*24,{24,24},DARK_GREY); + for (int x = view.GetTopLeftTile().x/24-1; x <= view.GetBottomRightTile().x/24; x++){ + for (int y = view.GetTopLeftTile().y/24-1; y <= view.GetBottomRightTile().y/24; y++){ + view.DrawRect(vi2d{x,y}*24,{24,24},VERY_DARK_GREY); } } view.DrawCircle(player.pos,8); - return true; } };