From 6ad1272d7d0ff818f824ce523b2921b2b313a027 Mon Sep 17 00:00:00 2001 From: Ethan Date: Thu, 10 Apr 2025 16:12:46 -0400 Subject: [PATCH] Adding some sound effects --- Resources/sounds/gun/mach_pew.ogg | Bin 0 -> 20553 bytes Resources/sounds/gun/reload.ogg | Bin 0 -> 35600 bytes Resources/sounds/gun_effects.xml | 4 +++ YuppleMayham/include/gameplay/gameactor.h | 19 ++++++------ .../include/gameplay/weapons/weapon.h | 2 +- YuppleMayham/include/sound/soundmanager.h | 1 + .../include/utility/resourcemanager.h | 4 +-- YuppleMayham/src/gameplay/gameactor.cpp | 28 +++++++++++------- YuppleMayham/src/gameplay/scene.cpp | 15 ++++++---- YuppleMayham/src/gameplay/weapons/weapon.cpp | 6 ++-- YuppleMayham/src/sound/engine.cpp | 16 ++++++++-- YuppleMayham/src/sound/soundmanager.cpp | 13 +++++--- YuppleMayham/src/utility/resourcemanager.cpp | 7 ++--- compile_flags.txt | 1 + 14 files changed, 72 insertions(+), 44 deletions(-) create mode 100644 Resources/sounds/gun/mach_pew.ogg create mode 100644 Resources/sounds/gun/reload.ogg create mode 100644 compile_flags.txt diff --git a/Resources/sounds/gun/mach_pew.ogg b/Resources/sounds/gun/mach_pew.ogg new file mode 100644 index 0000000000000000000000000000000000000000..9f69035c608281813d9837f1456b7a1f058323a5 GIT binary patch literal 20553 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 literal 0 HcmV?d00001 diff --git a/Resources/sounds/gun/reload.ogg b/Resources/sounds/gun/reload.ogg new file mode 100644 index 0000000000000000000000000000000000000000..7738d87e7e8a263eb850ec0b60cf7d22aa0e0e5b GIT binary patch literal 35600 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 DJPEa9 literal 0 HcmV?d00001 diff --git a/Resources/sounds/gun_effects.xml b/Resources/sounds/gun_effects.xml index ce9f250..187b7ec 100644 --- a/Resources/sounds/gun_effects.xml +++ b/Resources/sounds/gun_effects.xml @@ -6,5 +6,9 @@ + + + + diff --git a/YuppleMayham/include/gameplay/gameactor.h b/YuppleMayham/include/gameplay/gameactor.h index de16286..47a66e7 100644 --- a/YuppleMayham/include/gameplay/gameactor.h +++ b/YuppleMayham/include/gameplay/gameactor.h @@ -5,17 +5,17 @@ #include #include #include +#include #include "gameplay/entity.h" +#include "gameplay/weapons/weapon.h" #include "utility/mousestate.h" #include class AI; -class Weapon; class ISceneContext; -// TODO: Finish weapon cycling code and add default weapon to every actor // TODO: Add ammo system, then work on some basic UI design class GameActor : public Entity @@ -25,11 +25,12 @@ public: ~GameActor(); void addComponent(std::unique_ptr component); - void pickupWeapon(std::shared_ptr weapon); + void pickupWeapon(std::unique_ptr weapon); void update(double deltaTime) override; void draw() override; - const std::shared_ptr getHeldWeapon() const; + Weapon* getHeldWeapon() const; + std::span getAllWeapons(); void setRotation(const float& rotation) override; @@ -49,14 +50,12 @@ public: void cycleWeapons(const MouseState&); void followMouse(const MouseState&); private: - using component_vector_t = std::vector>; - using weapon_vector_t = std::vector>; - - component_vector_t components; - weapon_vector_t weapons; + std::vector> components; + std::vector> weapons; + std::vector weaponCache; size_t currentWeaponIndex = 0; ISceneContext* sceneContext; }; -#endif //_H_GAMEACTOR_H \ No newline at end of file +#endif //_H_GAMEACTOR_H diff --git a/YuppleMayham/include/gameplay/weapons/weapon.h b/YuppleMayham/include/gameplay/weapons/weapon.h index 0994e68..8cf1047 100644 --- a/YuppleMayham/include/gameplay/weapons/weapon.h +++ b/YuppleMayham/include/gameplay/weapons/weapon.h @@ -24,7 +24,7 @@ class WeaponScript; struct PhysicsComponent; struct WeaponData; -class Weapon : public Entity, public std::enable_shared_from_this +class Weapon : public Entity { public: Weapon(const WeaponData* data, const unsigned weaponShaderID, const unsigned bulletShaderID, ResourceManager* resourceManager); diff --git a/YuppleMayham/include/sound/soundmanager.h b/YuppleMayham/include/sound/soundmanager.h index bfde6c0..33e947e 100644 --- a/YuppleMayham/include/sound/soundmanager.h +++ b/YuppleMayham/include/sound/soundmanager.h @@ -15,6 +15,7 @@ public: private: struct AudioSource { ALuint source; + ALuint buffer; bool inUse; int priority; }; diff --git a/YuppleMayham/include/utility/resourcemanager.h b/YuppleMayham/include/utility/resourcemanager.h index 23016ea..a5af8ac 100644 --- a/YuppleMayham/include/utility/resourcemanager.h +++ b/YuppleMayham/include/utility/resourcemanager.h @@ -43,7 +43,7 @@ public: const unsigned loadSoundEffect (const std::string& id); std::unique_ptr loadAIScript (const std::string& path); std::unique_ptr loadWeaponScript (const std::string& path); - std::shared_ptr loadWeapon (const std::string& name, const unsigned weaponShaderID, const unsigned bulletShaderID); + std::unique_ptr loadWeapon (const std::string& name, const unsigned weaponShaderID, const unsigned bulletShaderID); std::shared_ptr loadAnimationSet (const std::string& name, int entityid = 0); const unsigned loadShader (const std::string& name, const std::string& vertexPath, const std::string& fragPath); @@ -62,7 +62,7 @@ private: std::unordered_map shaderIDs; std::unordered_map> sounds; std::unordered_map> sprites; - std::unordered_map> weapons; + //std::unordered_map> weapons; //std::unordered_map scripts; std::unordered_map> backgrounds; std::unordered_map> tileSets; diff --git a/YuppleMayham/src/gameplay/gameactor.cpp b/YuppleMayham/src/gameplay/gameactor.cpp index b1cc8f8..be45128 100644 --- a/YuppleMayham/src/gameplay/gameactor.cpp +++ b/YuppleMayham/src/gameplay/gameactor.cpp @@ -16,18 +16,24 @@ void GameActor::addComponent(std::unique_ptr component) components.push_back(std::move(component)); } -const std::shared_ptr GameActor::getHeldWeapon() const +Weapon* GameActor::getHeldWeapon() const { - return (weapons.empty() || currentWeaponIndex >= weapons.size()) ? nullptr : weapons[currentWeaponIndex]; + return (weapons.empty() || currentWeaponIndex >= weapons.size()) ? nullptr : weapons[currentWeaponIndex].get(); } -void GameActor::pickupWeapon(std::shared_ptr weapon) +std::span GameActor::getAllWeapons() +{ + return weaponCache; +} + +void GameActor::pickupWeapon(std::unique_ptr weapon) { weapon->setWielder(this); if (auto eventManager = sceneContext->getEventManager().lock()) { weapon->hookEventManager(eventManager); } - weapons.push_back(weapon); + weaponCache.push_back(weapon.get()); + weapons.push_back(std::move(weapon)); // wield the newly picked up weapon. getHeldWeapon()->putaway(); currentWeaponIndex = weapons.size() - 1; @@ -40,7 +46,7 @@ void GameActor::setRotation(const float& rotation) if (auto eventManager = sceneContext->getEventManager().lock()) { Direction newDir = getDirectionFromRotation(rotation); if (getDirectionFromRotation(this->rotation) != newDir) - eventManager->notify((DirectionChangeEvent){ entityid, newDir }); + eventManager->notify({ entityid, newDir }); } } this->rotation = rotation; @@ -59,14 +65,14 @@ void GameActor::update(double deltaTime) if (isMoving && !wasMoving) { if (auto event = sceneContext->getEventManager().lock()) { - event->notify((EntityMoveEvent){ entityid }); + event->notify({ entityid }); } wasMoving = true; } else if (!isMoving && wasMoving) { if (auto event = sceneContext->getEventManager().lock()) { - event->notify((EntityStopEvent){ entityid }); + event->notify({ entityid }); } wasMoving = false; } @@ -95,12 +101,12 @@ void GameActor::moveRight(){ if (physics) physics->rigidBody.applyForce(glm::vec // top-down shooter mode controls void GameActor::fireWeapon()const { - if (auto& weapon = getHeldWeapon()) { + if (auto weapon = getHeldWeapon()) { if (weapon->shoot()) { if (sceneContext->getPlayerID() == entityid) { if (auto gEvent = sceneContext->getGlobalEventManager().lock()) { - gEvent->notify((ScreenShakeEvent){0.01f, 0.8f}); - gEvent->notify((ScreenBlurEvent){1.f, 0.8f}); + gEvent->notify({0.01f, 0.8f}); + gEvent->notify({1.f, 0.8f}); } } } @@ -134,7 +140,7 @@ void GameActor::followMouse(const MouseState& mouse_state) float newRotation = glm::degrees(glm::atan(direction.y, direction.x)); if (getDirectionFromRotation(rotation) != getDirectionFromRotation(newRotation)) { if (auto event = sceneContext->getEventManager().lock()) { - event->notify((DirectionChangeEvent){ entityid, getDirectionFromRotation(newRotation) }); + event->notify({ entityid, getDirectionFromRotation(newRotation) }); } } //setRotation(glm::degrees(glm::atan(direction.y, direction.x))); diff --git a/YuppleMayham/src/gameplay/scene.cpp b/YuppleMayham/src/gameplay/scene.cpp index ff42dc9..670a2a2 100644 --- a/YuppleMayham/src/gameplay/scene.cpp +++ b/YuppleMayham/src/gameplay/scene.cpp @@ -92,8 +92,8 @@ void Scene::loadDebugShooterScene() auto defaultWeapon = resourceManager->loadWeapon("gun/pistol", weaponShader, bubbleShader); auto entityWeapon = resourceManager->loadWeapon(entityData.weapon, weaponShader, bubbleShader); - entity->pickupWeapon(defaultWeapon); - entity->pickupWeapon(entityWeapon); + entity->pickupWeapon(std::move(defaultWeapon)); + entity->pickupWeapon(std::move(entityWeapon)); entity->setPosition(glm::vec3(entityData.x * mapData->tileSize, entityData.y * mapData->tileSize, 0.f)); entity->setScale(glm::vec3(mapData->tileSize, mapData->tileSize, 1.f)); @@ -166,9 +166,12 @@ void Scene::render(std::shared_ptr renderer) //e->draw(); renderer->addDrawable(RenderLayer::GameObjects, e.get()); if (e->getHeldWeapon()) { - renderer->addDrawable(RenderLayer::GameObjects, e->getHeldWeapon().get()); - for (const auto& bullet : e->getHeldWeapon()->getBulletManager()->getBullets()) { - renderer->addDrawable(RenderLayer::GameObjects, bullet.get()); + renderer->addDrawable(RenderLayer::GameObjects, e->getHeldWeapon()); + const auto& weapons = e->getAllWeapons(); + for (auto& w : weapons) { + for (auto b : w->getBulletManager()->getBullets()) { + renderer->addDrawable(RenderLayer::GameObjects, b.get()); + } } } } @@ -222,7 +225,7 @@ void Scene::hookSceneEvents() GameActor* shooter = self->getGameActorByID(e.ownerID); GameActor* target = self->getGameActorByID(e.victimID); if (shooter && target) - if (auto& weapon = shooter->getHeldWeapon()) + if (auto weapon = shooter->getHeldWeapon()) weapon->onHitCallback(target, e.bullet.get(), e.normal); } }); diff --git a/YuppleMayham/src/gameplay/weapons/weapon.cpp b/YuppleMayham/src/gameplay/weapons/weapon.cpp index ce48c6a..8926315 100644 --- a/YuppleMayham/src/gameplay/weapons/weapon.cpp +++ b/YuppleMayham/src/gameplay/weapons/weapon.cpp @@ -119,9 +119,9 @@ void Weapon::hookEventManager(std::weak_ptr eventManager) } if (auto event = this->eventManager.lock()) { - std::weak_ptr selfWeak = shared_from_this(); - event->subscribe([selfWeak](const AnimationFinishedEvent& e) { - if (auto self = selfWeak.lock()) { + auto self = this; + event->subscribe([self](const AnimationFinishedEvent& e) { + if (self) { if (e.entityid == self->entityid && e.animType == "reload") { if (self->reloading) diff --git a/YuppleMayham/src/sound/engine.cpp b/YuppleMayham/src/sound/engine.cpp index e8031fc..65d217c 100644 --- a/YuppleMayham/src/sound/engine.cpp +++ b/YuppleMayham/src/sound/engine.cpp @@ -28,15 +28,25 @@ void AudioEngine::hookSceneManager(std::weak_ptr _events) sceneEventManager = _events; if (auto weak = sceneEventManager.lock()) { std::weak_ptr weakSelf = shared_from_this(); - weak->subscribe([weakSelf](const EntityFireEvent& e){ + auto play_sound = [weakSelf](const std::string& id, int priority, const std::optional& pos = std::nullopt) { if (auto self = weakSelf.lock()) { if (auto res = self->resourceManager.lock()) { - auto buf = res->loadSoundEffect(e.weaponType + "/shoot"); + auto buf = res->loadSoundEffect(id); if (buf != 0) { - self->soundManager->playSound(buf, 10, e.firePosition); + if (pos != std::nullopt) + self->soundManager->playSound(buf, priority, pos.value()); + else + self->soundManager->playSound(buf, priority); } } } + }; + + weak->subscribe([weakSelf,play_sound](const EntityFireEvent& e){ + play_sound(e.weaponType + "/shoot", 10, e.firePosition); + }); + weak->subscribe([weakSelf,play_sound](const EntityReloadEvent& e) { + play_sound(e.weaponType + "/reload", 9, e.position); }); } } diff --git a/YuppleMayham/src/sound/soundmanager.cpp b/YuppleMayham/src/sound/soundmanager.cpp index 44c754c..8e1b13f 100644 --- a/YuppleMayham/src/sound/soundmanager.cpp +++ b/YuppleMayham/src/sound/soundmanager.cpp @@ -10,7 +10,7 @@ SoundManager::SoundManager() s.priority = 0; alSourcef(s.source, AL_REFERENCE_DISTANCE, 1.0f); alSourcef(s.source, AL_MAX_DISTANCE, 10000.f); - alSourcef(s.source, AL_ROLLOFF_FACTOR, 1.0f); + alSourcef(s.source, AL_ROLLOFF_FACTOR, 0.3f); } alDistanceModel(AL_LINEAR_DISTANCE_CLAMPED); } @@ -25,6 +25,7 @@ void SoundManager::playSound(ALuint buffer, int priority, const glm::vec3& pos) if (!sources[ring].inUse) { sources[ring].inUse = true; sources[ring].priority = priority; + sources[ring].buffer = buffer; alSourcei(sources[ring].source, AL_BUFFER, buffer); if (pos != glm::vec3(0)) { //alSourcei(sources[ring].source, AL_SOURCE_RELATIVE, 1); @@ -40,6 +41,7 @@ void SoundManager::playSound(ALuint buffer, int priority, const glm::vec3& pos) if (!sources[ring].inUse) { sources[ring].inUse = true; sources[ring].priority = priority; + sources[ring].buffer = buffer; alSourcei(sources[ring].source, AL_BUFFER, buffer); if (pos != glm::vec3(0)) { //alSourcei(sources[ring].source, AL_SOURCE_RELATIVE, 1); @@ -48,12 +50,12 @@ void SoundManager::playSound(ALuint buffer, int priority, const glm::vec3& pos) //alSourcei(sources[ring].source, AL_SOURCE_RELATIVE, 0); } alSourcePlay(sources[ring].source); - lastUsed = ring; + lastUsed = nextIndex(ring); return; } - if (sources[ring].priority <= priority) { + if (sources[ring].priority > priority || (sources[ring].buffer != buffer && sources[ring].priority == priority)) { if (nextBest) { - if (nextBest->priority > sources[ring].priority) { + if (nextBest->priority >= sources[ring].priority) { nextBest = &sources[ring]; secIndex = ring; } @@ -65,7 +67,9 @@ void SoundManager::playSound(ALuint buffer, int priority, const glm::vec3& pos) } if (nextBest) { nextBest->priority = priority; + alSourcei(nextBest->source, AL_BUFFER, 0); alSourcei(nextBest->source, AL_BUFFER, buffer); + nextBest->buffer = buffer; if (pos != glm::vec3(0)) { //alSourcei(nextBest->source, AL_SOURCE_RELATIVE, 1); alSourcefv(nextBest->source, AL_POSITION, glm::value_ptr(pos)); @@ -86,6 +90,7 @@ void SoundManager::pollSources() alGetSourcei(s.source, AL_SOURCE_STATE, &state); if (state == AL_STOPPED) { s.inUse = false; + s.buffer = 0; alSourcei(s.source, AL_BUFFER, 0); } //else if (state != AL_PLAYING) diff --git a/YuppleMayham/src/utility/resourcemanager.cpp b/YuppleMayham/src/utility/resourcemanager.cpp index 202eb89..8f19ff9 100644 --- a/YuppleMayham/src/utility/resourcemanager.cpp +++ b/YuppleMayham/src/utility/resourcemanager.cpp @@ -78,17 +78,17 @@ Background* ResourceManager::loadBackground(const std::string& path) // We attach our script after we create our weapon because we are passing a reference to the weapon into the script and we don't want to pass an // incomplete reference to our script. -std::shared_ptr ResourceManager::loadWeapon(const std::string& id, const unsigned weaponShaderID, const unsigned bulletShaderID) +std::unique_ptr ResourceManager::loadWeapon(const std::string& id, const unsigned weaponShaderID, const unsigned bulletShaderID) { const WeaponData* data = xmlLoader->getWeaponData(id); if (!data) { LOG(ERROR, "Could not load weapon id '{}', falling back to pistol", id); data = xmlLoader->getWeaponData("gun/pistol");// using this as a fallback for now } - auto weapon = std::make_shared(data, weaponShaderID, bulletShaderID, this); + auto weapon = std::make_unique(data, weaponShaderID, bulletShaderID, this); if (!data->script.empty()) weapon->attachScript(loadWeaponScript(data->script)); - return weapon; + return std::move(weapon); } const unsigned ResourceManager::loadSoundEffect(const std::string& id) @@ -139,7 +139,6 @@ void ResourceManager::clearResources() sprites.clear(); shaders.clear(); shaderIDs.clear(); - weapons.clear(); tileSets.clear(); } diff --git a/compile_flags.txt b/compile_flags.txt new file mode 100644 index 0000000..e23b2ae --- /dev/null +++ b/compile_flags.txt @@ -0,0 +1 @@ +-std=c++20