mirror of
https://github.com/HowestDAE/dae16-VerhulstBram.git
synced 2025-12-16 20:41:47 +01:00
Remove Point2f, replace with Vector2f
This commit is contained in:
@@ -10,7 +10,7 @@
|
||||
#include "Animations/Animation.h"
|
||||
#include "GridSystem/WorldTile.h"
|
||||
|
||||
Player::Player(const Point2f& Position, TextureManager* manager) : m_Position(Position), m_Size(Point2f { 40, 40 }), m_Vel(Point2f { 0, 0 }), m_Acc(Point2f { 0, 0 }) {
|
||||
Player::Player(const Vector2f& Position, TextureManager* manager) : m_Position(Position), m_Size(Vector2f { 40, 40 }), m_Vel(Vector2f { 0, 0 }), m_Acc(Vector2f { 0, 0 }) {
|
||||
m_ContactMap[Collision::CollisionDirection::Top] = nullptr;
|
||||
m_ContactMap[Collision::CollisionDirection::Bottom] = nullptr;
|
||||
m_ContactMap[Collision::CollisionDirection::Left] = nullptr;
|
||||
@@ -30,12 +30,12 @@ void Player::Draw() const {
|
||||
utils::SetColor(Colors::PINK);
|
||||
utils::DrawRect(Rectf { m_Position.x, m_Position.y, m_Size.x, m_Size.y });
|
||||
}
|
||||
Point2f center = m_Position + m_Size / 2;
|
||||
Vector2f center = m_Position + m_Size / 2;
|
||||
|
||||
const int frameWidth = 70; //TODO: fix this
|
||||
int halfFrameWidth = frameWidth / 2;
|
||||
|
||||
Point2f drawPos = Point2f { center.x - halfFrameWidth, center.y - halfFrameWidth + 9 };
|
||||
Vector2f drawPos = Vector2f { center.x - halfFrameWidth, center.y - halfFrameWidth + 9 };
|
||||
|
||||
m_walkAnimation->Draw(drawPos, Rectf { drawPos.x, drawPos.y, frameWidth, frameWidth });
|
||||
}
|
||||
@@ -72,7 +72,7 @@ void Player::Update(float elapsedTime, WorldLevel& level) {
|
||||
|
||||
//check for keys
|
||||
if(m_State != PlayerState::Digging) {
|
||||
m_Vel = Point2f { 0, -100 };
|
||||
m_Vel = Vector2f { 0, -100 };
|
||||
if (utils::isKeyDown(SDL_SCANCODE_W)) {
|
||||
m_Vel.y = 100;
|
||||
m_Grounded = false;
|
||||
@@ -83,14 +83,11 @@ void Player::Update(float elapsedTime, WorldLevel& level) {
|
||||
if (m_ContactMap[Collision::CollisionDirection::Bottom] != nullptr) {
|
||||
//Do the digging
|
||||
m_State = PlayerState::Digging;
|
||||
m_DigProgress = 0;
|
||||
m_DigTile = m_ContactMap[Collision::CollisionDirection::Bottom];
|
||||
//Set the digging location in the center of the destination tile;
|
||||
WorldTile* tile = m_ContactMap[Collision::CollisionDirection::Bottom];
|
||||
m_DigDestination = tile->GetPosition() + tile->GetSize() / 2;
|
||||
m_ContactMap[Collision::CollisionDirection::Bottom]->SetTileType(Tiles::AIR);
|
||||
//center of tile
|
||||
Point2f tileCenter = tile->GetCollisionRect().getCollisionRect().pos + tile->GetCollisionRect().getCollisionRect().size / 2;
|
||||
m_Position = Point2f { tileCenter.x - m_Size.x / 2, tileCenter.y - m_Size.y / 2 + 5 };
|
||||
|
||||
const WorldTile* tile = m_ContactMap[Collision::CollisionDirection::Bottom];
|
||||
m_DigDestination = tile->GetPosition() + Vector2f{0, 0};
|
||||
m_ContactMap[Collision::CollisionDirection::Bottom] = nullptr;
|
||||
}
|
||||
}
|
||||
@@ -108,8 +105,8 @@ void Player::Update(float elapsedTime, WorldLevel& level) {
|
||||
m_ContactMap[Collision::CollisionDirection::Right]->SetTileType(Tiles::AIR);
|
||||
WorldTile* tile = m_ContactMap[Collision::CollisionDirection::Right];
|
||||
//center of tile
|
||||
const Point2f tileCenter = tile->GetCollisionRect().getCollisionRect().pos + tile->GetCollisionRect().getCollisionRect().size / 2;
|
||||
m_Position = Point2f { tileCenter.x - m_Size.x / 2, tileCenter.y - m_Size.y / 2 + 5 };
|
||||
const Vector2f tileCenter = tile->GetCollisionRect().getCollisionRect().pos + tile->GetCollisionRect().getCollisionRect().size / 2;
|
||||
m_Position = Vector2f { tileCenter.x - m_Size.x / 2, tileCenter.y - m_Size.y / 2 + 5 };
|
||||
|
||||
m_ContactMap[Collision::CollisionDirection::Right] = nullptr;
|
||||
m_DidJustDigRight = true;
|
||||
@@ -133,7 +130,7 @@ void Player::Update(float elapsedTime, WorldLevel& level) {
|
||||
|
||||
|
||||
float t = 0, min_t = INFINITY;
|
||||
Point2f intersectionPoint, normal;
|
||||
Vector2f intersectionPoint, normal;
|
||||
|
||||
std::vector<std::pair<int, float>> contactTimes {};
|
||||
|
||||
@@ -161,8 +158,8 @@ void Player::Update(float elapsedTime, WorldLevel& level) {
|
||||
int y = contact_time.first / WORLD_WIDTH;
|
||||
WorldTile* world_tile = gridManager.GetTileAtIndex(x, y);
|
||||
|
||||
const Point2f WorldTilePos = world_tile->GetCollisionRect().getCollisionRect().pos;
|
||||
const Point2f WorldTileSize = world_tile->GetCollisionRect().getCollisionRect().size;
|
||||
const Vector2f WorldTilePos = world_tile->GetCollisionRect().getCollisionRect().pos;
|
||||
const Vector2f WorldTileSize = world_tile->GetCollisionRect().getCollisionRect().size;
|
||||
|
||||
if (WorldTilePos.y + WorldTileSize.y > m_Position.y) {
|
||||
if (WorldTilePos.x + WorldTileSize.x > m_Position.x) {
|
||||
@@ -211,8 +208,25 @@ void Player::Update(float elapsedTime, WorldLevel& level) {
|
||||
case PlayerState::Walking:
|
||||
m_walkAnimation->SetPlaying(true);
|
||||
break;
|
||||
case PlayerState::Digging:
|
||||
case PlayerState::Digging: {
|
||||
m_walkAnimation->SetPlaying(false);
|
||||
//Diganimation
|
||||
m_DigProgress += elapsedTime;
|
||||
//lerp to the destination
|
||||
float progress = utils::map(m_DigProgress, 0.0f, m_DigTime, 0.0f, 1.0f);
|
||||
std::cout << progress << '\n';
|
||||
m_Position = utils::lerp(m_Position, m_DigDestination, progress);
|
||||
if (progress >= 0.5f && !m_HasDeletedTile) {
|
||||
m_DigTile->SetTileType(Tiles::AIR);
|
||||
m_DigTile = nullptr;
|
||||
m_HasDeletedTile = true;
|
||||
}
|
||||
if (progress >= 1.0f) {
|
||||
m_State = PlayerState::Idle;
|
||||
m_HasDeletedTile = false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user