public SpriteIdProvider(Animation.Bank bank, Dictionary <int, string> hashToName) { Bank = bank; HashToName = hashToName; occurenceCache = new SpriteOccurenceCache(HashToName); BuildIdMap(); }
public SymbolIdProvider(Animation.Bank bank, int offset, Dictionary <int, string> hashToName) { Bank = bank; Offset = offset; HashToName = hashToName; occurenceCache = new SymbolOccurenceCache(HashToName); BuildIdMap(); }
private List <XmlElement> MakeTimelineNodes(XmlDocument scml, Animation.Bank bank, FileIdProvider fileIdProvider) { int rate = (int)(MsPerS / bank.Rate); SpriteIdProvider spriteIdProvider = new SpriteIdProvider(bank, AnimationFile.HashToName); Dictionary <int, XmlElement> idToTimeline = new Dictionary <int, XmlElement>(); foreach (string name in spriteIdProvider.IdMap.Keys) { XmlElement timeline = scml.CreateElement(string.Empty, "timeline", string.Empty); int id = spriteIdProvider.IdMap[name]; timeline.SetAttribute("id", id.ToString()); timeline.SetAttribute("name", name); idToTimeline.Add(id, timeline); } SymbolIdProvider symbolIdProvider = new SymbolIdProvider(bank, spriteIdProvider.IdMap.Count, AnimationFile.HashToName); foreach (string name in symbolIdProvider.IdMap.Keys) { XmlElement timeline = scml.CreateElement(string.Empty, "timeline", string.Empty); int id = symbolIdProvider.IdMap[name]; timeline.SetAttribute("id", id.ToString()); timeline.SetAttribute("name", name); timeline.SetAttribute("object_type", "bone"); idToTimeline.Add(id, timeline); } int frameId = 0; foreach (Animation.Frame frame in bank.FramesList) { foreach (Animation.Element element in frame.ElementsList) { idToTimeline[spriteIdProvider.GetId(frame, element)].AppendChild(MakeTimelineKeyNode(scml, element, frameId, rate, fileIdProvider, ChildType.Sprite)); idToTimeline[symbolIdProvider.GetId(frame, element)].AppendChild(MakeTimelineKeyNode(scml, element, frameId, rate, fileIdProvider, ChildType.Bone)); } frameId++; } List <XmlElement> timelines = new List <XmlElement>(); foreach (XmlElement timeline in idToTimeline.Values) { timelines.Add(timeline); } return(timelines); }
private XmlElement MakeMainlineNode(XmlDocument scml, Animation.Bank bank, HashSet <string> boneNames) { XmlElement mainline = scml.CreateElement(string.Empty, "mainline", string.Empty); int rate = (int)(MsPerS / bank.Rate); int frameId = 0; SpriteIdProvider spriteIdProvider = new SpriteIdProvider(bank, AnimationFile.HashToName); SymbolIdProvider symbolIdProvider = new SymbolIdProvider(bank, spriteIdProvider.IdMap.Count, AnimationFile.HashToName); foreach (string name in symbolIdProvider.IdMap.Keys) { boneNames.Add(name); } foreach (Animation.Frame frame in bank.FramesList) { mainline.AppendChild(MakeMainlineKeyNode(scml, frame, frameId++, rate, spriteIdProvider, symbolIdProvider)); } return(mainline); }
private XmlElement MakeAnimationNode(XmlDocument scml, Animation.Bank bank, int animationId, FileIdProvider fileIdProvider, HashSet <string> boneNames) { XmlElement animation = scml.CreateElement(string.Empty, "animation", string.Empty); animation.SetAttribute("id", animationId.ToString()); animation.SetAttribute("name", bank.Name); int rate = (int)(MsPerS / bank.Rate); animation.SetAttribute("length", (rate * bank.Frames).ToString()); animation.SetAttribute("interval", rate.ToString()); animation.AppendChild(MakeMainlineNode(scml, bank, boneNames)); List <XmlElement> timelines = MakeTimelineNodes(scml, bank, fileIdProvider); foreach (XmlElement timeline in timelines) { animation.AppendChild(timeline); } return(animation); }