internal static XElement SerializePropertyTrack(MoviePropertyTrack track) { XElement elem = new XElement("MoviePropertyTrack", SerializeCurveTrackClips(track), SerializeMovieProperties(track)); elem.SetAttributeValue("type", track.targetType); if (track.targetType == MoviePropertyTrack.ObjectType.Maid) { elem.SetAttributeValue("maidGuid", track.GetMaidGUID()); } elem.SetAttributeValue("objectTag", track.target.tag); elem.SetAttributeValue("objectName", track.target.name); elem.SetAttributeValue("componentType", track.component.GetType()); return(elem); }
internal static MoviePropertyTrack DeserializePropertyTrack(XElement elem) { try { MoviePropertyTrack.ObjectType objectType = (MoviePropertyTrack.ObjectType)GetIntAttr(elem, "type"); string objectTag = elem.Attribute("objectTag").Value; string objectName = elem.Attribute("objectName").Value; GameObject obj = GameObject.Find(objectName); if (obj == null) { throw new ArgumentNullException($"No GameObject named {objectName} found!"); } Type componentType = GetTypeAttr(elem, "componentType"); Component compo = obj.GetComponent(componentType); if (compo == null) { throw new ArgumentNullException($"No Component of type {componentType.Name} in GameObject {objectName} found!"); } var curveIdxes = elem.Element("Properties").Elements() .Select(e => GetIntListAttr(e, "curveIndexes")) .ToList(); Dictionary <int, List <int> > propIdxToCurveIdxes = new Dictionary <int, List <int> >(); for (int i = 0; i < curveIdxes.Count; i++) { propIdxToCurveIdxes[i] = curveIdxes[i]; } // Debug.Log("Load: " + obj + " " + compo); MoviePropertyTrack track = new MoviePropertyTrack(obj, compo); track.clips = DeserializeCurveClips(elem); track.propsToChange = DeserializeMovieProperties(elem, componentType); track.propIdxToCurveIdxes = propIdxToCurveIdxes; return(track); } catch (Exception e) { Debug.LogError(e); return(null); } }
internal static XElement SerializeMovieProperties(MoviePropertyTrack track) => new XElement("Properties", track.propsToChange.Select((prop, i) => SerializeMovieProperty(prop, track.GetCurveIdxesForProp(i))));