From 9d2d788b98f6d747a945669cd5b45045149096fa Mon Sep 17 00:00:00 2001 From: Kearwood Gilbert Date: Sun, 23 Nov 2025 16:07:31 -0800 Subject: [PATCH] KRReverbZone is now using KRNodeProperty --- kraken/nodes/KRReverbZone.cpp | 39 ++++++++--------------- kraken/nodes/KRReverbZone.h | 15 +++++---- kraken/public/kraken.h | 4 +-- kraken/resources/audio/KRAudioManager.cpp | 2 +- 4 files changed, 25 insertions(+), 35 deletions(-) diff --git a/kraken/nodes/KRReverbZone.cpp b/kraken/nodes/KRReverbZone.cpp index f276b56..ffbe888 100755 --- a/kraken/nodes/KRReverbZone.cpp +++ b/kraken/nodes/KRReverbZone.cpp @@ -39,17 +39,14 @@ using namespace hydra; void KRReverbZone::InitNodeInfo(KrNodeInfo* nodeInfo) { KRNode::InitNodeInfo(nodeInfo); - nodeInfo->reverb_zone.gain = 1.0f; - nodeInfo->reverb_zone.gradient = 0.25f; + nodeInfo->reverb_zone.gain = decltype(m_reverb_gain)::defaultVal; + nodeInfo->reverb_zone.gradient = decltype(m_gradient_distance)::defaultVal; nodeInfo->reverb_zone.sample = -1; - nodeInfo->reverb_zone.pZoneName = nullptr; + nodeInfo->reverb_zone.pZoneName = decltype(m_zone)::defaultVal; } KRReverbZone::KRReverbZone(KRScene& scene, std::string name) : KRNode(scene, name) { - m_reverb = ""; - m_reverb_gain = 1.0f; - m_gradient_distance = 0.25f; } KRReverbZone::~KRReverbZone() @@ -63,10 +60,10 @@ std::string KRReverbZone::getElementName() tinyxml2::XMLElement* KRReverbZone::saveXML(tinyxml2::XMLNode* parent) { tinyxml2::XMLElement* e = KRNode::saveXML(parent); - e->SetAttribute("zone", m_zone.c_str()); - e->SetAttribute("sample", m_reverb.c_str()); - e->SetAttribute("gain", m_reverb_gain); - e->SetAttribute("gradient", m_gradient_distance); + m_zone.save(e); + m_reverb.save(e); + m_reverb_gain.save(e); + m_gradient_distance.save(e); return e; } @@ -74,24 +71,16 @@ void KRReverbZone::loadXML(tinyxml2::XMLElement* e) { KRNode::loadXML(e); - m_zone = e->Attribute("zone"); - - m_gradient_distance = 0.25f; - if (e->QueryFloatAttribute("gradient", &m_gradient_distance) != tinyxml2::XML_SUCCESS) { - m_gradient_distance = 0.25f; - } - - m_reverb = e->Attribute("sample"); - - m_reverb_gain = 1.0f; - if (e->QueryFloatAttribute("gain", &m_reverb_gain) != tinyxml2::XML_SUCCESS) { - m_reverb_gain = 1.0f; - } + m_zone.load(e); + m_gradient_distance.load(e); + m_reverb.load(e); + m_reverb_gain.load(e); } -std::string KRReverbZone::getReverb() +KRAudioSample* KRReverbZone::getReverb() { - return m_reverb; + m_reverb.val.bind(&getContext()); + return m_reverb.val.get(); } void KRReverbZone::setReverb(const std::string& reverb) diff --git a/kraken/nodes/KRReverbZone.h b/kraken/nodes/KRReverbZone.h index c7cc635..6b9f9fb 100755 --- a/kraken/nodes/KRReverbZone.h +++ b/kraken/nodes/KRReverbZone.h @@ -32,8 +32,11 @@ #pragma once #include "resources/KRResource.h" +#include "resources/audio/KRAudioSampleBinding.h" #include "KRNode.h" +class KRAudioSample; + class KRReverbZone : public KRNode { public: @@ -53,7 +56,7 @@ public: float getGradientDistance(); void setGradientDistance(float gradient_distance); - std::string getReverb(); + KRAudioSample* getReverb(); void setReverb(const std::string& reverb); float getReverbGain(); @@ -64,10 +67,8 @@ public: float getContainment(const hydra::Vector3& pos); private: - std::string m_zone; - - float m_gradient_distance; - - std::string m_reverb; - float m_reverb_gain; + KRNODE_PROPERTY(std::string, m_zone, "", "zone"); + KRNODE_PROPERTY(float, m_gradient_distance, 0.25f, "gradient"); + KRNODE_PROPERTY(KRAudioSampleBinding, m_reverb, nullptr, "sample"); + KRNODE_PROPERTY(float, m_reverb_gain, 1.f, "gain"); }; diff --git a/kraken/public/kraken.h b/kraken/public/kraken.h index 46298c3..d2a95a9 100644 --- a/kraken/public/kraken.h +++ b/kraken/public/kraken.h @@ -338,7 +338,7 @@ typedef struct struct { // KR_STRUCTURE_TYPE_NODE_AMBIENT_ZONE - char* pZoneName; + const char* pZoneName; float gradient; float gain; KrResourceMapIndex sample; @@ -346,7 +346,7 @@ typedef struct struct { // KR_STRUCTURE_TYPE_NODE_REVERB_ZONE - char* pZoneName; + const char* pZoneName; float gradient; float gain; KrResourceMapIndex sample; diff --git a/kraken/resources/audio/KRAudioManager.cpp b/kraken/resources/audio/KRAudioManager.cpp index 9bba81c..281c5d2 100755 --- a/kraken/resources/audio/KRAudioManager.cpp +++ b/kraken/resources/audio/KRAudioManager.cpp @@ -1453,7 +1453,7 @@ void KRAudioManager::startFrame(float deltaTime) if (zi.weight > 0.0f) { if (m_reverb_zone_weights.find(sphere->getZone()) == m_reverb_zone_weights.end()) { zi.reverb_zone = sphere; - zi.reverb_sample = get(sphere->getReverb()); + zi.reverb_sample = sphere->getReverb(); m_reverb_zone_weights[sphere->getZone()] = zi; m_reverb_zone_total_weight += zi.weight; } else {