diff --git a/include/Game/BallSystem.h b/include/Game/BallSystem.h index f2e3fea..86c5d60 100644 --- a/include/Game/BallSystem.h +++ b/include/Game/BallSystem.h @@ -105,7 +105,7 @@ private: std::mt19937 m_RandomGenerator; float m_XMovementMultiplier = 2.f; - float m_EdgeX = 3.4f; //Actually 3.2, but anyways. + float m_EdgeX = 3.2f; float m_EdgeY = 5.2f; int m_MultiBalls = 0; bool m_ReplaceBall = false; diff --git a/src/game/Game/BallSystem.cpp b/src/game/Game/BallSystem.cpp index ad95ff4..379b1e2 100644 --- a/src/game/Game/BallSystem.cpp +++ b/src/game/Game/BallSystem.cpp @@ -471,17 +471,17 @@ bool dd::Systems::BallSystem::OnMultiBall(const dd::Events::MultiBall &event) ball2->Waiting = false; auto padTransform = event.padTransform; float x1 = padTransform->Position.x/* - 2*/, x2 = padTransform->Position.x/* + 2*/; - if (x1 < -m_EdgeX) { - x1 = m_EdgeX - 0.2; + if (x1 < -m_EdgeX + 0.4) { + x1 = m_EdgeX - 0.7; } - if (x2 > m_EdgeX) { - x2 = -m_EdgeX + 0.2; + if (x2 > m_EdgeX - 0.4) { + x2 = -m_EdgeX + 0.7; } transform1->Position = glm::vec3(x1, -5.5, -10); transform2->Position = glm::vec3(x2, -5.5, -10); - transform1->Velocity = glm::normalize(glm::vec3(5, 5 ,0.f)) * ball1->Speed; - transform2->Velocity = glm::normalize(glm::vec3(-5, 5 ,0.f)) * ball2->Speed; + transform1->Velocity = glm::normalize(glm::vec3(2.5, 5 ,0.f)) * ball1->Speed; + transform2->Velocity = glm::normalize(glm::vec3(-2.5, 5 ,0.f)) * ball2->Speed; SetMultiBalls(MultiBalls() + 2); //std::cout << MultiBalls() << std::endl; diff --git a/src/game/Game/LevelSystem.cpp b/src/game/Game/LevelSystem.cpp index b9c118a..b4f1dca 100755 --- a/src/game/Game/LevelSystem.cpp +++ b/src/game/Game/LevelSystem.cpp @@ -1273,7 +1273,7 @@ void dd::Systems::LevelSystem::GetNextLevel() level = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}; diff --git a/src/game/Game/LifebuoySystem.cpp b/src/game/Game/LifebuoySystem.cpp index 3192464..0217ff5 100644 --- a/src/game/Game/LifebuoySystem.cpp +++ b/src/game/Game/LifebuoySystem.cpp @@ -44,7 +44,7 @@ void dd::Systems::LifebuoySystem::Initialize() void dd::Systems::LifebuoySystem::Update(double dt) { - for (auto it = m_Lifebuoys.begin(); it != m_Lifebuoys.end();) { + /*for (auto it = m_Lifebuoys.begin(); it != m_Lifebuoys.end();) { //Niklas note: Jag fortstatte få fel efter ni gick hem, och jag förstod inte det här så jag gjorde om som jag visste hur i UpdateEntity. auto transformComponent = m_World->GetComponent(it->Entity); auto lifebuoyComponent = m_World->GetComponent(it->Entity); @@ -80,7 +80,7 @@ void dd::Systems::LifebuoySystem::Update(double dt) ++it; } - } + }*/ if (IsPaused()) { return; @@ -103,6 +103,38 @@ void dd::Systems::LifebuoySystem::UpdateEntity(double dt, EntityID entity, Entit } auto templateCheck = m_World->GetComponent(entity); if (templateCheck != nullptr){ return; } + + auto lifebuoyComponent = m_World->GetComponent(entity); + + if (lifebuoyComponent != nullptr) { + auto transformComponent = m_World->GetComponent(entity); + + if (transformComponent->Position.y < m_DownEdge) { + m_World->RemoveEntity(entity); + //m_Lifebuoys.erase(it++); + } + else { + + if (transformComponent->Position.x > m_RightEdge) { + transformComponent->Position = glm::vec3(m_LeftEdge + 0.1f, transformComponent->Position.y, transformComponent->Position.z); + } + else if (transformComponent->Position.x < m_LeftEdge) { + transformComponent->Position = glm::vec3(m_RightEdge - 0.1f, transformComponent->Position.y, transformComponent->Position.z); + } + + if (lifebuoyComponent->Hits <= 0) { + auto physicsComponent = m_World->GetComponent(entity); + physicsComponent->Mask = CollisionLayer::Type::LifeBuoy; + physicsComponent->GravityScale = 10.f; + auto modelComponent = m_World->GetComponent(entity); + modelComponent->Color = glm::vec4(0.5f, 0.5f, 0.5f, 0.f); + } + + if (transformComponent->Position.y < m_DownLimit && lifebuoyComponent->Hits > 0) { + transformComponent->Position.y = m_DownLimit; + } + } + } } bool dd::Systems::LifebuoySystem::OnPause(const dd::Events::Pause &event) @@ -160,28 +192,30 @@ bool dd::Systems::LifebuoySystem::OnLifebuoyHit(const dd::Events::LifebuoyHit &e { auto transformComponent = m_World->GetComponent(event.Lifebuoy); auto lifebuoyComponent = m_World->GetComponent(event.Lifebuoy); - lifebuoyComponent->Hits -= 1; - auto modelComponent = m_World->GetComponent(event.Lifebuoy); - modelComponent->ModelFile = "Models/Lifebuoy/Lifebuoy" + std::to_string(5 - lifebuoyComponent->Hits) + ".obj"; + if (lifebuoyComponent != nullptr) { + lifebuoyComponent->Hits -= 1; + auto modelComponent = m_World->GetComponent(event.Lifebuoy); + modelComponent->ModelFile = "Models/Lifebuoy/Lifebuoy" + std::to_string(5 - lifebuoyComponent->Hits) + ".obj"; - Events::CreateParticleSequence e; - e.EmitterLifeTime = 4; - e.EmittingAngle = glm::half_pi(); - e.Spread = 0.5f; - e.NumberOfTicks = 1; - e.ParticleLifeTime = 2.f; - e.ParticlesPerTick = 1; - e.Position = transformComponent->Position; - e.ScaleValues.clear(); - e.ScaleValues.push_back(glm::vec3(0.5f)); - e.ScaleValues.push_back(glm::vec3(2.f, 2.f, 0.2f)); - e.SpriteFile = "Textures/Particles/Cloud_Particle.png"; - e.Color = glm::vec4(1, 0, 0, 1); - e.AlphaValues.clear(); - e.AlphaValues.push_back(1.f); - e.AlphaValues.push_back(0.f); - e.Speed = 10.f; - EventBroker->Publish(e); + Events::CreateParticleSequence e; + e.EmitterLifeTime = 4; + e.EmittingAngle = glm::half_pi(); + e.Spread = 0.5f; + e.NumberOfTicks = 1; + e.ParticleLifeTime = 2.f; + e.ParticlesPerTick = 1; + e.Position = transformComponent->Position; + e.ScaleValues.clear(); + e.ScaleValues.push_back(glm::vec3(0.5f)); + e.ScaleValues.push_back(glm::vec3(2.f, 2.f, 0.2f)); + e.SpriteFile = "Textures/Particles/Cloud_Particle.png"; + e.Color = glm::vec4(1, 0, 0, 1); + e.AlphaValues.clear(); + e.AlphaValues.push_back(1.f); + e.AlphaValues.push_back(0.f); + e.Speed = 10.f; + EventBroker->Publish(e); + } return true; }