void Direction::UnserializeFrom(const gd::SerializerElement & element) { SetTimeBetweenFrames(element.GetDoubleAttribute("timeBetweenFrames", 1, "tempsEntre")); SetLoop(element.GetBoolAttribute("looping", false, "boucle")); const gd::SerializerElement & spritesElement = element.GetChild("sprites", 0, "Sprites"); spritesElement.ConsiderAsArrayOf("sprite", "Sprite"); for (unsigned int i = 0; i < spritesElement.GetChildrenCount(); ++i) { const gd::SerializerElement & spriteElement = spritesElement.GetChild(i); Sprite sprite; sprite.SetImageName(spriteElement.GetStringAttribute("image")); OpenPointsSprites(sprite.GetAllNonDefaultPoints(), spriteElement.GetChild("points", 0, "Points")); OpenPoint(sprite.GetOrigin(), spriteElement.GetChild("originPoint" , 0, "PointOrigine")); OpenPoint(sprite.GetCenter(), spriteElement.GetChild("centerPoint" , 0, "PointCentre")); sprite.SetDefaultCenterPoint(spriteElement.GetChild("centerPoint" , 0, "PointCentre").GetBoolAttribute("automatic", true)); if (spriteElement.HasChild("CustomCollisionMask")) sprite.SetCollisionMaskAutomatic(!spriteElement.GetChild("CustomCollisionMask").GetBoolAttribute("custom", false)); else sprite.SetCollisionMaskAutomatic(!spriteElement.GetBoolAttribute("hasCustomCollisionMask", false)); std::vector<Polygon2d> mask; const gd::SerializerElement & collisionMaskElement = spriteElement.GetChild("customCollisionMask", 0, "CustomCollisionMask"); collisionMaskElement.ConsiderAsArrayOf("polygon", "Polygon"); for (unsigned int j = 0; j < collisionMaskElement.GetChildrenCount(); ++j) { Polygon2d polygon; const gd::SerializerElement & polygonElement = collisionMaskElement.GetChild(j); polygonElement.ConsiderAsArrayOf("vertice", "Point"); for (unsigned int k = 0; k < polygonElement.GetChildrenCount(); ++k) { const gd::SerializerElement & verticeElement = polygonElement.GetChild(k); polygon.vertices.push_back(sf::Vector2f(verticeElement.GetDoubleAttribute("x"), verticeElement.GetDoubleAttribute("y"))); } mask.push_back(polygon); } sprite.SetCustomCollisionMask(mask); sprites.push_back(sprite); } };