47 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include "KCamera.h"
 | |
| 
 | |
| #include "KPawn.h"
 | |
| #include "Utils.h"
 | |
| 
 | |
| namespace KapitanGame
 | |
| {
 | |
| 	const SDL_FRect& KCamera::GetViewport() const
 | |
| 	{
 | |
| 		return Viewport;
 | |
| 	}
 | |
| 
 | |
| 	float KCamera::GetScale() const
 | |
| 	{
 | |
| 		return Scale;
 | |
| 	}
 | |
| 
 | |
| 	const KVector2D& KCamera::GetFocusPoint() const
 | |
| 	{
 | |
| 		return FocusPoint;
 | |
| 	}
 | |
| 
 | |
| 	void KCamera::Update(const std::vector<std::shared_ptr<KPawn>>& pawns, const SDL_FRect& map)
 | |
| 	{
 | |
| 		FocusPoint = { 0.f,0.f };
 | |
| 		for(const auto& pawn : pawns) {
 | |
| 			FocusPoint += pawn->GetPosition();
 | |
| 		}
 | |
| 		FocusPoint *= 1.f / static_cast<float>(pawns.size());
 | |
| 		Viewport.x = Utils::Clamp(FocusPoint.X - Viewport.w / 2.f, 0.f, map.w - Viewport.w);
 | |
| 		Viewport.y = Utils::Clamp(FocusPoint.Y - Viewport.h / 2.f, 0.f, map.h - Viewport.h);
 | |
| 		PlayArea.x = Utils::Clamp(FocusPoint.X - PlayArea.w / 2.f, static_cast<float>(-Constants::WINDOW_DEAD_ZONE), map.w + static_cast<float>(Constants::WINDOW_DEAD_ZONE));
 | |
| 		PlayArea.y = Utils::Clamp(FocusPoint.Y - PlayArea.h / 2.f, static_cast<float>(-Constants::WINDOW_DEAD_ZONE), map.h + static_cast<float>(Constants::WINDOW_DEAD_ZONE));
 | |
| 	}
 | |
| 
 | |
| 	void KCamera::SetDebug(const SDL_FRect& map)
 | |
| 	{
 | |
| 		Viewport = { 0,0,Constants::SCREEN_WIDTH, Constants::SCREEN_HEIGHT };
 | |
| 		Scale = std::min(Constants::SCREEN_HEIGHT * 1.f / map.h, Constants::SCREEN_WIDTH * 1.f / map.w);
 | |
| 	}
 | |
| 
 | |
| 	const SDL_FRect& KCamera::GetPlayArea() const
 | |
| 	{
 | |
| 		return PlayArea;
 | |
| 	}
 | |
| }
 |