diff --git a/kraken/nodes/KRAmbientZone.cpp b/kraken/nodes/KRAmbientZone.cpp index 74dfa19..4269df6 100755 --- a/kraken/nodes/KRAmbientZone.cpp +++ b/kraken/nodes/KRAmbientZone.cpp @@ -45,12 +45,12 @@ void KRAmbientZone::InitNodeInfo(KrNodeInfo* nodeInfo) nodeInfo->ambient_zone.sample = -1; } -KRAmbientZone::KRAmbientZone(KRScene& scene, std::string name) : KRNode(scene, name) -{ - m_ambient = ""; - m_ambient_gain = 1.0f; +KRAmbientZone::KRAmbientZone(KRScene& scene, std::string name) + : KRNode(scene, name) + , m_ambient_gain(1.f) + , m_gradient_distance(0.25f) - m_gradient_distance = 0.25f; +{ } @@ -66,7 +66,7 @@ tinyxml2::XMLElement* KRAmbientZone::saveXML(tinyxml2::XMLNode* parent) { tinyxml2::XMLElement* e = KRNode::saveXML(parent); e->SetAttribute("zone", m_zone.c_str()); - e->SetAttribute("sample", m_ambient.c_str()); + e->SetAttribute("sample", m_ambient.getName().c_str()); e->SetAttribute("gain", m_ambient_gain); e->SetAttribute("gradient", m_gradient_distance); return e; @@ -83,7 +83,12 @@ void KRAmbientZone::loadXML(tinyxml2::XMLElement* e) m_gradient_distance = 0.25f; } - m_ambient = e->Attribute("sample"); + const char* szAudioSampleName = e->Attribute("sample"); + if (szAudioSampleName == nullptr) { + m_ambient.clear(); + } else { + m_ambient.set(szAudioSampleName); + } m_ambient_gain = 1.0f; if (e->QueryFloatAttribute("gain", &m_ambient_gain) != tinyxml2::XML_SUCCESS) { @@ -91,14 +96,15 @@ void KRAmbientZone::loadXML(tinyxml2::XMLElement* e) } } -std::string KRAmbientZone::getAmbient() +KRAudioSample* KRAmbientZone::getAmbient() { - return m_ambient; + m_ambient.bind(&getContext()); + return m_ambient.get(); } void KRAmbientZone::setAmbient(const std::string& ambient) { - m_ambient = ambient; + m_ambient.set(ambient); } float KRAmbientZone::getAmbientGain() diff --git a/kraken/nodes/KRAmbientZone.h b/kraken/nodes/KRAmbientZone.h index 61e2376..b7206e2 100755 --- a/kraken/nodes/KRAmbientZone.h +++ b/kraken/nodes/KRAmbientZone.h @@ -31,9 +31,13 @@ #pragma once +#include "KREngine-common.h" #include "resources/KRResource.h" +#include "resources/audio/KRAudioSampleBinding.h" #include "KRNode.h" +class KRAudioSample; + class KRAmbientZone : public KRNode { public: @@ -53,7 +57,7 @@ public: float getGradientDistance(); void setGradientDistance(float gradient_distance); - std::string getAmbient(); + KRAudioSample* getAmbient(); void setAmbient(const std::string& ambient); float getAmbientGain(); @@ -68,6 +72,6 @@ private: float m_gradient_distance; - std::string m_ambient; + KRAudioSampleBinding m_ambient; float m_ambient_gain; }; diff --git a/kraken/resources/audio/KRAudioManager.cpp b/kraken/resources/audio/KRAudioManager.cpp index 8862e53..9bba81c 100755 --- a/kraken/resources/audio/KRAudioManager.cpp +++ b/kraken/resources/audio/KRAudioManager.cpp @@ -1424,7 +1424,7 @@ void KRAudioManager::startFrame(float deltaTime) if (zi.weight > 0.0f) { if (m_ambient_zone_weights.find(sphere->getZone()) == m_ambient_zone_weights.end()) { zi.ambient_zone = sphere; - zi.ambient_sample = get(sphere->getAmbient()); + zi.ambient_sample = sphere->getAmbient(); m_ambient_zone_weights[sphere->getZone()] = zi; m_ambient_zone_total_weight += zi.weight; } else {