#include "pch.h" #include "Player.h" #include #include "colors.h" #include "utils.h" #include "WorldLevel.h" Player::Player(const Point2f& Position) : m_Position(Position), m_Size(Point2f{50, 20}) {} Collision::CollisionRect Player::GetCollisionRect() { Collision::CollisionRect rect = {m_Position, m_Size, m_Vel}; return rect; } void Player::Draw() const { utils::SetColor(Colors::RED); utils::DrawRect(Rectf{m_Position.x, m_Position.y, m_Size.x, m_Size.y}); } void Player::Update(float elapsedTime, WorldLevel& level) { // m_Acc.y += m_Gravity.y; // m_Vel.y = std::min(m_Vel.y, m_MaxSpeed); // // Point2f nextPos = m_Position + m_Vel * elapsedTime; // //collision checking m_Vel = Point2f{0, -100}; //check for keys if(utils::isKeyDown(SDL_SCANCODE_W)) { m_Vel.y = 100; } if(utils::isKeyDown(SDL_SCANCODE_S)) { m_Vel.y = -100; } if(utils::isKeyDown(SDL_SCANCODE_A)) { m_Vel.x = -100; } if(utils::isKeyDown(SDL_SCANCODE_D)) { m_Vel.x = 100; } float t = 0, min_t = INFINITY; Point2f intersectionPoint, normal; std::vector> contactTimes{}; for (size_t i { 0 }; i < level.m_Rects.size(); ++i) { if(Collision::DynamicRectVsRect(this->GetCollisionRect(), elapsedTime, level.m_Rects[i], intersectionPoint, normal, t)) { contactTimes.push_back(std::pair{i, t}); } } std::sort(contactTimes.begin(), contactTimes.end(), [](const std::pair& a, const std::pair& b) { return a.second < b.second; }); for (std::pair contact_time : contactTimes) { Collision::ResolvePlayerVsRect(*this, elapsedTime, &level.m_Rects[contact_time.first]); } m_Position = m_Position + m_Vel * elapsedTime; }