#include "pch.h" #include "Player.h" #include "colors.h" #include "utils.h" #include "WorldLevel.h" Player::Player(const Point2f& Position) : m_Position(Position), m_Size(Point2f{50, 20}) {} 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, const 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; } Point2f nextPos = m_Position + m_Vel * elapsedTime; bool isColliding = false; auto tiles = level.GetAllTiles(); for (int x{0}; x < WorldLevel::WORLD_WIDTH; ++x) { for (int y{0}; y < WorldLevel::WORLD_HEIGHT; ++y) { WorldTile* tile = tiles[x][y]; if (tile->GetTileType() == GroundTileTypes::Dirt) { Rectf tileRect = Rectf{tile->GetPosition().x, tile->GetPosition().y, WorldLevel::TILE_WIDTH, WorldLevel::TILE_HEIGHT}; if (utils::IsOverlapping(nextPos, m_Size, tileRect)) { isColliding = true; } } } } if(!isColliding) { m_Position = nextPos; } }