From 2a82ff966c16148cd0f408cdad7e7faee8084858 Mon Sep 17 00:00:00 2001 From: tkawata Date: Sat, 16 Feb 2013 16:37:21 +0900 Subject: [PATCH] [dennco] updated the plugin feature implementation. --- Source/layer3/dnpluginoutputcell.cpp | 23 ++++++++++++++++++++--- Source/layer3/dnpluginoutputcell.h | 10 ++++++---- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/Source/layer3/dnpluginoutputcell.cpp b/Source/layer3/dnpluginoutputcell.cpp index bffd6b3..0639b87 100644 --- a/Source/layer3/dnpluginoutputcell.cpp +++ b/Source/layer3/dnpluginoutputcell.cpp @@ -30,6 +30,9 @@ DNPluginOutputCell::DNPluginOutputCell(TKContainer *container, std::string locat : DNCellInterfaceable(container, location, name, false, true), d_plugin(NULL), d_valueName(valueName), d_outputValue(std::numeric_limits::quiet_NaN()), d_wasReady(false) { + d_valueIterator = mReceptors.end(); + d_forceUpdateIterator = mReceptors.end(); + d_plugin = DNPluginManager::instance()->getPlugin(pluginName); if (!d_plugin) { @@ -48,16 +51,30 @@ bool DNPluginOutputCell::doTick(float time) (void)time; float value = 0.0; + if (d_valueIterator != mReceptors.end()) + { + value = d_valueIterator->second->getValue(); + } + else + { + d_valueIterator = mReceptors.find("value"); + } - for ( TKReceptorMap::iterator it = mReceptors.begin(); it != mReceptors.end(); ++it ) { - value += it->second->getValue(); + bool forceUpdate = false; + if (d_forceUpdateIterator != mReceptors.end()) + { + forceUpdate = d_forceUpdateIterator->second->getValue() > 0; + } + else + { + d_forceUpdateIterator = mReceptors.find("forceUpdate"); } mAxon->setValue(value); if (d_plugin && d_plugin->getIsValid()) { bool isReady = d_plugin->getIsReady(); - if (isReady && (d_outputValue != value ||!d_wasReady)) + if (isReady && (value != d_outputValue || forceUpdate)) { d_outputValue = value; d_plugin->setValueToPlugin(d_valueName.c_str(), value); diff --git a/Source/layer3/dnpluginoutputcell.h b/Source/layer3/dnpluginoutputcell.h index 1468516..c340308 100644 --- a/Source/layer3/dnpluginoutputcell.h +++ b/Source/layer3/dnpluginoutputcell.h @@ -25,10 +25,12 @@ class DNPlugin; class DNPluginOutputCell : public DNCellInterfaceable { - DNPlugin *d_plugin; - std::string d_valueName; - float d_outputValue; - bool d_wasReady; + DNPlugin *d_plugin; + std::string d_valueName; + float d_outputValue; + bool d_wasReady; + TKReceptorMap::iterator d_valueIterator; + TKReceptorMap::iterator d_forceUpdateIterator; public: DNPluginOutputCell(TKContainer *container, std::string location, std::string name, std::string pluginName, std::string valueName); -- 2.11.0