using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using UnityEngine; using System.IO; using UnityEngine.UI; using SFB; namespace RimWorldAnimationStudio { public class ApplicationManager : Singleton { public DialogBox exitDialog; public SelectAnimationDialog selectAnimationDialog; public void TryToCloseApplication() { exitDialog.Pop(); } public void CloseApplication() { Debug.Log("Exiting application"); Application.Quit(); } public void TryToLoadAnimation() { var paths = StandaloneFileBrowser.OpenFilePanel("Open AnimationDef File", "", "xml", false); if (paths == null || paths.Any() == false) { Debug.LogError("Selected file was null or invalid"); return; } Defs defs = XmlUtility.ReadXML(paths[0]); if (defs?.animationDefs == null) { Debug.LogError("Selected file contains no animation data"); return; } if (defs.animationDefs.Count == 1) { LoadAnimation(defs.animationDefs[0]); return; } selectAnimationDialog.Initialize(defs); selectAnimationDialog.Pop(); } public void LoadAnimation(AnimationDef animationDef) { animationDef.RunPostLoadOperations(); Debug.Log("Loaded AnimationDef: " + animationDef.defName); Workspace.animationDef = animationDef; animationDef.Initialize(); Workspace.Instance.ClearHistory(); Workspace.Instance.RecordEvent("AnimationDef loaded"); AnimationController.Instance.MakeDirty(); var animationDefCards = Resources.FindObjectsOfTypeAll(typeof(AnimationDefCard)) as AnimationDefCard[]; if (animationDefCards != null) { animationDefCards[0].Initialize(); animationDefCards[0].gameObject.SetActive(true); } } public void TrySaveAnimation() { if (Workspace.animationDef == null) { return; } string defName = Workspace.animationDef.defName != null && Workspace.animationDef.defName != "" ? Workspace.animationDef.defName : "newAnimationDef"; var path = StandaloneFileBrowser.SaveFilePanel("Save AnimationDef File", "", defName, "xml"); if (path != null && path != "") { SaveAnimation(path); } } public void SaveAnimation(string path) { Debug.Log("Saving AnimationDef: " + Workspace.animationDef.defName); AnimationDef animationDef = Workspace.animationDef.Copy(); animationDef.RunPreSaveOperations(); Defs defs = new Defs(); defs.animationDefs.Add(animationDef); XmlUtility.WriteXML(defs, path); } public void NewAnimation() { var path = Path.Combine(Application.streamingAssetsPath, "AnimationDefs/newAnimationDef.xml"); Defs defs = XmlUtility.ReadXML(path); if (defs?.animationDefs == null) { Debug.LogError("Default animation def file contains no animation data"); return; } LoadAnimation(defs.animationDefs[0]); } } }