bool LegacyAvatarSerializer::ReadMasterModifier(MasterModifierVector& dest, const QDomElement& source)
 {
     MasterModifier master;
     
     master.name_ = source.attribute("name").toStdString();
     master.category_ = source.attribute("category").toStdString();
     master.value_ = ParseReal(source.attribute("position", "0").toStdString());
     
     QDomElement target = source.firstChildElement("target_modifier");
     while (!target.isNull())
     {                
         SlaveModifier targetmodifier;
         targetmodifier.name_ = target.attribute("name").toStdString();
         
         std::string targettype = target.attribute("type").toStdString();
         std::string targetmode = target.attribute("mode").toStdString();
                  
         if (targettype == "morph")
             targetmodifier.type_ = AppearanceModifier::Morph;
         if (targettype == "bone")
             targetmodifier.type_ = AppearanceModifier::Bone;
         if (targettype == "dynamic_animation")
             targetmodifier.type_ = AppearanceModifier::Bone;
             
         QDomElement mapping = target.firstChildElement("position_mapping");
         while (!mapping.isNull())
         {
             SlaveModifier::ValueMapping new_mapping;
             new_mapping.master_ = ParseReal(mapping.attribute("master").toStdString());
             new_mapping.slave_ = ParseReal(mapping.attribute("target").toStdString());
             targetmodifier.mapping_.push_back(new_mapping);                    
             mapping = mapping.nextSiblingElement("position_mapping");
         }
         
         if (targetmode == "cumulative")
             targetmodifier.mode_ = SlaveModifier::Cumulative;
         else
             targetmodifier.mode_ = SlaveModifier::Average;
         
         master.modifiers_.push_back(targetmodifier);
         
         target = target.nextSiblingElement("target_modifier");
     }
     
     dest.push_back(master);
     return true;
 }
    bool LegacyAvatarSerializer::ReadMorphModifier(MorphModifierVector& dest, const QDomElement& source)
    {
        MorphModifier morph;
        
        morph.name_ = source.attribute("name").toStdString();
        morph.morph_name_ = source.attribute("internal_name").toStdString();
        morph.value_ = ParseReal(source.attribute("influence", "0").toStdString());

        dest.push_back(morph);
        return true;
    }
 bool LegacyAvatarSerializer::ReadAnimationDefinition(AnimationDefinitionMap& dest, const QDomElement& elem)
 {
     if (elem.tagName() != "animation")
         return false;
     
     std::string id = elem.attribute("id").toStdString();
     if (id.empty())
         id = elem.attribute("uuid").toStdString(); // legacy
     if (id.empty())
     {
         RexLogicModule::LogError("Missing animation identifier");
         return false;
     }
     
     std::string intname = elem.attribute("internal_name").toStdString();
     if (intname.empty())
         intname = elem.attribute("ogrename").toStdString(); // legacy
     if (intname.empty())
     {
         RexLogicModule::LogError("Missing mesh animation name");
         return false;
     }
     
     AnimationDefinition new_def;
     new_def.id_ = id;
     new_def.animation_name_ = intname;
     new_def.name_ = elem.attribute("name").toStdString();
     
     new_def.looped_ = ParseBool(elem.attribute("looped", "true").toStdString());
     new_def.exclusive_ = ParseBool(elem.attribute("exclusive", "false").toStdString());
     new_def.use_velocity_ = ParseBool(elem.attribute("usevelocity", "false").toStdString());
     new_def.always_restart_ = ParseBool(elem.attribute("alwaysrestart", "false").toStdString());
     new_def.fadein_ = ParseReal(elem.attribute("fadein", "0").toStdString());
     new_def.fadeout_ = ParseReal(elem.attribute("fadeout", "0").toStdString());
     new_def.speedfactor_ = ParseReal(elem.attribute("speedfactor", "1").toStdString());
     new_def.weightfactor_ = ParseReal(elem.attribute("weightfactor", "1").toStdString());
     
     dest[RexUUID(new_def.id_)] = new_def;
     
     return true;
 }
Exemple #4
0
void NumericEdit::__EditCompleted( Edit& sender )
{
   if ( busy )
      return;

   if ( sender.IsReadOnly() )
      return;

   busy = true;

   try
   {
      double newValue;
      bool hasChanged = false;

      if ( isReal )
      {
         double tolerance = Pow10I<double>()( -int( precision + 1 ) );
         newValue = ParseReal( sender.Text(), lowerBound, upperBound, tolerance );
         newValue = Round( newValue, ActualPrecision( precision, newValue ) );
         hasChanged = Sign( newValue ) != Sign( value ) || Abs( newValue - value ) > tolerance;
      }
      else
      {
         newValue = ParseInteger( sender.Text(), lowerBound, upperBound );
         hasChanged = newValue != value;
      }

      if ( hasChanged )
      {
         value = newValue;
         UpdateControls();

         if ( onValueUpdated != 0 )
            (onValueUpdatedReceiver->*onValueUpdated)( *this, value );
      }
      else
         UpdateControls();

      busy = false;

      return;
   }
   ERROR_HANDLER

   busy = false;

   UpdateControls();
}
 bool LegacyAvatarSerializer::ReadBoneModifierParameter(BoneModifierSetVector& dest, const QDomElement& source)
 {
     // Find existing modifier from the vector
     std::string name = source.attribute("name").toStdString();
     for (unsigned i = 0; i < dest.size(); ++i)
     {
         if (dest[i].name_ == name)
         {
             dest[i].value_ = ParseReal(source.attribute("position", "0.5").toStdString());
             return true;
         }
     }
     
     return false; // Not found
 }