void SpriteObject::DoUnserializeFrom(gd::Project & project, const gd::SerializerElement & element) { const gd::SerializerElement & animationsElement = element.GetChild("animations", 0, "Animations"); animationsElement.ConsiderAsArrayOf("animation", "Animation"); for (std::size_t i = 0; i < animationsElement.GetChildrenCount(); ++i) { const gd::SerializerElement & animationElement = animationsElement.GetChild(i); Animation newAnimation; newAnimation.useMultipleDirections = animationElement.GetBoolAttribute("useMultipleDirections", false, "typeNormal"); //Compatibility with GD <= 3.3 if (animationElement.HasChild("Direction")) { for (std::size_t j = 0; j < animationElement.GetChildrenCount("Direction"); ++j) { Direction direction; direction.UnserializeFrom(animationElement.GetChild("Direction", j)); newAnimation.SetDirectionsCount(newAnimation.GetDirectionsCount()+1); newAnimation.SetDirection(direction, newAnimation.GetDirectionsCount()-1); } } //End of compatibility code else { const gd::SerializerElement & directionsElement = animationElement.GetChild("directions"); directionsElement.ConsiderAsArrayOf("direction"); for (std::size_t j = 0; j < directionsElement.GetChildrenCount(); ++j) { Direction direction; direction.UnserializeFrom(directionsElement.GetChild(j)); newAnimation.SetDirectionsCount(newAnimation.GetDirectionsCount()+1); newAnimation.SetDirection(direction, newAnimation.GetDirectionsCount()-1); } } AddAnimation( newAnimation ); } }