diff --git a/src/game/Game/LevelSystem.cpp.orig b/src/game/Game/LevelSystem.cpp.orig deleted file mode 100644 index b1d1139..0000000 --- a/src/game/Game/LevelSystem.cpp.orig +++ /dev/null @@ -1,372 +0,0 @@ -// -// Created by Adniklastrator on 2015-09-09. -// - - -#include "PrecompiledHeader.h" -#include "Game/LevelSystem.h" - - -void dd::Systems::LevelSystem::Initialize() -{ - EVENT_SUBSCRIBE_MEMBER(m_EContact, LevelSystem::OnContact); - EVENT_SUBSCRIBE_MEMBER(m_ELifeLost, LevelSystem::OnLifeLost); - 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); - EVENT_SUBSCRIBE_MEMBER(m_EStageCleared, LevelSystem::OnStageCleared); - - for (int i = 0; i < Lives(); i++) { - CreateLife(i); - } - - return; -} - -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.15f, -2.f, -5.f); - transform->Scale = glm::vec3(0.1f, 0.1f, 0.1f); - - std::shared_ptr lifeNr = m_World->AddComponent(life); - lifeNr->Number = number; - - auto model = m_World->AddComponent(life); - model->ModelFile = "Models/Test/Ball/Ballopus.obj"; - - - m_World->CommitEntity(life); -} - -void dd::Systems::LevelSystem::Update(double dt) -{ - if (!m_Initialized) { - CreateBasicLevel(Rows(), Lines(), SpaceBetweenBricks(), SpaceToEdge()); - m_Initialized = true; - } - - if (Lives() < 0) - { - SetLives(3); - Events::GameOver e; - EventBroker->Publish(e); - } -} - -void dd::Systems::LevelSystem::UpdateEntity(double dt, EntityID entity, EntityID parent) -{ - auto ball = m_World->GetComponent(entity); - - if (ball != nullptr) { - auto transformBall = m_World->GetComponent(entity); - if (glm::abs(transformBall->Velocity.y) < 2) { - if (transformBall->Velocity.y > 0) { - transformBall->Velocity.y = 2; - } else { - transformBall->Velocity.y = -2; - } - } - if (transformBall->Position.y < -EdgeY() - 4) { - if (MultiBalls() != 0) { - SetMultiBalls(MultiBalls() - 1); -// m_World->RemoveComponent(entity); -// m_World->RemoveComponent(entity); -// m_World->RemoveComponent(entity); -// m_World->RemoveComponent(entity); - m_World->RemoveEntity(entity); - } else if (Lives() == PastLives()) { - Events::ResetBall be; - EventBroker->Publish(be); - Events::LifeLost e; - e.Entity = entity; - EventBroker->Publish(e); - return; - } - } else if (transformBall->Position.x > EdgeX()) { - 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 < -EdgeX()) { - 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.y > EdgeY()) { - if (transformBall->Velocity.y > 0) { - glm::vec2 reflectedVelocity = glm::reflect(glm::vec2(transformBall->Velocity.x, transformBall->Velocity.y), glm::vec2(0, 1)); - transformBall->Velocity = glm::vec3(reflectedVelocity, 0.f); - } - } - } - - if (Lives() != PastLives()) { - auto life = m_World->GetComponent(entity); - if (life != nullptr) { - if (life->Number + 1 == PastLives()) { -// m_World->RemoveComponent(entity); -// m_World->RemoveComponent(entity); - m_World->RemoveEntity(entity); - SetPastLives(Lives()); - } - } - } - if (NumberOfBricks() <= 0) { - /*SetRestarting(true); - if (MultiBalls() <= 0 && PowerUps() <= 0) { - Events::ResetBall e; - EventBroker->Publish(e); - Events::ScoreEvent es; - es.Score = 500; - EventBroker->Publish(es); - Events::StageCleared ec; - EventBroker->Publish(ec); - CreateBasicLevel(Rows(), Lines(), SpaceBetweenBricks(), SpaceToEdge()); - } else { - if (ball != nullptr && MultiBalls() > 0) { - SetMultiBalls(MultiBalls() - 1); - m_World->RemoveComponent(entity); - m_World->RemoveComponent(entity); - m_World->RemoveComponent(entity); - m_World->RemoveComponent(entity); - m_World->RemoveEntity(entity); - auto transformBall = m_World->GetComponent(entity); - } else { - auto powerUp = m_World->GetComponent(entity); - if (powerUp != nullptr) { - SetPowerUps(PowerUps() - 1); - m_World->RemoveComponent(entity); - m_World->RemoveComponent(entity); - m_World->RemoveEntity(entity); - } - } - }*/ - } -} - -void dd::Systems::LevelSystem::CreateBasicLevel(int rows, int lines, glm::vec2 spacesBetweenBricks, float spaceToEdge) -{ - SetNumberOfBricks(rows * lines); - std::cout << "You're only doing this once, right?" << std::endl; - int num = 0; - for (int i = 0; i < rows; i++) { - num++; - for (int j = 0; j < Lines(); j++) { - CreateBrick(i, j, spacesBetweenBricks, spaceToEdge, num); - } - if (num == 7) - num = 0; - } - - SetNumberOfBricks(rows * lines); - SetRestarting(false); - return; -} - -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); - auto model = 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); - cPhys->Static = false; - cPhys->GravityScale = 0.f; - cPhys->Category = CollisionLayer::Type::Brick; - cPhys->Mask = CollisionLayer::Type::Ball; - - std::string fileName = "Textures/Bricks/"; - fileName.append(std::to_string(num)); - fileName.append(".png"); - //sprite->SpriteFile = fileName; - model->ModelFile = "Models/Test/Brick/Brick.obj"; - if ((line == 1 && row == 4) || (line == 3 && row == 2) || (line == 6 && row == 6)) { - std::shared_ptr cPow = m_World->AddComponent(brick); - } - 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, 5 - spaceToEdge - y , -10.f); - cBrick->Score = 10 * num; - - //sound - auto collisionSound = m_World->AddComponent(brick); - collisionSound->filePath = "Sounds/Brick/shortbrickbreak.wav"; - - m_World->CommitEntity(brick); - return; -} - -void dd::Systems::LevelSystem::ProcessCollision() -{ - // Like, go into brick component and check what it does upon collision. Maybe not done here? - return; -} - -void dd::Systems::LevelSystem::OnEntityRemoved(EntityID entity) -{ - auto brick = m_World->GetComponent(entity); - if (brick != nullptr) { - SetNumberOfBricks(NumberOfBricks() - 1); - Events::ScoreEvent es; - es.Score = brick->Score; - EventBroker->Publish(es); - /*if (numberOfBricks < 1) { - EndLevel(); - }*/ - } - return; -} - -bool dd::Systems::LevelSystem::OnContact(const dd::Events::Contact &event) -{ - EntityID entityBrick; - EntityID entityBall; - auto ball = m_World->GetComponent(event.Entity2); - auto brick = m_World->GetComponent(event.Entity1); - if (brick != nullptr) { - entityBrick = event.Entity1; - } else { - brick = m_World->GetComponent(event.Entity2); - if (brick != nullptr) { - entityBrick = event.Entity2; - } else { - return false; - } - } - if (ball != nullptr) { - entityBall = event.Entity2; - } else { - ball = m_World->GetComponent(event.Entity1); - if (ball != nullptr) { - entityBall = event.Entity1; - } else { - return false; - } - } - - brick = m_World->GetComponent(entityBrick); - if (brick == nullptr) { - return false; - } - - auto power = m_World->GetComponent(entityBrick); - if (power != nullptr) { - Events::CreatePowerUp e; - auto transform = m_World->GetComponent(entityBrick); - e.Position = transform->Position; - EventBroker->Publish(e); - } - - if (ball != nullptr && Restarting() == false) { - auto ballTransform = m_World->GetComponent(entityBall); - -// m_World->RemoveComponent(entityBrick); -// m_World->RemoveComponent(entityBrick); -// m_World->RemoveComponent(entityBrick); -// m_World->RemoveComponent(entityBrick); -// m_World->RemoveEntity(entityBrick); - - auto physicsComponent = m_World->GetComponent(entityBrick); - physicsComponent->GravityScale = 1.f; - physicsComponent->Mask = CollisionLayer::Type::Water | CollisionLayer::Type::Wall; - - auto transformComponentBrick = m_World->GetComponent(entityBrick); - auto transformComponentBall = m_World->GetComponent(entityBall); - - Events::SetImpulse e; - e.Entity = entityBrick; - - glm::vec2 point = glm::vec2(transformComponentBrick->Position.x + ((transformComponentBrick->Position.x - transformComponentBall->Position.x)/4), transformComponentBrick->Position.y + ((transformComponentBrick->Position.y - transformComponentBall->Position.y )/4)); - - e.Impulse = glm::normalize(point)/2.f; - e.Point = point; - EventBroker->Publish(e); - //TODO: Bricks dont collide with walls D= - - SetNumberOfBricks(NumberOfBricks() - 1); - if (NumberOfBricks() <= 0) { - SetMultiBalls(MultiBalls() + 1); - } - Events::ScoreEvent es; - es.Score = brick->Score; - EventBroker->Publish(es); - -<<<<<<< HEAD - // std::cout << NumberOfBricks() << std::endl; -======= - //std::cout << NumberOfBricks() << std::endl; ->>>>>>> origin/master - //std::cout << "Score: " << Score() << std::endl; - } - - return true; -} - -bool dd::Systems::LevelSystem::OnLifeLost(const dd::Events::LifeLost &event) -{ - SetLives(Lives() - 1); - - return true; -} - -bool dd::Systems::LevelSystem::OnScoreEvent(const dd::Events::ScoreEvent &event) -{ - SetScore(Score() += event.Score); - - return true; -} - -bool dd::Systems::LevelSystem::OnMultiBall(const dd::Events::MultiBall &event) -{ - SetMultiBalls(MultiBalls()+2); -} - -bool dd::Systems::LevelSystem::OnCreatePowerUp(const dd::Events::CreatePowerUp &event) -{ - SetPowerUps(PowerUps() + 1); - auto powerUp = m_World->CreateEntity(); - std::shared_ptr transform = m_World->AddComponent(powerUp); - auto model = m_World->AddComponent(powerUp); - std::shared_ptr cRec = m_World->AddComponent(powerUp); - std::shared_ptr cPhys = m_World->AddComponent(powerUp); - cPhys->Static = false; - cPhys->Category = CollisionLayer::Type::PowerUp; - cPhys->Mask = CollisionLayer::Type::Pad; - - std::shared_ptr cPow = m_World->AddComponent(powerUp); - - - transform->Position = event.Position; - transform->Scale = glm::vec3(0.2, 0.2, 0.2); - transform->Velocity = glm::vec3(0, -4, 0); - - model->ModelFile = "Models/Test/Ball/Ballopus.obj"; - - m_World->CommitEntity(powerUp); - - return true; -} - -bool dd::Systems::LevelSystem::OnPowerUpTaken(const dd::Events::PowerUpTaken &event) -{ - SetPowerUps(PowerUps() - 1); - return true; -} - -bool dd::Systems::LevelSystem::OnStageCleared(const dd::Events::StageCleared &event) -{ - return true; -} - -void dd::Systems::LevelSystem::EndLevel() -{ - Events::StageCleared e; - EventBroker->Publish(e); - return; -} - diff --git a/src/game/Game/PadSystem.cpp.orig b/src/game/Game/PadSystem.cpp.orig deleted file mode 100755 index 7d21606..0000000 --- a/src/game/Game/PadSystem.cpp.orig +++ /dev/null @@ -1,313 +0,0 @@ -// -// Created by Adniklastrator on 2015-09-10. -// - -#include "PrecompiledHeader.h" -#include "Game/PadSystem.h" -#include "Core/World.h" -#include -#include -#include - - -void dd::Systems::PadSystem::Initialize() -{ - Events::BindKey r; - r.KeyCode = GLFW_KEY_RIGHT; - r.Command = "right"; - EventBroker->Publish(r); - - Events::BindKey l; - l.KeyCode = GLFW_KEY_LEFT; - l.Command = "left"; - EventBroker->Publish(l); - - EVENT_SUBSCRIBE_MEMBER(m_EKeyDown, &PadSystem::OnKeyDown); - EVENT_SUBSCRIBE_MEMBER(m_EKeyUp, &PadSystem::OnKeyUp); - EVENT_SUBSCRIBE_MEMBER(m_EContact, &PadSystem::OnContact); - EVENT_SUBSCRIBE_MEMBER(m_EContactPowerUp, &PadSystem::OnContactPowerUp); - EVENT_SUBSCRIBE_MEMBER(m_EResetBall, &PadSystem::OnResetBall); - EVENT_SUBSCRIBE_MEMBER(m_EMultiBall, &PadSystem::OnMultiBall); - EVENT_SUBSCRIBE_MEMBER(m_EStageCleared, &PadSystem::OnStageCleared); -} - -void dd::Systems::PadSystem::UpdateEntity(double dt, EntityID entity, EntityID parent) -{ - auto ball = m_World->GetComponent(entity); - if (ball != nullptr) { - if (ReplaceBall() == true) { - SetReplaceBall(false); - - auto transform = m_World->GetComponent(entity); - transform->Position = glm::vec3(0.0f, 0.26f, -10.f); - transform->Velocity = glm::vec3(0.0f, -ball->Speed, 0.f); - } - } -} - -void dd::Systems::PadSystem::Update(double dt) -{ - if (Entity() == 0) { - for (auto it = m_World->GetEntities()->begin(); it != m_World->GetEntities()->end(); it++) { - if (m_World->GetProperty(it->first, "Name") == "Pad") { - SetEntity(it->first); - SetTransform(m_World->GetComponent(Entity())); - SetPad(m_World->GetComponent(Entity())); - break; - } - } - } - - auto transform = Transform(); - auto pad = Pad(); - auto acceleration = Acceleration(); - - if (transform->Velocity.x < -pad->MaxSpeed) { - transform->Velocity.x = -pad->MaxSpeed; - } - else if (transform->Velocity.x > pad->MaxSpeed) { - transform->Velocity.x = pad->MaxSpeed; - } - transform->Position += transform->Velocity * (float)dt; - transform->Velocity += acceleration * (float)dt; - transform->Velocity -= transform->Velocity * pad->SlowdownModifier * (float)dt; - - - if (Left()) { - acceleration.x = -pad->AccelerationSpeed; -<<<<<<< HEAD - } - else if (Right()) { -======= - } else if (Right()) { ->>>>>>> 72413dc0a93bd3a2f6ab9fa7e19bbc3b846232db - acceleration.x = pad->AccelerationSpeed; - } else { - acceleration.x = 0.f; - } - - SetTransform(transform); - SetPad(pad); - SetAcceleration(acceleration); - - if (MultiBall() == true) { - SetMultiBall(false); - - Events::MultiBall e; - e.padTransform = transform; - EventBroker->Publish(e); - } - - return; -} - -EntityID dd::Systems::PadSystem::CreateBall() -{ - auto ent = m_World->CreateEntity(); - std::shared_ptr transform = m_World->AddComponent(ent); - transform->Position = glm::vec3(0.5f, 0.26f, -10.f); - transform->Scale = glm::vec3(0.5f, 0.5f, 0.5f); - auto model = m_World->AddComponent(ent); - model->ModelFile = "Models/Test/Ball/Ballopus.obj"; - //auto pointlight = m_World->AddComponent(ent); - std::shared_ptr circleShape = m_World->AddComponent(ent); - std::shared_ptr cball = m_World->AddComponent(ent); - std::shared_ptr physics = m_World->AddComponent(ent); - physics->Static = false; - - cball->Speed = 10; - - m_World->CommitEntity(ent); - - return ent; -} - -bool dd::Systems::PadSystem::OnKeyDown(const dd::Events::KeyDown &event) -{ - int val = event.KeyCode; - if (val == GLFW_KEY_UP) { - //std::cout << "Up!" << std::endl; - } else if (val == GLFW_KEY_DOWN) { - //std::cout << "Down!" << std::endl; - } else if (val == GLFW_KEY_LEFT) { - //std::cout << "Left!" << std::endl; - //acceleration.x = -0.01f; - SetLeft(true); - } else if (val == GLFW_KEY_RIGHT) { - //std::cout << "Right!" << std::endl; - //acceleration.x = 0.01f; - SetRight(true); - } else if (val == GLFW_KEY_R) { - SetReplaceBall(true); - } else if (val == GLFW_KEY_M) { - SetMultiBall(true); - } else if (val == GLFW_KEY_D) { - return false; - } - return true; -} - -bool dd::Systems::PadSystem::OnKeyUp(const dd::Events::KeyUp &event) -{ - int val = event.KeyCode; - if (val == GLFW_KEY_UP) { - - } else if (val == GLFW_KEY_DOWN) { - - } else if (val == GLFW_KEY_LEFT) { - SetLeft(false); - } else if (val == GLFW_KEY_RIGHT) { - SetRight(false); - } - return true; -} - -bool dd::Systems::PadSystem::OnContact(const dd::Events::Contact &event) -{ - /* - EntityID entityBall = event.Entity2; - auto ball = m_World->GetComponent(entityBall); - if (ball == NULL) { - return false; - } - EntityID entityPad = event.Entity1; - auto pad = m_World->GetComponent(entityPad); - if (pad == NULL) { - return false; - } - auto transformBall = m_World->GetComponent(entityBall); - auto transformPad = m_World->GetComponent(entityPad); - - float movementMultiplier = 0.5f; - - //float movementX = (event.ContactPoint.x - transformPad->Position.x) * movementMultiplier; - //float movementY = glm::cos((abs(movementX) / (3.2f * movementMultiplier)) * 3.14159265359f / 2) * 2.f; - if (whatX > 0) { - movementX = movementMultiplier * whatX; - //std::cout << "Right!" << std::endl; - } else { - movementX = movementMultiplier * whatX; - //std::cout << "Left!" << std::endl; - } - - // std::cout << movementX << " " << movementY << std::endl; - - //float movementX = (event.ContactPoint.x - transformPad->Position.x) * movementMultiplier; -<<<<<<< HEAD - float movementY = glm::cos((abs(movementX) / ((1.6f) * movementMultiplier)) * 3.14159265359f / 2) + 1; -======= - float movementY = glm::cos((abs(movementX) / ((1.6f) * movementMultiplier)) * 3.14159265359f / 2)+ 0.2; ->>>>>>> 72413dc0a93bd3a2f6ab9fa7e19bbc3b846232db - - //std::cout << movementX << " " << movementY << std::endl; - - float len = glm::length(transformBall->Velocity); - //auto pointlight = m_World->AddComponent(ent); - - - transformBall->Velocity += glm::vec3(transformPad->Velocity.x, 0, 0); - transformBall->Velocity = glm::normalize(transformBall->Velocity) * len; - - - //transform->Velocity = glm::vec3(movementX, movementY, 0.f); - */ -} - -bool dd::Systems::PadSystem::OnContactPowerUp(const dd::Events::Contact &event) -{ - EntityID entityPower; - EntityID entityPad; - auto powerUp = m_World->GetComponent(event.Entity1); - auto pad = m_World->GetComponent(event.Entity2); - if (powerUp != nullptr) { - entityPower = event.Entity1; - } else { - powerUp = m_World->GetComponent(event.Entity2); - if (powerUp != nullptr) { - entityPower = event.Entity2; - } - } - if (pad != nullptr) { - entityPad = event.Entity2; - } else { - pad = m_World->GetComponent(event.Entity1); - if (pad != nullptr) { - entityPad = event.Entity1; - } - } - - if (entityPower == NULL || entityPad == NULL) { - return false; - } - - pad = m_World->GetComponent(entityPad); - if (pad == nullptr) { - return false; - } - - m_World->RemoveComponent(entityPower); - m_World->RemoveComponent(entityPower); - m_World->RemoveComponent(entityPower); - 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; - EventBroker->Publish(e); - return true; -} - -bool dd::Systems::PadSystem::OnResetBall(const dd::Events::ResetBall &event) -{ - SetReplaceBall(true); - return true; -} - -bool dd::Systems::PadSystem::OnMultiBall(const dd::Events::MultiBall &event) -{ - auto ent1 = CreateBall(); - auto ent2 = CreateBall(); - auto transform1 = m_World->GetComponent(ent1); - auto transform2 = m_World->GetComponent(ent2); - auto ball1 = m_World->GetComponent(ent1); - auto ball2 = m_World->GetComponent(ent2); - auto padTransform = event.padTransform; - float x1 = padTransform->Position.x - 2, x2 = padTransform->Position.x + 2; - if (x1 < -3.1) { - x1 = 3; - } - if (x2 > 3.1) { - x2 = -3; - } - 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; - - return true; -} - -bool dd::Systems::PadSystem::OnStageCleared(const dd::Events::StageCleared &event) -{ - auto entity = CreateBall(); - return true; -} - -bool dd::Systems::PadSystem::PadSteeringInputController::OnCommand(const Events::InputCommand &event) -{ - std::string command = event.Command; - - std::cout << "Command!" << std::endl; - - if (command == "right") { - std::cout << "Right!" << std::endl; - } else if (command == "left") { - std::cout << "Left!" << std::endl; - } - - return true; -} \ No newline at end of file diff --git a/src/game/Sound/SoundSystem.cpp.orig b/src/game/Sound/SoundSystem.cpp.orig deleted file mode 100644 index bc7e9b3..0000000 --- a/src/game/Sound/SoundSystem.cpp.orig +++ /dev/null @@ -1,183 +0,0 @@ -#include "PrecompiledHeader.h" -#include "Sound/SoundSystem.h" - -dd::Systems::SoundSystem::~SoundSystem() -{ - alcCloseDevice(m_Device); -}; - -void dd::Systems::SoundSystem::Initialize() -{ - //initialize OpenAL - m_Device = alcOpenDevice(NULL); - ALCcontext* context; - - if (m_Device) { - context = alcCreateContext(m_Device, NULL); - alcMakeContextCurrent(context); - } - else { - LOG_ERROR("OpenAL failed to initialize."); - } - alGetError(); - - //Subscribe to events - EVENT_SUBSCRIBE_MEMBER(m_EContact, &SoundSystem::OnContact); - EVENT_SUBSCRIBE_MEMBER(m_EPlaySFX, &SoundSystem::OnPlaySound); - EVENT_SUBSCRIBE_MEMBER(m_EStopSound, &SoundSystem::OnStopSound); - EVENT_SUBSCRIBE_MEMBER(m_EMasterVolume, &SoundSystem::OnMasterVolume); - -<<<<<<< HEAD - //Todo: Move this - { - dd::Events::PlaySound e; - e.FilePath = "Sounds/BGM/under-the-sea-instrumental.wav"; - e.IsAmbient = true; - EventBroker->Publish(e); - } - { - dd::Events::PlaySound e; - e.FilePath = "Sounds/BGM/water-flowing.wav"; - e.Gain = 0.3f; - e.IsAmbient = true; - EventBroker->Publish(e); - } -======= - - ->>>>>>> origin/master -} - -void dd::Systems::SoundSystem::Update(double dt) -{ - //Clean up none-active sources - //Only used for SFX's. BGM's are handled on stop sound. - std::vector deleteList; - for (auto& item : m_SFXSourcesToBuffers) { - ALint sourceState; - alGetSourcei(item.first, AL_SOURCE_STATE, &sourceState); - if (sourceState == AL_STOPPED) { - deleteList.push_back(item.first); - } - } - - for (int i = 0; i < deleteList.size(); i++) { - alDeleteSources(1, &deleteList[i]); - //alDeleteBuffers(1, &m_SourcesToBuffers[deleteList[i]]); - m_SFXSourcesToBuffers.erase(deleteList[i]); - } -} - -ALuint dd::Systems::SoundSystem::CreateSource() -{ - ALuint source; - alGenSources((ALuint)1, &source); - - return source; -} - -bool dd::Systems::SoundSystem::OnPlaySound(const dd::Events::PlaySound &event) -{ - //Loading and binding sound buffer to source - Sound *sound = ResourceManager::Load(event.FilePath); - if (sound == nullptr) { - return false; - } - ALuint source = CreateSource(); - ALuint buffer = sound->Buffer(); - alSourcei(source, AL_BUFFER, buffer); - - //Sound settings - float relativeVolume = 1.f; - if (event.IsAmbient) { - alSourcei(source, AL_LOOPING, AL_TRUE); - relativeVolume = m_BGMMasterVolume; - m_BGMSourcesToBuffers[source] = sound; - - } - else if (!event.IsAmbient) - { - m_SFXSourcesToBuffers[source] = sound; - alSourcei(source, AL_LOOPING, AL_FALSE); - relativeVolume = m_SFXMasterVolume; - } - - alSourcef(source, AL_GAIN, (event.Gain * relativeVolume)); - alSourcef(source, AL_PITCH, event.Pitch); - - - //Play - alSourcePlay(source); - return true; -} - -bool dd::Systems::SoundSystem::OnStopSound(const dd::Events::StopSound &event) -{ - ALuint itemToDeleted; - for (auto& item : m_BGMSourcesToBuffers) - { - if (item.second->Path() == event.FilePath) { - itemToDeleted = item.first; - break; - } - } - alSourceStop(itemToDeleted); - alDeleteSources(1, &itemToDeleted); - m_BGMSourcesToBuffers.erase(itemToDeleted); - - //Should not happen because SFX's should be very short. - for (auto item : m_SFXSourcesToBuffers) - { - if (item.second->Path() == event.FilePath) { - alSourceStop(item.first); - return true; - } - } - return false; -} - -bool dd::Systems::SoundSystem::OnMasterVolume(const dd::Events::MasterVolume &event) -{ - //TODO: Make the Gain depend on the value given when stored. - //TODO: .. now it ONLY uses the master Gain - if (event.IsAmbient) { - m_BGMMasterVolume = event.Gain; - for (auto& item : m_BGMSourcesToBuffers) - { - alSourcef(item.first, AL_GAIN, event.Gain); - } - return true; - } - else if (!event.IsAmbient) { - m_SFXMasterVolume = event.Gain; - for (auto& item : m_SFXSourcesToBuffers) - { - alSourcef(item.first, AL_GAIN, event.Gain); - } - return true; - } - return false; -} - -bool dd::Systems::SoundSystem::OnContact(const dd::Events::Contact &event) -{ - //Check which entity has the collisionSound component. - auto collisionSound = m_World->GetComponent(event.Entity1); - if (collisionSound == nullptr) { - collisionSound = m_World->GetComponent(event.Entity2); - if (collisionSound == nullptr) { - //None of the entities had a collisionSound component. - return false; - } - } - - //Send play-sound event - dd::Events::PlaySound e; - e.FilePath = collisionSound->FilePath; - e.IsAmbient = false; - EventBroker->Publish(e); - return true; -} - - -