public static Dictionary <string, AnimClipInfo> GetAnimClipInfos() { Debug.Log("Getting anim clip info!"); string rawXml = PathMan.GetModInternalFile(PathMan.ANIM_CLIPS_PATH, "AnimClips.xml", "AssemblyCSharp.LadybugTestMod.mm.InitialAnimClipXml.xml"); XmlReader xmlReader = XmlReader.Create(new StringReader(rawXml)); Dictionary <string, AnimClipInfo> animClipInfos = new Dictionary <string, AnimClipInfo>(); if (xmlReader.ReadToDescendant("AnimClips") && xmlReader.ReadToDescendant("AnimClip")) { // we're now parallel to the anim clip elements. do { string id = xmlReader.GetAttribute("id"); animClipInfos[id] = new AnimClipInfo(); XmlReader subtree = xmlReader.ReadSubtree(); while (subtree.Read()) { string tag = subtree.Name; switch (tag) { case "KeyFrameLength": subtree.Read(); animClipInfos[id].keyFrameLength = subtree.ReadContentAsFloat(); break; } } } while (xmlReader.ReadToNextSibling("AnimClip")); } return(animClipInfos); }
public void LoadCustomAnimClips() { Debug.Log("LOADING THE ANIM CLIPS!!!!!"); List <string> paths = PathMan.GetModFiles(PathMan.ANIM_CLIPS_PATH, ".png"); Dictionary <string, AnimClipInfo> clipInfos = Utils.GetAnimClipInfos(); AnimClipInfo defaultClipInto = new AnimClipInfo(); // if it is not defined in the XML // Pattern to be considered a frame: alphanumeric "ID" portion and the frame number, seperated with an underscore. Regex frameMatchRegex = new Regex(@"(\w+)_([0-9]+)", RegexOptions.IgnoreCase); // The key is the id of the anim clip, the value is the list of frames for that clip. Dictionary <string, List <AnimClipFrame> > animClips = new Dictionary <string, List <AnimClipFrame> >(); foreach (string path in paths) { Match result = frameMatchRegex.Match(path); if (result.Success) { AnimClipFrame newAnimClipFrame = new AnimClipFrame(path, result.Groups[1].Value, int.Parse(result.Groups[2].Value)); // Make a new list for the anim clip key if it doesn't exist already if (!animClips.ContainsKey(newAnimClipFrame.key)) { animClips[newAnimClipFrame.key] = new List <AnimClipFrame>(); } animClips[newAnimClipFrame.key].Add(newAnimClipFrame); } } foreach (string key in animClips.Keys) { Debug.Log(String.Format("Getting files for anim clip {0} ", key)); List <AnimClipFrame> currentFrames = animClips[key]; // sorting is required since the files could be like // Sprite_9.png, Sprite_10.png (the 10 would be first in lexographic sort!) currentFrames.Sort(); // Make an anim clip now. List <string> fullPaths = new List <string>(); foreach (AnimClipFrame clip in currentFrames) { fullPaths.Add(clip.fullPath); } AnimClipInfo newInfo; if (!clipInfos.ContainsKey(key)) { newInfo = defaultClipInto; } else { newInfo = clipInfos[key]; } SpriteAnimationClip newClip = Utils.LoadNewSpriteAnimationClip(fullPaths.ToArray(), newInfo); this.spriteAnimClips[key] = newClip; Debug.Log("Done with this anim clip!"); } }
public void LoadCustomSpellIcons() { foreach (string path in PathMan.GetModFiles(PathMan.ICONS_PATH, ".png")) { Debug.Log(String.Format("Okay, I'm going to try and load {0} as a spell icon", path)); Sprite new_sprite = Utils.LoadNewSprite(path); this.sprites[Path.GetFileNameWithoutExtension(path)] = new_sprite; } }