#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>& pawns, const SDL_FRect& map) { FocusPoint = { 0.f,0.f }; for(const auto& pawn : pawns) { FocusPoint += pawn->GetPosition(); } FocusPoint *= 1.f / static_cast(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(-Constants::WINDOW_DEAD_ZONE), map.w + static_cast(Constants::WINDOW_DEAD_ZONE)); PlayArea.y = Utils::Clamp(FocusPoint.Y - PlayArea.h / 2.f, static_cast(-Constants::WINDOW_DEAD_ZONE), map.h + static_cast(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; } }