From d82e1afd59518613ea86da0bbfb8c9e8f65c3cc3 Mon Sep 17 00:00:00 2001 From: Fireblade <72758695+Firebladedoge229@users.noreply.github.com> Date: Fri, 8 May 2026 03:41:44 -0400 Subject: [PATCH] feat: minecart sound effects --- Minecraft.Client/Common/App_Defines.h | 1 + Minecraft.Client/Common/App_enums.h | 1 + Minecraft.Client/Common/Audio/SoundEngine.cpp | 116 +++++++----- Minecraft.Client/Common/Audio/SoundEngine.h | 3 + Minecraft.Client/Common/Consoles_App.cpp | 20 ++ .../MediaWindows64/SettingsAudioMenu1080.swf | Bin 13967 -> 14050 bytes .../Common/UI/UIScene_SettingsAudioMenu.cpp | 5 + .../Common/UI/UIScene_SettingsAudioMenu.h | 5 +- .../Sound/Minecraft/mob/minecart/inside.ogg | Bin 0 -> 57426 bytes .../Sound/Minecraft/mob/minecart/rolling.ogg | Bin 0 -> 15354 bytes .../Windows64Media/loc/stringsGeneric.xml | 4 + Minecraft.World/Minecart.cpp | 60 +++++- Minecraft.World/Minecart.h | 6 +- Minecraft.World/MinecartSoundInstance.cpp | 175 ++++++++++++++++++ Minecraft.World/MinecartSoundInstance.h | 43 +++++ Minecraft.World/cmake/sources/Common.cmake | 2 + 16 files changed, 388 insertions(+), 53 deletions(-) create mode 100644 Minecraft.Client/Windows64Media/Sound/Minecraft/mob/minecart/inside.ogg create mode 100644 Minecraft.Client/Windows64Media/Sound/Minecraft/mob/minecart/rolling.ogg create mode 100644 Minecraft.World/MinecartSoundInstance.cpp create mode 100644 Minecraft.World/MinecartSoundInstance.h diff --git a/Minecraft.Client/Common/App_Defines.h b/Minecraft.Client/Common/App_Defines.h index 004436b2..d44eaa33 100644 --- a/Minecraft.Client/Common/App_Defines.h +++ b/Minecraft.Client/Common/App_Defines.h @@ -109,6 +109,7 @@ enum EGameHostOptionWorldSize #define GAMESETTING_EXCLUSIVEFULLSCREEN 0x02000000 #define GAMESETTING_CLASSICCRAFTING 0x04000000 #define GAMESETTING_CAVESOUNDS 0x08000000 +#define GAMESETTING_MINECARTSOUNDS 0x10000000 // defines for languages diff --git a/Minecraft.Client/Common/App_enums.h b/Minecraft.Client/Common/App_enums.h index 1564f088..d272bb51 100644 --- a/Minecraft.Client/Common/App_enums.h +++ b/Minecraft.Client/Common/App_enums.h @@ -185,6 +185,7 @@ enum eGameSetting //TU25 eGameSetting_ClassicCrafting, eGameSetting_CaveSounds, + eGameSetting_MinecartSounds, }; diff --git a/Minecraft.Client/Common/Audio/SoundEngine.cpp b/Minecraft.Client/Common/Audio/SoundEngine.cpp index 2828713d..7662c4f8 100644 --- a/Minecraft.Client/Common/Audio/SoundEngine.cpp +++ b/Minecraft.Client/Common/Audio/SoundEngine.cpp @@ -605,34 +605,8 @@ void SoundEngine::play(int iSound, float x, float y, float z, float volume, floa m_activeSounds.push_back(s); } -///////////////////////////////////////////// -// -// -// startElytraSound / stopElytraSound -// Manages a single persistent looping sound for elytra gliding. -// Call startElytraSound every tick while gliding (it no-ops if already running, -// just updates volume). Call stopElytraSound when gliding ends. -// -// IMPORTANT: m_elytraLoopingSound is NOT added to m_activeSounds. -// The tick() cleanup loop deletes sounds where is_playing()==false. -// A looping sound briefly reports is_playing()==false at the loop point, -// which would cause tick() to free it and leave m_elytraLoopingSound dangling. -// -///////////////////////////////////////////// -void SoundEngine::startElytraSound(float x, float y, float z, float volume, float pitch) +MiniAudioSound* SoundEngine::startLoopingSound(const wstring& name, float x, float y, float z, float volume, float pitch, bool bIs3D) { - // If already initialized just update volume and pitch - never reinitialize mid-flight. - if (m_elytraLoopingSound != nullptr) - { - float finalVolume = volume * m_MasterEffectsVolume * SFX_VOLUME_MULTIPLIER; - if (finalVolume > SFX_MAX_GAIN) finalVolume = SFX_MAX_GAIN; - ma_sound_set_volume(&m_elytraLoopingSound->sound, finalVolume); - ma_sound_set_pitch(&m_elytraLoopingSound->sound, pitch); - return; - } - - // Resolve file path using the same logic as play(). - wstring name = wchSoundNames[eSoundType_ITEM_ELYTRA_FLYING]; char* soundName = ConvertSoundPathToName(name); char basePath[256]; sprintf_s(basePath, "Windows64Media/Sound/Minecraft/%s", soundName); @@ -652,42 +626,100 @@ void SoundEngine::startElytraSound(float x, float y, float z, float volume, floa break; } } - if (!found) return; + if (!found) + { + return nullptr; + } MiniAudioSound* s = new MiniAudioSound(); memset(&s->info, 0, sizeof(AUDIO_INFO)); - s->info.volume = volume; s->info.pitch = pitch; - s->info.bIs3D = false; - s->info.iSound = eSoundType_ITEM_ELYTRA_FLYING + eSFX_MAX; + s->info.x = x; + s->info.y = y; + s->info.z = z; + s->info.volume = volume; + s->info.pitch = pitch; + s->info.bIs3D = bIs3D; + s->info.bUseSoundsPitchVal = false; - // Synchronous load so the sound is immediately ready - no ASYNC gap. - if (ma_sound_init_from_file(&m_engine, finalPath, 0, - nullptr, nullptr, &s->sound) != MA_SUCCESS) + if (ma_sound_init_from_file(&m_engine, finalPath, 0, nullptr, nullptr, &s->sound) != MA_SUCCESS) { delete s; - return; + return nullptr; } - ma_sound_set_spatialization_enabled(&s->sound, MA_FALSE); + ma_sound_set_spatialization_enabled(&s->sound, bIs3D ? MA_TRUE : MA_FALSE); ma_sound_set_looping(&s->sound, MA_TRUE); float finalVolume = volume * m_MasterEffectsVolume * SFX_VOLUME_MULTIPLIER; - if (finalVolume > SFX_MAX_GAIN) finalVolume = SFX_MAX_GAIN; + if (finalVolume > SFX_MAX_GAIN) + finalVolume = SFX_MAX_GAIN; ma_sound_set_volume(&s->sound, finalVolume); ma_sound_set_pitch(&s->sound, pitch); + if (bIs3D) + { + ma_sound_set_position(&s->sound, x, y, z); + } ma_sound_start(&s->sound); + return s; +} +void SoundEngine::updateLoopingSound(MiniAudioSound* sound, float x, float y, float z, float volume, float pitch) +{ + if (sound == nullptr) + { + return; + } + + float finalVolume = volume * m_MasterEffectsVolume * SFX_VOLUME_MULTIPLIER; + if (finalVolume > SFX_MAX_GAIN) + finalVolume = SFX_MAX_GAIN; + ma_sound_set_volume(&sound->sound, finalVolume); + ma_sound_set_pitch(&sound->sound, pitch); + ma_sound_set_position(&sound->sound, x, y, z); +} + +void SoundEngine::stopLoopingSound(MiniAudioSound* sound) +{ + if (sound == nullptr) + { + return; + } + + ma_sound_stop(&sound->sound); + ma_sound_uninit(&sound->sound); + delete sound; +} + +///////////////////////////////////////////// +// +// +// startElytraSound / stopElytraSound +// Manages a single persistent looping sound for elytra gliding. +// Call startElytraSound every tick while gliding (it no-ops if already running, +// just updates volume). Call stopElytraSound when gliding ends. +// +// IMPORTANT: m_elytraLoopingSound is NOT added to m_activeSounds. +// The tick() cleanup loop deletes sounds where is_playing()==false. +// A looping sound briefly reports is_playing()==false at the loop point, +// which would cause tick() to free it and leave m_elytraLoopingSound dangling. +// +///////////////////////////////////////////// +void SoundEngine::startElytraSound(float x, float y, float z, float volume, float pitch) +{ + // If already initialized just update volume and pitch - never reinitialize mid-flight. + if (m_elytraLoopingSound != nullptr) + { + updateLoopingSound(m_elytraLoopingSound, x, y, z, volume, pitch); + return; + } // NOT added to m_activeSounds - tick() cleanup would delete it at loop boundaries. - m_elytraLoopingSound = s; + m_elytraLoopingSound = startLoopingSound(wchSoundNames[eSoundType_ITEM_ELYTRA_FLYING], x, y, z, volume, pitch, false); } void SoundEngine::stopElytraSound() { if (m_elytraLoopingSound == nullptr) return; - - ma_sound_stop(&m_elytraLoopingSound->sound); - ma_sound_uninit(&m_elytraLoopingSound->sound); - delete m_elytraLoopingSound; + stopLoopingSound(m_elytraLoopingSound); m_elytraLoopingSound = nullptr; } ///////////////////////////////////////////// diff --git a/Minecraft.Client/Common/Audio/SoundEngine.h b/Minecraft.Client/Common/Audio/SoundEngine.h index 5a593df9..8b3ec7a2 100644 --- a/Minecraft.Client/Common/Audio/SoundEngine.h +++ b/Minecraft.Client/Common/Audio/SoundEngine.h @@ -127,6 +127,9 @@ public: void GetSoundName(char *szSoundName,int iSound); #endif void play(int iSound, float x, float y, float z, float volume, float pitch) override; + MiniAudioSound* startLoopingSound(const wstring& name, float x, float y, float z, float volume, float pitch, bool bIs3D = true); + void updateLoopingSound(MiniAudioSound* sound, float x, float y, float z, float volume, float pitch); + void stopLoopingSound(MiniAudioSound* sound); void startElytraSound(float x, float y, float z, float volume, float pitch); void stopElytraSound(); void playStreaming(const wstring& name, float x, float y , float z, float volume, float pitch, bool bMusicDelay=true) override; diff --git a/Minecraft.Client/Common/Consoles_App.cpp b/Minecraft.Client/Common/Consoles_App.cpp index cb400e4f..9627c7a9 100644 --- a/Minecraft.Client/Common/Consoles_App.cpp +++ b/Minecraft.Client/Common/Consoles_App.cpp @@ -1043,6 +1043,7 @@ int CMinecraftApp::SetDefaultOptions(C_4JProfile::PROFILESETTINGS *pSettings,con //TU25 SetGameSettings(iPad, eGameSetting_ClassicCrafting, 0); SetGameSettings(iPad, eGameSetting_CaveSounds, 1); + SetGameSettings(iPad, eGameSetting_MinecartSounds, 1); // 4J-PB - leave these in, or remove from everywhere they are referenced! // Although probably best to leave in unless we split the profile settings into platform specific classes - having different meaning per platform for the same bitmask could get confusing @@ -1504,6 +1505,7 @@ void CMinecraftApp::ApplyGameSettingsChanged(int iPad) //TU25 ActionGameSettings(iPad, eGameSetting_ClassicCrafting); ActionGameSettings(iPad, eGameSetting_CaveSounds); + ActionGameSettings(iPad, eGameSetting_MinecartSounds); } void CMinecraftApp::ActionGameSettings(int iPad,eGameSetting eVal) @@ -2529,6 +2531,21 @@ void CMinecraftApp::SetGameSettings(int iPad,eGameSetting eVal,unsigned char ucV GameSettingsA[iPad]->bSettingsChanged = true; } break; + case eGameSetting_MinecartSounds: + if ((GameSettingsA[iPad]->uiBitmaskValues & GAMESETTING_MINECARTSOUNDS) != (ucVal & 0x01) << 28) + { + if (ucVal == 1) + { + GameSettingsA[iPad]->uiBitmaskValues |= GAMESETTING_MINECARTSOUNDS; + } + else + { + GameSettingsA[iPad]->uiBitmaskValues &= ~GAMESETTING_MINECARTSOUNDS; + } + ActionGameSettings(iPad, eVal); + GameSettingsA[iPad]->bSettingsChanged = true; + } + break; } } @@ -2670,6 +2687,9 @@ unsigned char CMinecraftApp::GetGameSettings(int iPad,eGameSetting eVal) case eGameSetting_CaveSounds: return (GameSettingsA[iPad]->uiBitmaskValues & GAMESETTING_CAVESOUNDS) >> 27; + case eGameSetting_MinecartSounds: + return (GameSettingsA[iPad]->uiBitmaskValues & GAMESETTING_MINECARTSOUNDS) >> 28; + case eGameSetting_VSync: return (GameSettingsA[iPad]->uiBitmaskValues&GAMESETTING_VSYNC)>>24; diff --git a/Minecraft.Client/Common/Media/MediaWindows64/SettingsAudioMenu1080.swf b/Minecraft.Client/Common/Media/MediaWindows64/SettingsAudioMenu1080.swf index 8e46ea2a665ec7b1c97b820df25c7c6159f85690..a0bbdfba75369cf4500669cd356629589cee98c9 100644 GIT binary patch literal 14050 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 @@ -124,5 +126,8 @@ void UIScene_SettingsAudioMenu::handleCheckboxToggled(F64 controlId, bool select case eControl_CaveSounds: app.SetGameSettings(m_iPad, eGameSetting_CaveSounds, selected ? 1 : 0); break; + case eControl_MinecartSounds: + app.SetGameSettings(m_iPad, eGameSetting_MinecartSounds, selected ? 1 : 0); + break; } } diff --git a/Minecraft.Client/Common/UI/UIScene_SettingsAudioMenu.h b/Minecraft.Client/Common/UI/UIScene_SettingsAudioMenu.h index b0123b5a..fdc2bbbc 100644 --- a/Minecraft.Client/Common/UI/UIScene_SettingsAudioMenu.h +++ b/Minecraft.Client/Common/UI/UIScene_SettingsAudioMenu.h @@ -9,15 +9,18 @@ private: { eControl_Music, eControl_Sound, - eControl_CaveSounds + eControl_CaveSounds, + eControl_MinecartSounds }; UIControl_Slider m_sliderMusic, m_sliderSound; // Sliders UIControl_CheckBox m_checkboxCaveSounds; // Checkboxes + UIControl_CheckBox m_checkboxMinecartSounds; UI_BEGIN_MAP_ELEMENTS_AND_NAMES(UIScene) UI_MAP_ELEMENT( m_sliderMusic, "Music") UI_MAP_ELEMENT( m_sliderSound, "Sound") UI_MAP_ELEMENT( m_checkboxCaveSounds, "CaveSounds") + UI_MAP_ELEMENT( m_checkboxMinecartSounds, "MinecartSounds") UI_END_MAP_ELEMENTS_AND_NAMES() public: diff --git a/Minecraft.Client/Windows64Media/Sound/Minecraft/mob/minecart/inside.ogg b/Minecraft.Client/Windows64Media/Sound/Minecraft/mob/minecart/inside.ogg new file mode 100644 index 0000000000000000000000000000000000000000..92487c8ce6ccbad1a6b3aa0f6002ef41c8ced454 GIT binary patch literal 57426 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�Mr6Y3;xr;;qZbXU`?3fObU4fQandlR0v^S1|8 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 literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml b/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml index 89c9928a..77fad9fd 100644 --- a/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml +++ b/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml @@ -6582,6 +6582,10 @@ Would you like to install the mash-up pack or texture pack now? Cave Sounds + + Minecart Sounds + + What would you like to do with this save game? diff --git a/Minecraft.World/Minecart.cpp b/Minecraft.World/Minecart.cpp index efefb7ea..1a06e5cd 100644 --- a/Minecraft.World/Minecart.cpp +++ b/Minecraft.World/Minecart.cpp @@ -13,6 +13,7 @@ #include "../Minecraft.Client/ServerLevel.h" #include "com.mojang.nbt.h" #include "Minecart.h" +#include "MinecartSoundInstance.h" #include "SharedConstants.h" @@ -44,7 +45,8 @@ void Minecart::_init() blocksBuilding = true; setSize(0.98f, 0.7f); heightOffset = bbHeight / 2.0f; - soundUpdater = nullptr; + m_rollingSound = nullptr; + m_ridingSound = nullptr; name = L""; // @@ -61,26 +63,43 @@ Minecart::Minecart(Level *level) : Entity( level ) Minecart::~Minecart() { - delete soundUpdater; + delete m_rollingSound; + delete m_ridingSound; } shared_ptr Minecart::createMinecart(Level *level, double x, double y, double z, int type) { + shared_ptr minecart; + switch (type) { case TYPE_CHEST: - return std::make_shared(level, x, y, z); + minecart = std::make_shared(level, x, y, z); + break; case TYPE_FURNACE: - return std::make_shared(level, x, y, z); + minecart = std::make_shared(level, x, y, z); + break; case TYPE_TNT: - return std::make_shared(level, x, y, z); + minecart = std::make_shared(level, x, y, z); + break; case TYPE_SPAWNER: - return std::make_shared(level, x, y, z); + minecart = std::make_shared(level, x, y, z); + break; case TYPE_HOPPER: - return std::make_shared(level, x, y, z); + minecart = std::make_shared(level, x, y, z); + break; default: - return std::make_shared(level, x, y, z); + minecart = std::make_shared(level, x, y, z); + break; } + + if (level != nullptr && level->isClientSide) + { + minecart->m_rollingSound = new MinecartSoundInstance(minecart); + minecart->m_ridingSound = new RidingMinecartSoundInstance(minecart); + } + + return minecart; } bool Minecart::makeStepSound() @@ -207,11 +226,36 @@ bool Minecart::isPickable() void Minecart::remove() { Entity::remove(); + // clean up sounds after invalidation + if (m_rollingSound) + { + delete m_rollingSound; + m_rollingSound = nullptr; + } + if (m_ridingSound) + { + delete m_ridingSound; + m_ridingSound = nullptr; + } //if (soundUpdater != nullptr) soundUpdater->tick(); } void Minecart::tick() { + // minecart tick handler + if (level->isClientSide) + { + if (m_rollingSound) + { + m_rollingSound->tick(); + } + + if (m_ridingSound) + { + m_ridingSound->tick(); + } + } + //if (soundUpdater != nullptr) soundUpdater->tick(); // 4J - make minecarts (server-side) tick twice, to put things back to how they were when we were accidently ticking them twice for( int i = 0; i < 2; i++ ) diff --git a/Minecraft.World/Minecart.h b/Minecraft.World/Minecart.h index bd1a69e6..e4a9121c 100644 --- a/Minecraft.World/Minecart.h +++ b/Minecraft.World/Minecart.h @@ -2,7 +2,8 @@ #include "Entity.h" class DamageSource; -class Tickable; +class MinecartSoundInstance; +class RidingMinecartSoundInstance; class Minecart : public Entity { @@ -30,7 +31,8 @@ private: static const int DATA_ID_CUSTOM_DISPLAY = 22; bool flipped; - Tickable *soundUpdater; + MinecartSoundInstance *m_rollingSound; + RidingMinecartSoundInstance *m_ridingSound; wstring name; protected: diff --git a/Minecraft.World/MinecartSoundInstance.cpp b/Minecraft.World/MinecartSoundInstance.cpp new file mode 100644 index 00000000..482ff8eb --- /dev/null +++ b/Minecraft.World/MinecartSoundInstance.cpp @@ -0,0 +1,175 @@ +#include "stdafx.h" +#include "MinecartSoundInstance.h" +#include "Minecart.h" +#include "net.minecraft.world.level.h" +#include "../Minecraft.Client/Minecraft.h" +#include "../Minecraft.Client/Common/Audio/SoundEngine.h" + +// MinecartSoundInstance + +MinecartSoundInstance::MinecartSoundInstance(shared_ptr minecart) + : m_minecart(minecart), m_bIsCurrentlyPlaying(false), m_sound(nullptr), m_volume(0.0f), m_pitch(1.0f) +{ +} + +MinecartSoundInstance::~MinecartSoundInstance() +{ + if (m_sound && Minecraft::GetInstance() && Minecraft::GetInstance()->soundEngine) + { + Minecraft::GetInstance()->soundEngine->stopLoopingSound(m_sound); + } + m_sound = nullptr; +} + +void MinecartSoundInstance::tick() +{ + if (!m_minecart || m_minecart->removed) + { + if (m_sound && Minecraft::GetInstance() && Minecraft::GetInstance()->soundEngine) + { + Minecraft::GetInstance()->soundEngine->stopLoopingSound(m_sound); + m_sound = nullptr; + } + m_bIsCurrentlyPlaying = false; + return; + } + + // minecart sound functionality check + if (!app.GetGameSettings(0, eGameSetting_MinecartSounds)) + { + if (m_sound && Minecraft::GetInstance() && Minecraft::GetInstance()->soundEngine) + { + Minecraft::GetInstance()->soundEngine->stopLoopingSound(m_sound); + m_sound = nullptr; + } + m_bIsCurrentlyPlaying = false; + return; + } + + // volume + pitch calculations + // relative to minecart velocity + double xd = m_minecart->xd; + double zd = m_minecart->zd; + double velocity = sqrt(xd * xd + zd * zd); + + if (velocity >= 0.01) + { + float clampedVel = (float)(velocity > 1.0 ? 1.0 : (velocity < 0.0 ? 0.0 : velocity)); + m_volume = clampedVel * 0.75f; + m_pitch = 1.0f; + + if (!m_bIsCurrentlyPlaying) + { + m_bIsCurrentlyPlaying = true; + if (Minecraft::GetInstance() && Minecraft::GetInstance()->soundEngine) + { + m_sound = Minecraft::GetInstance()->soundEngine->startLoopingSound(L"mob.minecart.rolling", (float)m_minecart->x, (float)m_minecart->y, (float)m_minecart->z, m_volume, m_pitch, true); + } + } + else if (m_sound && Minecraft::GetInstance() && Minecraft::GetInstance()->soundEngine) + { + Minecraft::GetInstance()->soundEngine->updateLoopingSound(m_sound, (float)m_minecart->x, (float)m_minecart->y, (float)m_minecart->z, m_volume, m_pitch); + } + } + else + { + if (m_sound && Minecraft::GetInstance() && Minecraft::GetInstance()->soundEngine) + { + Minecraft::GetInstance()->soundEngine->stopLoopingSound(m_sound); + m_sound = nullptr; + } + m_volume = 0.0f; + m_pitch = 0.0f; + m_bIsCurrentlyPlaying = false; + } +} + +// RidingMinecartSoundInstance + +RidingMinecartSoundInstance::RidingMinecartSoundInstance(shared_ptr minecart) + : m_minecart(minecart), m_bIsCurrentlyPlaying(false), m_sound(nullptr), m_volume(0.0f), m_pitch(0.0f) +{ +} + +RidingMinecartSoundInstance::~RidingMinecartSoundInstance() +{ + if (m_sound && Minecraft::GetInstance() && Minecraft::GetInstance()->soundEngine) + { + Minecraft::GetInstance()->soundEngine->stopLoopingSound(m_sound); + } + m_sound = nullptr; +} + +void RidingMinecartSoundInstance::tick() +{ + if (!m_minecart || m_minecart->removed) + { + if (m_sound && Minecraft::GetInstance() && Minecraft::GetInstance()->soundEngine) + { + Minecraft::GetInstance()->soundEngine->stopLoopingSound(m_sound); + m_sound = nullptr; + } + m_bIsCurrentlyPlaying = false; + return; + } + + // minecart sound functionality check + if (!app.GetGameSettings(0, eGameSetting_MinecartSounds)) + { + if (m_sound && Minecraft::GetInstance() && Minecraft::GetInstance()->soundEngine) + { + Minecraft::GetInstance()->soundEngine->stopLoopingSound(m_sound); + m_sound = nullptr; + } + m_bIsCurrentlyPlaying = false; + return; + } + + // minecart passenger check + if (m_minecart->rider.lock() == nullptr) + { + if (m_sound && Minecraft::GetInstance() && Minecraft::GetInstance()->soundEngine) + { + Minecraft::GetInstance()->soundEngine->stopLoopingSound(m_sound); + m_sound = nullptr; + } + m_bIsCurrentlyPlaying = false; + return; + } + + // volume + pitch calculations + // relative to minecart velocity + double xd = m_minecart->xd; + double zd = m_minecart->zd; + double velocity = sqrt(xd * xd + zd * zd); + + if (velocity >= 0.01) + { + float clampedVel = (float)(velocity > 1.0 ? 1.0 : (velocity < 0.0 ? 0.0 : velocity)); + m_volume = clampedVel * 0.75f; + m_pitch = 1.0f; + + if (!m_bIsCurrentlyPlaying) + { + m_bIsCurrentlyPlaying = true; + if (Minecraft::GetInstance() && Minecraft::GetInstance()->soundEngine) + { + m_sound = Minecraft::GetInstance()->soundEngine->startLoopingSound(L"mob.minecart.inside", (float)m_minecart->x, (float)m_minecart->y, (float)m_minecart->z, m_volume, m_pitch, false); + } + } + else if (m_sound && Minecraft::GetInstance() && Minecraft::GetInstance()->soundEngine) + { + Minecraft::GetInstance()->soundEngine->updateLoopingSound(m_sound, (float)m_minecart->x, (float)m_minecart->y, (float)m_minecart->z, m_volume, m_pitch); + } + } + else + { + if (m_sound && Minecraft::GetInstance() && Minecraft::GetInstance()->soundEngine) + { + Minecraft::GetInstance()->soundEngine->stopLoopingSound(m_sound); + m_sound = nullptr; + } + m_volume = 0.0f; + m_bIsCurrentlyPlaying = false; + } +} diff --git a/Minecraft.World/MinecartSoundInstance.h b/Minecraft.World/MinecartSoundInstance.h new file mode 100644 index 00000000..e7d2ba78 --- /dev/null +++ b/Minecraft.World/MinecartSoundInstance.h @@ -0,0 +1,43 @@ +#pragma once + +#include + +class Minecart; +class SoundEngine; +struct MiniAudioSound; + +// minecart rolling sound +class MinecartSoundInstance +{ +protected: + shared_ptr m_minecart; + bool m_bIsCurrentlyPlaying; + MiniAudioSound* m_sound; + float m_volume; + float m_pitch; + +public: + MinecartSoundInstance(shared_ptr minecart); + virtual ~MinecartSoundInstance(); + + virtual void tick(); + bool isCurrentlyPlaying() const { return m_bIsCurrentlyPlaying; } +}; + +// minecart passenger sound +class RidingMinecartSoundInstance +{ +protected: + shared_ptr m_minecart; + bool m_bIsCurrentlyPlaying; + MiniAudioSound* m_sound; + float m_volume; + float m_pitch; + +public: + RidingMinecartSoundInstance(shared_ptr minecart); + virtual ~RidingMinecartSoundInstance(); + + virtual void tick(); + bool isCurrentlyPlaying() const { return m_bIsCurrentlyPlaying; } +}; diff --git a/Minecraft.World/cmake/sources/Common.cmake b/Minecraft.World/cmake/sources/Common.cmake index 8c201c0b..3d522d3d 100644 --- a/Minecraft.World/cmake/sources/Common.cmake +++ b/Minecraft.World/cmake/sources/Common.cmake @@ -838,6 +838,8 @@ set(_MINECRAFT_WORLD_COMMON_NET_MINECRAFT_WORLD_ENTITY_ITEM "${CMAKE_CURRENT_SOURCE_DIR}/ItemEntity.h" "${CMAKE_CURRENT_SOURCE_DIR}/Minecart.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/Minecart.h" + "${CMAKE_CURRENT_SOURCE_DIR}/MinecartSoundInstance.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/MinecartSoundInstance.h" "${CMAKE_CURRENT_SOURCE_DIR}/MinecartChest.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/MinecartChest.h" "${CMAKE_CURRENT_SOURCE_DIR}/MinecartContainer.cpp"