: 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)
{
(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);
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);