コード例 #1
0
 public SpriteIdProvider(Animation.Bank bank, Dictionary <int, string> hashToName)
 {
     Bank           = bank;
     HashToName     = hashToName;
     occurenceCache = new SpriteOccurenceCache(HashToName);
     BuildIdMap();
 }
コード例 #2
0
 public SymbolIdProvider(Animation.Bank bank, int offset, Dictionary <int, string> hashToName)
 {
     Bank           = bank;
     Offset         = offset;
     HashToName     = hashToName;
     occurenceCache = new SymbolOccurenceCache(HashToName);
     BuildIdMap();
 }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }