diff --git a/include/Game/BallSystem.h b/include/Game/BallSystem.h index e146703..1069ede 100644 --- a/include/Game/BallSystem.h +++ b/include/Game/BallSystem.h @@ -3,10 +3,11 @@ #include "Core/System.h" #include "Core/World.h" +#include "Core/EventBroker.h" #include "Core/CTransform.h" #include "Physics/EContact.h" -#include "Core/EventBroker.h" #include "Game/CBall.h" +#include "Game/CPowerUp.h" namespace dd { diff --git a/include/Game/Bricks/CPowerUpBrick.h b/include/Game/Bricks/CPowerUpBrick.h index d7bb369..b20a260 100644 --- a/include/Game/Bricks/CPowerUpBrick.h +++ b/include/Game/Bricks/CPowerUpBrick.h @@ -1,5 +1,5 @@ // -// Created by Administrator on 2015-09-22. +// Created by Adniklastrator on 2015-09-22. // #ifndef DAYDREAM_CPOWERUPBRICK_H diff --git a/include/Game/CPad.h b/include/Game/CPad.h index 827ebf6..f71c756 100644 --- a/include/Game/CPad.h +++ b/include/Game/CPad.h @@ -21,8 +21,8 @@ struct Pad : Component int Points; float SlowdownModifier = 5.f; - float AccelerationSpeed = 80.f; - float MaxSpeed = 40.f; + float AccelerationSpeed = 40.f; + float MaxSpeed = 20.f; }; } diff --git a/include/Game/CPowerUp.h b/include/Game/CPowerUp.h index 297d14c..ab90f10 100644 --- a/include/Game/CPowerUp.h +++ b/include/Game/CPowerUp.h @@ -1,5 +1,5 @@ // -// Created by Administrator on 2015-09-22. +// Created by Adniklastrator on 2015-09-22. // #ifndef DAYDREAM_CPOWERUP_H diff --git a/include/Game/ECreatePowerUp.h b/include/Game/ECreatePowerUp.h index d1940ae..3b208c7 100644 --- a/include/Game/ECreatePowerUp.h +++ b/include/Game/ECreatePowerUp.h @@ -1,5 +1,5 @@ // -// Created by Administrator on 2015-09-22. +// Created by Adniklastrator on 2015-09-22. // #ifndef DAYDREAM_ECREATEPOWERUP_H diff --git a/include/Game/EGameOver.h b/include/Game/EGameOver.h index 923b75d..c8696df 100644 --- a/include/Game/EGameOver.h +++ b/include/Game/EGameOver.h @@ -1,5 +1,5 @@ // -// Created by Administrator on 2015-09-22. +// Created by Adniklastrator on 2015-09-22. // #ifndef DAYDREAM_EGAMEOVER_H diff --git a/include/Game/EPowerUpTaken.h b/include/Game/EPowerUpTaken.h new file mode 100644 index 0000000..853ea9f --- /dev/null +++ b/include/Game/EPowerUpTaken.h @@ -0,0 +1,25 @@ +// +// Created by Adniklastrator on 2015-09-23. +// + +#ifndef DAYDREAM_EPOWERUPTAKEN_H +#define DAYDREAM_EPOWERUPTAKEN_H + +#include "Core/EventBroker.h" + +namespace dd +{ + +namespace Events +{ + +struct PowerUpTaken : Event +{ + std::string Name = "Name"; +}; + +} + +} + +#endif //DAYDREAM_EPOWERUPTAKEN_H diff --git a/include/Game/LevelSystem.h b/include/Game/LevelSystem.h index f18bd01..dc3eaac 100755 --- a/include/Game/LevelSystem.h +++ b/include/Game/LevelSystem.h @@ -22,6 +22,7 @@ #include "Game/EMultiBall.h" #include "Game/EGameOver.h" #include "Game/ECreatePowerUp.h" +#include "Game/EPowerUpTaken.h" #include "Game/Bricks/CPowerUpBrick.h" #include "Physics/CBoxShape.h" #include "Physics/CPhysics.h" @@ -60,11 +61,11 @@ public: void Initialize() override; - void CreateBasicLevel(int, int, glm::vec2, int); + void CreateBasicLevel(int, int, glm::vec2, float); void CreateLife(int); void SaveLevel(int, int, glm::vec2, int); // Shouldn't be here, but I'm experimenting. void LoadLevel(char[20]); - void CreateBrick(int, int, glm::vec2, int, int); + void CreateBrick(int, int, glm::vec2, float, int); void ProcessCollision(); void OnEntityRemoved(EntityID entity); @@ -92,8 +93,8 @@ public: void SetRows(const int& rows) { m_Rows = rows; } int& Lines() { return m_Lines; } void SetLines(const int& lines) { m_Lines = lines; } - int& SpaceToEdge() { return m_SpaceToEdge; } - void SetSpaceToEdge(const int& spaceToEdge) { m_SpaceToEdge = spaceToEdge; } + float& SpaceToEdge() { return m_SpaceToEdge; } + void SetSpaceToEdge(const float& spaceToEdge) { m_SpaceToEdge = spaceToEdge; } glm::vec2& SpaceBetweenBricks() { return m_SpaceBetweenBricks; } void SetSpaceBetweenBricks(const glm::vec2& spaceBetweenBricks) { m_SpaceBetweenBricks = spaceBetweenBricks; } @@ -108,20 +109,22 @@ private: int m_NumberOfBricks; int m_Rows = 6; int m_Lines = 7; - int m_SpaceToEdge = 0; - glm::vec2 m_SpaceBetweenBricks = glm::vec2(1, 0.25); + float m_SpaceToEdge = 0.25f; + glm::vec2 m_SpaceBetweenBricks = glm::vec2(1, 0.5); dd::EventRelay m_EContact; dd::EventRelay m_ELifeLost; dd::EventRelay m_EScoreEvent; dd::EventRelay m_EMultiBall; dd::EventRelay m_ECreatePowerUp; + dd::EventRelay m_EPowerUpTaken; bool OnContact(const dd::Events::Contact &event); bool OnLifeLost(const dd::Events::LifeLost &event); bool OnScoreEvent(const dd::Events::ScoreEvent &event); bool OnMultiBall(const dd::Events::MultiBall &event); bool OnCreatePowerUp(const dd::Events::CreatePowerUp &event); + bool OnPowerUpTaken(const dd::Events::PowerUpTaken &event); }; } diff --git a/include/Game/PadSystem.h b/include/Game/PadSystem.h index 5be9ba3..d001b8b 100755 --- a/include/Game/PadSystem.h +++ b/include/Game/PadSystem.h @@ -25,6 +25,7 @@ #include "Game/CPowerUp.h" #include "Game/EResetBall.h" #include "Game/EMultiBall.h" +#include "Game/EPowerUpTaken.h" namespace dd diff --git a/src/game/CMakeLists.txt b/src/game/CMakeLists.txt index 8980c8e..a63eb23 100755 --- a/src/game/CMakeLists.txt +++ b/src/game/CMakeLists.txt @@ -87,7 +87,7 @@ set(SOURCE_FILES ${SOURCE_FILES_Transform} ${SOURCE_FILES_Physics} ${SOURCE_FILES_Game} - ${SOURCE_FILES_Sound} ../../include/Game/EGameOver.h ../../include/Game/Bricks/CPowerUpBrick.h ../../include/Game/CPowerUp.h ../../include/Game/ECreatePowerUp.h) + ${SOURCE_FILES_Sound} ../../include/Game/EGameOver.h ../../include/Game/Bricks/CPowerUpBrick.h ../../include/Game/CPowerUp.h ../../include/Game/ECreatePowerUp.h ../../include/Game/EPowerUpTaken.h) if(CMAKE_COMPILER_IS_GNUCXX) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread") diff --git a/src/game/Game/BallSystem.cpp b/src/game/Game/BallSystem.cpp index 5ac383b..97958ca 100644 --- a/src/game/Game/BallSystem.cpp +++ b/src/game/Game/BallSystem.cpp @@ -45,11 +45,21 @@ void dd::Systems::BallSystem::OnEntityRemoved(EntityID entity) bool dd::Systems::BallSystem::Contact(const Events::Contact &event) { + Components::PowerUp* power1 = m_World->GetComponent(event.Entity1); + Components::PowerUp* power2 = m_World->GetComponent(event.Entity2); + if (power1 != nullptr || power2 != nullptr) { + return false; + } Components::Ball* ballComponent1 = m_World->GetComponent(event.Entity1); Components::Ball* ballComponent2 = m_World->GetComponent(event.Entity2); - Components::Ball* ballComponent; + Components::Ball* ballComponent; + + if (ballComponent1 != nullptr && ballComponent2 != nullptr) { + return false; + } + //Which is the ball? EntityID ballEntity, otherEntitiy; @@ -76,7 +86,7 @@ bool dd::Systems::BallSystem::Contact(const Events::Contact &event) float x = ballTransform->Position.x - padTransform->Position.x; float movementMultiplier = 5.0f; - float y = glm::cos((abs(x) / ((1.6f) * movementMultiplier)) * glm::pi() / 2.f) + 1.f; + float y = glm::cos((abs(x) / (1.6f)) * glm::pi() / 2.f) + 1.f; ballTransform->Velocity = glm::normalize(glm::vec3(x, y ,0.f)) * ballComponent->Speed; } @@ -85,9 +95,5 @@ bool dd::Systems::BallSystem::Contact(const Events::Contact &event) ballTransform->Velocity = glm::vec3(reflectedVelocity, 0.f); } - - - - return true; } diff --git a/src/game/Game/LevelSystem.cpp b/src/game/Game/LevelSystem.cpp index 57f276c..118ad62 100755 --- a/src/game/Game/LevelSystem.cpp +++ b/src/game/Game/LevelSystem.cpp @@ -14,6 +14,7 @@ void dd::Systems::LevelSystem::Initialize() EVENT_SUBSCRIBE_MEMBER(m_EScoreEvent, LevelSystem::OnScoreEvent); EVENT_SUBSCRIBE_MEMBER(m_EMultiBall, LevelSystem::OnMultiBall); EVENT_SUBSCRIBE_MEMBER(m_ECreatePowerUp, LevelSystem::OnCreatePowerUp); + EVENT_SUBSCRIBE_MEMBER(m_EPowerUpTaken, LevelSystem::OnPowerUpTaken); for (int i = 0; i < Lives(); i++) { CreateLife(i); @@ -26,7 +27,7 @@ void dd::Systems::LevelSystem::CreateLife(int number) { auto life = m_World->CreateEntity(); std::shared_ptr transform = m_World->AddComponent(life); - transform->Position = glm::vec3(-1.5f + number * 0.5f, -2.f, -5.f); + transform->Position = glm::vec3(-1.5f + number * 0.15f, -2.f, -5.f); transform->Scale = glm::vec3(0.1f, 0.1f, 0.1f); std::shared_ptr lifeNr = m_World->AddComponent(life); @@ -35,8 +36,6 @@ void dd::Systems::LevelSystem::CreateLife(int number) auto model = m_World->AddComponent(life); model->ModelFile = "Models/Test/Ball/Ballopus.obj"; - /*std::shared_ptr sprite = m_World->AddComponent(life); - sprite->SpriteFile = "Textures/Ball.png";*/ m_World->CommitEntity(life); } @@ -62,7 +61,7 @@ void dd::Systems::LevelSystem::UpdateEntity(double dt, EntityID entity, EntityID if (ball != NULL) { auto transformBall = m_World->GetComponent(entity); - if (transformBall->Position.y < -10 || glm::abs(transformBall->Position.x) > 5) { + if (transformBall->Position.y < -10) { if (MultiBalls() != 0) { SetMultiBalls(MultiBalls() - 1); m_World->RemoveEntity(entity); @@ -74,6 +73,16 @@ void dd::Systems::LevelSystem::UpdateEntity(double dt, EntityID entity, EntityID EventBroker->Publish(be); return; } + } else if (transformBall->Position.x > 3.2) { + if (transformBall->Velocity.x > 0) { + glm::vec2 reflectedVelocity = glm::reflect(glm::vec2(transformBall->Velocity.x, transformBall->Velocity.y), glm::vec2(1, 0)); + transformBall->Velocity = glm::vec3(reflectedVelocity, 0.f); + } + } else if (transformBall->Position.x < -3.2) { + if (transformBall->Velocity.x < 0) { + glm::vec2 reflectedVelocity = glm::reflect(glm::vec2(transformBall->Velocity.x, transformBall->Velocity.y), glm::vec2(-1, 0)); + transformBall->Velocity = glm::vec3(reflectedVelocity, 0.f); + } } } @@ -109,7 +118,7 @@ void dd::Systems::LevelSystem::UpdateEntity(double dt, EntityID entity, EntityID } } -void dd::Systems::LevelSystem::CreateBasicLevel(int rows, int lines, glm::vec2 spacesBetweenBricks, int spaceToEdge) +void dd::Systems::LevelSystem::CreateBasicLevel(int rows, int lines, glm::vec2 spacesBetweenBricks, float spaceToEdge) { int num = 0; SetNumberOfBricks(rows * lines); @@ -125,7 +134,7 @@ void dd::Systems::LevelSystem::CreateBasicLevel(int rows, int lines, glm::vec2 s return; } -void dd::Systems::LevelSystem::CreateBrick(int row, int line, glm::vec2 spacesBetweenBricks, int spaceToEdge, int num) +void dd::Systems::LevelSystem::CreateBrick(int row, int line, glm::vec2 spacesBetweenBricks, float spaceToEdge, int num) { auto brick = m_World->CreateEntity(); std::shared_ptr transform = m_World->AddComponent(brick); @@ -142,10 +151,10 @@ void dd::Systems::LevelSystem::CreateBrick(int row, int line, glm::vec2 spacesBe if ((line == 1 && row == 4) || (line == 3 && row == 2) || (line == 6 && row == 6)) { std::shared_ptr cPow = m_World->AddComponent(brick); } - float x = spaceToEdge + line * spacesBetweenBricks.x; - float y = spaceToEdge + row * spacesBetweenBricks.y; + float x = line * spacesBetweenBricks.x; + float y = row * spacesBetweenBricks.y; transform->Scale = glm::vec3(0.8, 0.2, 0.2); - transform->Position = glm::vec3(x - 3, y + 3, -10.f); + transform->Position = glm::vec3(x - 3, 5 - spaceToEdge - y , -10.f); cBrick->Score = 10 * num; //sound @@ -273,6 +282,12 @@ bool dd::Systems::LevelSystem::OnCreatePowerUp(const dd::Events::CreatePowerUp & return true; } +bool dd::Systems::LevelSystem::OnPowerUpTaken(const dd::Events::PowerUpTaken &event) +{ + SetPowerUps(PowerUps() - 1); + return true; +} + void dd::Systems::LevelSystem::EndLevel() { Events::StageCleared e; diff --git a/src/game/Game/PadSystem.cpp b/src/game/Game/PadSystem.cpp index d0c3b1c..9b84b2b 100755 --- a/src/game/Game/PadSystem.cpp +++ b/src/game/Game/PadSystem.cpp @@ -40,8 +40,6 @@ void dd::Systems::PadSystem::UpdateEntity(double dt, EntityID entity, EntityID p auto transform = m_World->GetComponent(entity); transform->Position = glm::vec3(0.0f, 0.f, -10.f); transform->Velocity = glm::vec3(0.0f, -ball->Speed, 0.f); - auto ent = CreateBall(); - auto transform = m_World->GetComponent(ent); } } } @@ -110,6 +108,8 @@ EntityID dd::Systems::PadSystem::CreateBall() std::shared_ptr physics = m_World->AddComponent(ent); physics->Static = false; + cball->Speed = 10; + m_World->CommitEntity(ent); return ent; @@ -232,6 +232,10 @@ bool dd::Systems::PadSystem::OnContactPowerUp(const dd::Events::Contact &event) } m_World->RemoveEntity(entityPower); + Events::PowerUpTaken ep; + ep.Name = "Something"; + EventBroker->Publish(ep); + Events::MultiBall e; auto transform = m_World->GetComponent(entityPad); e.padTransform = transform; @@ -262,17 +266,8 @@ bool dd::Systems::PadSystem::OnMultiBall(const dd::Events::MultiBall &event) transform1->Position = glm::vec3(x1, -5, -10); transform2->Position = glm::vec3(x2, -5, -10); - Events::SetImpulse e1; - e1.Entity = ent1; - e1.Impulse = glm::vec2(2, 2); - e1.Point = glm::vec2(transform1->Position.x, transform1->Position.y); - EventBroker->Publish(e1); - - Events::SetImpulse e2; - e2.Entity = ent2; - e2.Impulse = glm::vec2(-2, 2); - e2.Point = glm::vec2(transform2->Position.x, transform2->Position.y); - EventBroker->Publish(e2); + transform1->Velocity = glm::vec3(5, 5, 0); + transform2->Velocity = glm::vec3(-5, 5, 0); return true; }