diff --git a/Escape-the-Dawn/Systems/CollisionSystem.cpp b/Escape-the-Dawn/Systems/CollisionSystem.cpp index ab91656..4bd04bf 100644 --- a/Escape-the-Dawn/Systems/CollisionSystem.cpp +++ b/Escape-the-Dawn/Systems/CollisionSystem.cpp @@ -85,8 +85,8 @@ void Systems::CollisionSystem::Intersects(EntityID aEntity, EntityID bEntity) if (aMin.x <= bMax.x && bMin.x <= aMax.x) { if (aMin.y <= bMax.y && bMin.y <= aMax.y) { if (aMin.z <= bMax.z && bMin.z <= aMax.z) { - aCollisionComponent->CollidingEntities.push_back(aEntity); - bCollisionComponent->CollidingEntities.push_back(bEntity); + aCollisionComponent->CollidingEntities.push_back(bEntity); + bCollisionComponent->CollidingEntities.push_back(aEntity); return; } } diff --git a/Escape-the-Dawn/Systems/LevelGenerationSystem.cpp b/Escape-the-Dawn/Systems/LevelGenerationSystem.cpp index 05fcf0a..931d524 100644 --- a/Escape-the-Dawn/Systems/LevelGenerationSystem.cpp +++ b/Escape-the-Dawn/Systems/LevelGenerationSystem.cpp @@ -18,11 +18,11 @@ void Systems::LevelGenerationSystem::SpawnObstacle() ent = m_World->CreateEntity(); obstacles.push_back(ent); - m_World->SetProperty(ent, "Name", std::string("Obstacle")); - transform = m_World->AddComponent(ent, "Transform"); - bounds = m_World->AddComponent(ent, "Bounds"); - collision = m_World->AddComponent(ent, "Collision"); - model = m_World->AddComponent(ent, "Model"); + + auto transform = m_World->AddComponent(ent, "Transform"); + auto bounds = m_World->AddComponent(ent, "Bounds"); + auto collision = m_World->AddComponent(ent, "Collision"); + auto model = m_World->AddComponent(ent, "Model"); auto sound = m_World->AddComponent(ent, "SoundEmitter"); @@ -37,6 +37,7 @@ void Systems::LevelGenerationSystem::SpawnObstacle() if(typeRandom >= 0 && typeRandom < 2) // Mountain stuff :D { + m_World->SetProperty(ent, "Name", std::string("Obstacle")); float scale = (float)(rand() % 1000) / 250; transform->Scale = glm::vec3(scale); bounds->VolumeVector = glm::vec3(9, 12, 7); @@ -45,6 +46,7 @@ void Systems::LevelGenerationSystem::SpawnObstacle() } else if(typeRandom >= 2 && typeRandom < 5) // Single Mountain :D { + m_World->SetProperty(ent, "Name", std::string("Obstacle")); float scale = (float)(rand() % 1000) / 200; transform->Scale = glm::vec3(scale); bounds->VolumeVector = glm::vec3(3.5f, 7.5f, 3.5f); @@ -53,6 +55,7 @@ void Systems::LevelGenerationSystem::SpawnObstacle() } else if(typeRandom >= 5 && typeRandom < 8) { + m_World->SetProperty(ent, "Name", std::string("Obstacle")); float scale = (float)(rand() % 1000) / 100; transform->Scale = glm::vec3(scale); bounds->VolumeVector = glm::vec3(1, 1, 1); @@ -61,13 +64,14 @@ void Systems::LevelGenerationSystem::SpawnObstacle() } if(typeRandom >= 8 && typeRandom < 10) { + m_World->SetProperty(ent, "Name", std::string("PowerUp")); float scale = (float)(rand() % 1000) / 100; bounds->VolumeVector = glm::vec3(4, 4, 4); bounds->Origin = glm::vec3(0,4,0); - powerUp = m_World->AddComponent(ent, "PowerUp"); - powerUp->Speed = 10.f; + auto powerUp = m_World->AddComponent(ent, "PowerUp"); + powerUp->Speed = 200.f; model->ModelFile = "Models/powerup.obj"; } @@ -88,24 +92,26 @@ void Systems::LevelGenerationSystem::Update( double dt ) elapsedtime = 0; } - std::list removethis; + for(auto ent : obstacles) { auto transform = m_World->GetComponent(ent, "Transform"); - - transform->Velocity.z = velocity; - transform->Position += transform->Velocity * (float)dt; - - // Stop raising obstacles when they reach ground level - if (transform->Velocity.y > 0 && transform->Position.y >= 0) { - transform->Position.y = 0; - transform->Velocity.y = 0; - } - - if(transform->Position.z > 800) + if(transform != nullptr) { - removethis.push_back(ent); + transform->Velocity.z = velocity; + transform->Position += transform->Velocity * (float)dt; + + // Stop raising obstacles when they reach ground level + if (transform->Velocity.y > 0 && transform->Position.y >= 0) { + transform->Position.y = 0; + transform->Velocity.y = 0; + } + + if(transform->Position.z > 800) + { + removethis.push_back(ent); + } } } @@ -123,6 +129,7 @@ void Systems::LevelGenerationSystem::UpdateEntity( double dt, EntityID entity, E if( m_World->GetProperty(entity, "Name") == "Player") { auto transformComponent = m_World->GetComponent(entity, "Transform"); + startyz = glm::vec2(0, transformComponent->Position.z - 1000); startx = transformComponent->Position.x; velocity = transformComponent->Velocity.z; diff --git a/Escape-the-Dawn/Systems/LevelGenerationSystem.h b/Escape-the-Dawn/Systems/LevelGenerationSystem.h index 864c047..c51e0b9 100644 --- a/Escape-the-Dawn/Systems/LevelGenerationSystem.h +++ b/Escape-the-Dawn/Systems/LevelGenerationSystem.h @@ -31,18 +31,11 @@ namespace Systems int positionRandom; glm::vec2 startyz; float startx; - + std::list removethis; double elapsedtime; std::list obstacles; float velocity; - - std::shared_ptr transform; - std::shared_ptr bounds; - std::shared_ptr collision; - std::shared_ptr model; - std::shared_ptr pointLight; - std::shared_ptr powerUp; }; } diff --git a/Escape-the-Dawn/Systems/PlayerSystem.cpp b/Escape-the-Dawn/Systems/PlayerSystem.cpp index 7dc1959..7e2cc5d 100644 --- a/Escape-the-Dawn/Systems/PlayerSystem.cpp +++ b/Escape-the-Dawn/Systems/PlayerSystem.cpp @@ -136,6 +136,23 @@ void Systems::PlayerSystem::UpdateEntity(double dt, EntityID entity, EntityID pa else freecamEnabled = true; } + + //powerup + auto collisionComponent = m_World->GetComponent(entity, "Collision"); + for(auto ent : collisionComponent->CollidingEntities) + { + std::string name = m_World->GetProperty(ent, "Name"); + if(name == "PowerUp") + { + auto powerupComp = m_World->GetComponent(ent, "PowerUp"); + if(powerupComp != nullptr) + { + transform->Velocity.z = powerupComp->Speed; + m_World->RemoveEntity(ent); + } + } + } + // Update camera diff --git a/Escape-the-Dawn/Systems/PlayerSystem.h b/Escape-the-Dawn/Systems/PlayerSystem.h index 12ea648..2774565 100644 --- a/Escape-the-Dawn/Systems/PlayerSystem.h +++ b/Escape-the-Dawn/Systems/PlayerSystem.h @@ -9,6 +9,8 @@ #include "Components/Collision.h" #include "Components/Camera.h" #include "Components/Bounds.h" +#include "Components/PowerUp.h" + #include "logging.h"