]> git.mxchange.org Git - simgear.git/blobdiff - simgear/hla/HLAObjectInstance.cxx
math: Move lerp function into SGMisc.
[simgear.git] / simgear / hla / HLAObjectInstance.cxx
index 390b70db1ef9b24e0bd9dddbed096ab88532fc86..a163c5953dbb12331ea3069d5736f7e42927c9ce 100644 (file)
@@ -116,9 +116,11 @@ HLAObjectInstance::setAttributeDataElement(unsigned index, const SGSharedPtr<HLA
     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 {
@@ -473,9 +475,13 @@ HLAObjectInstance::encodeAttributeValues()
 {
     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);
+        }
     }
 }
 
@@ -486,10 +492,11 @@ HLAObjectInstance::encodeAttributeValue(unsigned index)
         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
@@ -533,6 +540,7 @@ HLAObjectInstance::reflectAttributeValue(unsigned index, const RTIData& tag)
     HLADataElement* dataElement = getAttributeDataElement(index);
     if (!dataElement)
         return;
+    dataElement->setTimeStampValid(false);
     _rtiObjectInstance->decodeAttributeData(index, *dataElement);
 }
 
@@ -542,7 +550,8 @@ HLAObjectInstance::reflectAttributeValue(unsigned index, const SGTimeStamp& time
     HLADataElement* dataElement = getAttributeDataElement(index);
     if (!dataElement)
         return;
-    // dataElement->setTimeStamp(timeStamp);
+    dataElement->setTimeStamp(timeStamp);
+    dataElement->setTimeStampValid(true);
     _rtiObjectInstance->decodeAttributeData(index, *dataElement);
 }