From c829315598195a0c514a8d269f08964b4e07270d Mon Sep 17 00:00:00 2001 From: PlatinumSkink Date: Fri, 11 Sep 2015 10:50:49 +0200 Subject: [PATCH] Ball hitting bricks destroys bricks! We can PLAY! (kind of) --- assets/Textures/Ball.png | Bin 0 -> 17248 bytes include/Core/Engine.h | 97 +++++++++++++++++++++++++---- include/Game/LevelSystem.h | 14 +++-- include/Game/PadSystem.h | 8 ++- include/Physics/CPhysics.h | 10 +-- src/game/Game/LevelSystem.cpp | 47 ++++++++++---- src/game/Game/PadSystem.cpp | 17 ++--- src/game/Physics/PhysicsSystem.cpp | 2 +- 8 files changed, 151 insertions(+), 44 deletions(-) create mode 100644 assets/Textures/Ball.png diff --git a/assets/Textures/Ball.png b/assets/Textures/Ball.png new file mode 100644 index 0000000000000000000000000000000000000000..f43f7f873ad8ef19536af7d15b275a11f20c00d7 GIT binary patch literal 17248 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.Register(); // m_World->ComponentFactory.Register(); - m_World->SystemFactory.Register([this]() { return new Systems::LevelSystem(m_World.get(), m_EventBroker); }); - m_World->AddSystem(); - m_World->SystemFactory.Register([this]() { return new Systems::PadSystem(m_World.get(), m_EventBroker); }); - m_World->AddSystem(); + m_World->ComponentFactory.Register(); m_World->ComponentFactory.Register(); m_World->ComponentFactory.Register(); + m_World->ComponentFactory.Register(); + m_World->ComponentFactory.Register(); m_World->SystemFactory.Register( [this]() { return new Systems::PhysicsSystem(m_World.get(), m_EventBroker); }); m_World->AddSystem(); + m_World->SystemFactory.Register([this]() { return new Systems::LevelSystem(m_World.get(), m_EventBroker); }); + m_World->AddSystem(); + m_World->SystemFactory.Register([this]() { return new Systems::PadSystem(m_World.get(), m_EventBroker); }); + m_World->AddSystem(); + m_World->ComponentFactory.Register(); m_World->ComponentFactory.Register(); m_World->Initialize(); @@ -88,22 +94,78 @@ public: { auto ent = m_World->CreateEntity(); std::shared_ptr transform = m_World->AddComponent(ent); - transform->Position = glm::vec3(0.f, 0.f, -10.f); - + transform->Position = glm::vec3(0.5f, 0.f, -10.f); + transform->Scale = glm::vec3(1.f, 1.f, 1.f); std::shared_ptr sprite = m_World->AddComponent(ent); - sprite->SpriteFile = "Textures/Core/ErrorTexture.png"; + sprite->SpriteFile = "Textures/Ball.png"; std::shared_ptr circleShape = m_World->AddComponent(ent); + std::shared_ptr ball = m_World->AddComponent(ent); std::shared_ptr physics = m_World->AddComponent(ent); physics->Static = false; m_World->CommitEntity(ent); + + Events::SetImpulse e; + e.Entity = ent; + e.Impulse = glm::vec2(0.f, -1.f); + e.Point = glm::vec2(0.5f, 0.f); + m_EventBroker->Publish(e); } + { + auto topWall = m_World->CreateEntity(); + std::shared_ptr transform = m_World->AddComponent(topWall); + transform->Position = glm::vec3(-9.f, 5.f, -9.f); + transform->Scale = glm::vec3(10.f, 0.5f, 1.f); - { + std::shared_ptr sprite = m_World->AddComponent(topWall); + sprite->SpriteFile = "Textures/Core/ErrorTexture.png"; + + std::shared_ptr boxShape = m_World->AddComponent(topWall); + + std::shared_ptr physics = m_World->AddComponent(topWall); + physics->Static = true; + + m_World->CommitEntity(topWall); + } + { + auto leftWall = m_World->CreateEntity(); + std::shared_ptr transform = m_World->AddComponent(leftWall); + transform->Position = glm::vec3(-7.f, 1.f, -9.f); + transform->Scale = glm::vec3(0.5f, 10.f, 1.f); + + std::shared_ptr sprite = m_World->AddComponent(leftWall); + sprite->SpriteFile = "Textures/Core/ErrorTexture.png"; + + std::shared_ptr boxShape = m_World->AddComponent(leftWall); + + std::shared_ptr physics = m_World->AddComponent(leftWall); + physics->Static = true; + + m_World->CommitEntity(leftWall); + } + { + auto rightWall = m_World->CreateEntity(); + std::shared_ptr transform = m_World->AddComponent(rightWall); + transform->Position = glm::vec3(7.f, 1.f, -9.f); + transform->Scale = glm::vec3(0.5f, 10.f, 1.f); + + std::shared_ptr sprite = m_World->AddComponent(rightWall); + sprite->SpriteFile = "Textures/Core/ErrorTexture.png"; + + std::shared_ptr boxShape = m_World->AddComponent(rightWall); + + std::shared_ptr physics = m_World->AddComponent(rightWall); + physics->Static = true; + + m_World->CommitEntity(rightWall); + } + + + /*{ auto ent = m_World->CreateEntity(); std::shared_ptr transform = m_World->AddComponent(ent); transform->Position = glm::vec3(0.f, -3.f, -9.f); @@ -119,7 +181,20 @@ public: physics->Static = true; m_World->CommitEntity(ent); - } + }*/ + + { + auto ent = m_World->CreateEntity(); + m_World->SetProperty(ent, "Name", "Pad"); + auto ctransform = m_World->AddComponent(ent); + ctransform->Position = glm::vec3(0.f, -5.f, -10.f); + ctransform->Scale = glm::vec3(3.2, 0.8, 0.); + auto rectangle = m_World->AddComponent(ent); + auto physics = m_World->AddComponent(ent); + auto csprite = m_World->AddComponent(ent); + csprite->SpriteFile = "Textures/Pad.png"; + m_World->CommitEntity(ent); + } m_LastTime = glfwGetTime(); } diff --git a/include/Game/LevelSystem.h b/include/Game/LevelSystem.h index 5efa79b..6269974 100644 --- a/include/Game/LevelSystem.h +++ b/include/Game/LevelSystem.h @@ -9,11 +9,13 @@ #include "Core/CTransform.h" #include "Rendering/CSprite.h" #include "Game/CBrick.h" -//#include "Core/EContact.h" +#include "Physics/EContact.h" #include "Core/EventBroker.h" #include "Core/World.h" #include "Game/CBall.h" #include "Game/EStageCleared.h" +#include "Physics/CBoxShape.h" +#include "Physics/CPhysics.h" #include #include #include @@ -54,10 +56,14 @@ public: void EndLevel(); -private: - //dd::EventRelay m_EContact; + void Update(double dt); - bool OnContact(/*const dd::Events::Contact &event*/); +private: + dd::EventRelay m_EContact; + + bool OnContact(const dd::Events::Contact &event); + + bool m_Initialized = false; int numberOfBricks; int tRows = 7; diff --git a/include/Game/PadSystem.h b/include/Game/PadSystem.h index e2a62a1..fc5e2ba 100644 --- a/include/Game/PadSystem.h +++ b/include/Game/PadSystem.h @@ -13,6 +13,8 @@ #include "Input/EBindKey.h" //#include "Core/EContact.h" #include "Core/CTransform.h" +#include "Physics/CBoxShape.h" +#include "Physics/CPhysics.h" #include "Rendering/CSprite.h" #include "Game/CBall.h" #include "Core/Component.h" @@ -33,6 +35,7 @@ public: void Initialize() override; void Update(double dt) override; + private: dd::EventRelay m_EKeyDown; dd::EventRelay m_EKeyUp; @@ -51,9 +54,8 @@ private: class PadSteeringInputController; std::array, 4> m_PadInputControllers; - EntityID ent; - std::shared_ptr transform; - std::shared_ptr sprite; + EntityID ent = 0; + Components::Transform* transform; glm::vec3 acceleration = glm::vec3(0.f, 0.f, 0.f); bool left = false, right = false; }; diff --git a/include/Physics/CPhysics.h b/include/Physics/CPhysics.h index d6c3b21..8d1f975 100644 --- a/include/Physics/CPhysics.h +++ b/include/Physics/CPhysics.h @@ -7,11 +7,11 @@ namespace dd namespace Components { - struct Physics: public Component - { - //idk if anything should be here :) - bool Static = true; - }; +struct Physics: public Component +{ + //idk if anything should be here :) + bool Static = true; +}; } diff --git a/src/game/Game/LevelSystem.cpp b/src/game/Game/LevelSystem.cpp index d414d66..68dce72 100644 --- a/src/game/Game/LevelSystem.cpp +++ b/src/game/Game/LevelSystem.cpp @@ -9,11 +9,18 @@ void dd::Systems::LevelSystem::Initialize() { - CreateBasicLevel(tRows, tLines, tSpaceBetweenBricks, tSpaceToEdge); + EVENT_SUBSCRIBE_MEMBER(m_EContact, LevelSystem::OnContact); return; } +void dd::Systems::LevelSystem::Update(double dt) { + if (!m_Initialized) { + CreateBasicLevel(tRows, tLines, tSpaceBetweenBricks, tSpaceToEdge); + m_Initialized = true; + } +} + void dd::Systems::LevelSystem::CreateBasicLevel(int rows, int lines, glm::vec2 spacesBetweenBricks, int spaceToEdge) { int num = 0; @@ -38,6 +45,8 @@ void dd::Systems::LevelSystem::CreateBrick(int row, int line, glm::vec2 spacesBe std::shared_ptr transform = m_World->AddComponent(brick); std::shared_ptr sprite = m_World->AddComponent(brick); std::shared_ptr cBrick = m_World->AddComponent(brick); + std::shared_ptr cRec = m_World->AddComponent(brick); + std::shared_ptr cPhys = m_World->AddComponent(brick); std::string fileName = "Textures/Bricks/"; fileName.append(std::to_string(num)); fileName.append(".png"); @@ -47,6 +56,7 @@ void dd::Systems::LevelSystem::CreateBrick(int row, int line, glm::vec2 spacesBe transform->Scale = glm::vec3(1.6, 0.4, 0.); transform->Position = glm::vec3(x - 7, y + 1, -10.f); //sprite->Color = glm::vec4(1.f, 1.f, 1.f, 1.f); + m_World->CommitEntity(brick); return; } @@ -70,23 +80,31 @@ void dd::Systems::LevelSystem::OnEntityRemoved(EntityID entity) return; } -bool dd::Systems::LevelSystem::OnContact(/*const dd::Events::Contact &event,*/) +bool dd::Systems::LevelSystem::OnContact(const dd::Events::Contact &event) { /*event.Entity1 - Vi vet inte vilken som. event.Entity2 - */ - std::string event = "I'm just a placeholder :("; - EntityID entityBrick; - EntityID entityBall; - EntityID entity1; - EntityID entity2; - - auto brick = m_World->GetComponent(entity1); - auto ball = m_World->GetComponent(entity2); - if (brick != NULL) + EntityID entityBrick = event.Entity1; + auto brick = m_World->GetComponent(entityBrick); + if (brick == NULL) { + return false; + } + EntityID entityBall = event.Entity2; + //EntityID entity1 = event.Entity1; + //EntityID entity2 = event.Entity2; + + //auto brick = m_World->GetComponent(entity1); + //auto ball = m_World->GetComponent(entity2); + //std::cout << brick << std::endl; + //std::cout << ball << std::endl; + /*if (brick != NULL) + { + std::cout << "Entity1 is a brick!" << std::endl; entityBrick = entity1; if (ball != NULL) { + std::cout << "Entity2 is a ball!" << std::endl; entityBall = entity2; } } @@ -95,22 +113,25 @@ bool dd::Systems::LevelSystem::OnContact(/*const dd::Events::Contact &event,*/) brick = m_World->GetComponent(entity2); if (brick != NULL) { + std::cout << "Entity2 is a brick!" << std::endl; entityBrick = entity2; } ball = m_World->GetComponent(entity1); if (ball != NULL) { + std::cout << "Entity1 is a ball!" << std::endl; entityBall = entity1; } } if (entityBrick != NULL && entityBall != NULL) - { + {*/ + //std::cout << "We're destroying!" << std::endl; m_World->RemoveEntity(entityBrick); return true; - } + //} return false; } diff --git a/src/game/Game/PadSystem.cpp b/src/game/Game/PadSystem.cpp index d903f4e..caffb1b 100644 --- a/src/game/Game/PadSystem.cpp +++ b/src/game/Game/PadSystem.cpp @@ -20,13 +20,6 @@ void dd::Systems::PadSystem::Initialize() l.Command = "left"; EventBroker->Publish(l); - ent = m_World->CreateEntity(); - transform = m_World->AddComponent(ent); - transform->Position = glm::vec3(0.f, -5.f, -10.f); - transform->Scale = glm::vec3(3.2, 0.8, 0.); - sprite = m_World->AddComponent(ent); - sprite->SpriteFile = "Textures/Pad.png"; - EVENT_SUBSCRIBE_MEMBER(m_EKeyDown, PadSystem::OnKeyDown); EVENT_SUBSCRIBE_MEMBER(m_EKeyUp, PadSystem::OnKeyUp); @@ -35,6 +28,16 @@ void dd::Systems::PadSystem::Initialize() void dd::Systems::PadSystem::Update(double dt) { + if (ent == 0) { + for (auto it = m_World->GetEntities()->begin(); it != m_World->GetEntities()->end(); it++) { + if (m_World->GetProperty(it->first, "Name") == "Pad") { + ent = it->first; + transform = m_World->GetComponent(ent); + break; + } + } + } + if (transform->Velocity.x < -400.f) { transform->Velocity.x = -400.f; diff --git a/src/game/Physics/PhysicsSystem.cpp b/src/game/Physics/PhysicsSystem.cpp index bd0b6cc..03a3645 100644 --- a/src/game/Physics/PhysicsSystem.cpp +++ b/src/game/Physics/PhysicsSystem.cpp @@ -12,7 +12,7 @@ void dd::Systems::PhysicsSystem::Initialize() { m_ContactListener = new ContactListener(this); - m_Gravity = b2Vec2(0.f, -9.82f); + m_Gravity = b2Vec2(0.f, 0.f); m_PhysicsWorld = new b2World(m_Gravity); m_TimeStep = 1.f/60.f;