From ab6c43f347a41ed3fd7f3f2544ff0e921380aa8c Mon Sep 17 00:00:00 2001 From: sigonasr2 Date: Fri, 25 Aug 2023 23:52:38 -0500 Subject: [PATCH] Implemented minimap hud. --- olcCodeJam2023Entry/VirusAttack.cpp | 48 ++++++++++++++++----- olcCodeJam2023Entry/VirusAttack.h | 4 +- olcCodeJam2023Entry/assets/minimap_hud.png | Bin 0 -> 3458 bytes olcCodeJam2023Entry/assets/outline.png | Bin 0 -> 609 bytes 4 files changed, 40 insertions(+), 12 deletions(-) create mode 100644 olcCodeJam2023Entry/assets/minimap_hud.png create mode 100644 olcCodeJam2023Entry/assets/outline.png diff --git a/olcCodeJam2023Entry/VirusAttack.cpp b/olcCodeJam2023Entry/VirusAttack.cpp index 0ca6e0d..31d8021 100644 --- a/olcCodeJam2023Entry/VirusAttack.cpp +++ b/olcCodeJam2023Entry/VirusAttack.cpp @@ -18,6 +18,9 @@ bool VirusAttack::OnUserCreate(){ CONSTANT::SELECTION_CIRCLE.Load("assets/selection_circle.png"); TILE.Load("assets/tile.png",nullptr,false,false); + MINIMAP_HUD.Load("assets/minimap_hud.png"); + OUTLINE.Load("assets/outline.png"); + MINIMAP_OUTLINE.Create(64,64); units.push_back(std::make_unique(vf2d{32,32},CONSTANT::VIRUS_IMG1,true)); for(int i=0;i<10;i++){ @@ -113,21 +116,36 @@ void VirusAttack::IdentifyClosestTarget(Unit*&closestUnit,float&closestDist,std: } } -bool VirusAttack::OnUserUpdate(float fElapsedTime){ - HandleDraggingSelection(); - HandleRightClickMove(); +void VirusAttack::DrawMinimap(){ + DrawDecal(GetScreenSize()-MINIMAP_HUD.Sprite()->Size(),MINIMAP_HUD.Decal(),{1,1}); + vf2d minimapTL=GetScreenSize()-vf2d{64,64}; + vi2d worldPixelSize=CONSTANT::WORLD_SIZE*CONSTANT::TILE_SIZE; + vf2d viewingTilesPct=vf2d{float(ScreenWidth()),float(ScreenHeight())}/CONSTANT::TILE_SIZE/CONSTANT::WORLD_SIZE; + SetDrawTarget(MINIMAP_OUTLINE.Sprite()); + for(int y=0;y<64;y++){ + for(int x=0;x<64;x++){ + Draw(x,y,BLANK); + } + } + DrawRect((game.GetWorldOffset()/worldPixelSize*64),viewingTilesPct*64/game.GetWorldScale()); + MINIMAP_OUTLINE.Decal()->Update(); + SetDrawTarget(nullptr); + DrawDecal(minimapTL,MINIMAP_OUTLINE.Decal()); +} +void VirusAttack::HandlePanAndZoom(float fElapsedTime){ + float speedScale=std::min(1.f,game.GetWorldScale().x); if(GetKey(A).bHeld){ - game.MoveWorldOffset({-256*fElapsedTime,0}); + game.MoveWorldOffset(vf2d{-256*fElapsedTime,0}/speedScale); } if(GetKey(W).bHeld){ - game.MoveWorldOffset({0,-256*fElapsedTime}); + game.MoveWorldOffset(vf2d{0,-256*fElapsedTime}/speedScale); } if(GetKey(S).bHeld){ - game.MoveWorldOffset({0,256*fElapsedTime}); + game.MoveWorldOffset(vf2d{0,256*fElapsedTime}/speedScale); } if(GetKey(D).bHeld){ - game.MoveWorldOffset({256*fElapsedTime,0}); + game.MoveWorldOffset(vf2d{256*fElapsedTime,0}/speedScale); } if(GetMouseWheel()>0){ @@ -135,11 +153,17 @@ bool VirusAttack::OnUserUpdate(float fElapsedTime){ game.ZoomAtScreenPos(1.25,GetMousePos()); } } else - if(GetMouseWheel()<0){ - if(game.GetWorldScale().x>0.5){ - game.ZoomAtScreenPos(0.75,GetMousePos()); + if(GetMouseWheel()<0){ + if(game.GetWorldScale().x>0.5){ + game.ZoomAtScreenPos(0.75,GetMousePos()); + } } - } +} + +bool VirusAttack::OnUserUpdate(float fElapsedTime){ + HandleDraggingSelection(); + HandleRightClickMove(); + HandlePanAndZoom(fElapsedTime); for(auto&u:units){ Unit*closestUnit=nullptr; @@ -162,6 +186,8 @@ bool VirusAttack::OnUserUpdate(float fElapsedTime){ DrawSelectionRectangle(); + DrawMinimap(); + return true; } diff --git a/olcCodeJam2023Entry/VirusAttack.h b/olcCodeJam2023Entry/VirusAttack.h index f821b80..ce127fa 100644 --- a/olcCodeJam2023Entry/VirusAttack.h +++ b/olcCodeJam2023Entry/VirusAttack.h @@ -8,7 +8,7 @@ class VirusAttack : public olc::PixelGameEngine private: std::vector>units; - Renderable TILE; + Renderable TILE,MINIMAP_HUD,OUTLINE,MINIMAP_OUTLINE; TileTransformedView game; @@ -19,6 +19,8 @@ private: void CollisionChecking(std::shared_ptru,std::shared_ptru2); void IdentifyClosestTarget(Unit*&closestUnit,float&closestDist,std::shared_ptru,std::shared_ptru2); vf2d GetWorldMousePos(); + void HandlePanAndZoom(float fElapsedTime); + void DrawMinimap(); public: VirusAttack(); diff --git a/olcCodeJam2023Entry/assets/minimap_hud.png b/olcCodeJam2023Entry/assets/minimap_hud.png new file mode 100644 index 0000000000000000000000000000000000000000..533e96ad4577d64e67a958dc9573c2fa77b5256e GIT binary patch literal 3458 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 literal 0 HcmV?d00001