if (numAttributes <= index)
return;
_attributeVector.resize(numAttributes);
+ if (_attributeVector[index]._dataElement.valid())
+ _attributeVector[index]._dataElement->clearStamp();
_attributeVector[index]._dataElement = dataElement;
- if (getAttributeOwned(index))
- encodeAttributeValue(index);
+ if (_attributeVector[index]._dataElement.valid())
+ _attributeVector[index]._dataElement->createStamp();
}
class HLAObjectInstance::DataElementFactoryVisitor : public HLADataElementFactoryVisitor {
{
unsigned numAttributes = _attributeVector.size();
for (unsigned i = 0; i < numAttributes;++i) {
- if (!_attributeVector[i]._unconditionalUpdate)
- continue;
- encodeAttributeValue(i);
+ if (_attributeVector[i]._unconditionalUpdate) {
+ encodeAttributeValue(i);
+ } else if (_attributeVector[i]._enabledUpdate) {
+ const HLADataElement* dataElement = getAttributeDataElement(i);
+ if (dataElement && dataElement->getDirty())
+ encodeAttributeValue(i);
+ }
}
}
SG_LOG(SG_IO, SG_INFO, "Not updating inactive object!");
return;
}
- const HLADataElement* dataElement = getAttributeDataElement(index);
+ HLADataElement* dataElement = getAttributeDataElement(index);
if (!dataElement)
return;
_rtiObjectInstance->encodeAttributeData(index, *dataElement);
+ dataElement->setDirty(false);
}
void
HLADataElement* dataElement = getAttributeDataElement(index);
if (!dataElement)
return;
+ dataElement->setTimeStampValid(false);
_rtiObjectInstance->decodeAttributeData(index, *dataElement);
}
HLADataElement* dataElement = getAttributeDataElement(index);
if (!dataElement)
return;
- // dataElement->setTimeStamp(timeStamp);
+ dataElement->setTimeStamp(timeStamp);
+ dataElement->setTimeStampValid(true);
_rtiObjectInstance->decodeAttributeData(index, *dataElement);
}