mirror of
https://github.com/HowestDAE/dae16-VerhulstBram.git
synced 2025-12-16 12:31:47 +01:00
Collision Rework, started adding directions to the collision (WIP)
This commit is contained in:
@@ -76,12 +76,13 @@ void WorldLevel::Update(float elapsedSec) {
|
||||
if(utils::isKeyDown(SDL_SCANCODE_D)) {
|
||||
m_Rects[0].vel.x += 10;
|
||||
}
|
||||
if(utils::isKeyDown(SDL_SCANCODE_SPACE)) {
|
||||
//check if the player is on the ground
|
||||
m_Rects[0].ContactMap[Collision::CollisionDirection::Bottom]->pos.y += 100;
|
||||
}
|
||||
m_Rects[0].vel.y -= 9.81f;
|
||||
|
||||
m_Rects[0].contact[0] = nullptr;
|
||||
m_Rects[0].contact[1] = nullptr;
|
||||
m_Rects[0].contact[2] = nullptr;
|
||||
m_Rects[0].contact[3] = nullptr;
|
||||
m_Rects[0].ContactMap.clear();
|
||||
|
||||
float t = 0, min_t = INFINITY;
|
||||
Point2f intersectionPoint, normal;
|
||||
@@ -108,7 +109,7 @@ void WorldLevel::Update(float elapsedSec) {
|
||||
for (int x {0} ; x < WORLD_WIDTH; ++x) {
|
||||
for (int y {0}; y < WORLD_HEIGHT; ++y) {
|
||||
if(m_worldTiles[x][y]->GetTileType() == GroundTileTypes::Dirt) {
|
||||
if(Collision::DynamicRectVsRect(m_Rects[0], elapsedSec, m_worldTiles[x][y]->GetCollisionRect(), intersectionPoint, normal, t)) {
|
||||
if(Collision::DynamicRectVsRect(m_Rects[0], elapsedSec, m_worldTiles[x][y]->GetCollisionRect().getCollisionRect(), intersectionPoint, normal, t)) {
|
||||
contactTimes.push_back(std::pair<int, float>{x + y * WORLD_WIDTH, t});
|
||||
}
|
||||
}
|
||||
@@ -121,14 +122,13 @@ void WorldLevel::Update(float elapsedSec) {
|
||||
|
||||
for (std::pair<int, float> contact_time : contactTimes) {
|
||||
WorldTile* tile = m_worldTiles[contact_time.first % WORLD_WIDTH][contact_time.first / WORLD_WIDTH];
|
||||
Collision::CollisionRect rect = tile->GetCollisionRect();
|
||||
Collision::CollisionRect rect = tile->GetCollisionRect().getCollisionRect();
|
||||
Collision::ResolveDynamicRectVsRect(m_Rects[0], elapsedSec, &rect);
|
||||
//delete tile;
|
||||
//WorldTile* tileRect = tile->GetCollisionRect().tile;
|
||||
//tileRect->SetTileType(GroundTileTypes::Air);
|
||||
}
|
||||
|
||||
|
||||
m_Rects[0].pos = m_Rects[0].pos + m_Rects[0].vel * elapsedSec;
|
||||
|
||||
}
|
||||
@@ -174,7 +174,7 @@ void WorldLevel::Draw() const {
|
||||
for (int x { 0 }; x < WORLD_WIDTH; ++x) {
|
||||
for (int y { 0 }; y < WORLD_HEIGHT; ++y) {
|
||||
if(m_worldTiles[x][y]->GetTileType() == GroundTileTypes::Dirt) {
|
||||
Collision::CollisionRect rect = m_worldTiles[x][y]->GetCollisionRect();
|
||||
Collision::CollisionRect rect = m_worldTiles[x][y]->GetCollisionRect().getCollisionRect();
|
||||
utils::SetColor(Colors::GREEN);
|
||||
utils::DrawRect(rect.pos, rect.size.x, rect.size.y);
|
||||
}
|
||||
@@ -182,9 +182,10 @@ void WorldLevel::Draw() const {
|
||||
}
|
||||
|
||||
for (size_t i { 0 }; i < 4; ++i) {
|
||||
if(m_Rects[0].contact[i] != nullptr) {
|
||||
if(m_Rects[0].ContactMap.find(static_cast<Collision::CollisionDirection>(i)) != m_Rects[0].ContactMap.end()) {
|
||||
utils::SetColor(Colors::RED);
|
||||
utils::FillRect(m_Rects[0].contact[i]->pos, m_Rects[0].contact[i]->size.x, m_Rects[0].contact[i]->size.y);
|
||||
Collision::CollisionRect* rect = m_Rects[0].ContactMap.at(static_cast<Collision::CollisionDirection>(i));
|
||||
utils::FillRect(rect->pos, rect->size.x, rect->size.y);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user