OSDN Git Service

[dennco] updated the plugin feature implementation. master
authortkawata <takuji.kawata@gmail.com>
Sat, 16 Feb 2013 07:37:21 +0000 (16:37 +0900)
committertkawata <takuji.kawata@gmail.com>
Sat, 16 Feb 2013 07:37:21 +0000 (16:37 +0900)
Source/layer3/dnpluginoutputcell.cpp
Source/layer3/dnpluginoutputcell.h

index bffd6b3..0639b87 100644 (file)
@@ -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<float>::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);
index 1468516..c340308 100644 (file)
@@ -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);