public static void SaveTemplate(WorldTemplate template) { XmlSerializer serializer = new XmlSerializer(typeof(WorldTemplate)); string folderName = Path.Combine(TemplateFolder, template.WorldName); string infoFile = Path.Combine(folderName, "info.xml"); if (File.Exists(infoFile)) { File.Delete(infoFile); } string saveName = $"{template.WorldName}"; string savePath = Path.Combine(folderName, saveName); template.FilePath = $"{TemplateFolderName}\\{template.WorldName}\\{template.WorldName}"; Directory.CreateDirectory(folderName); using (FileStream fs = new FileStream(infoFile, FileMode.OpenOrCreate)) { serializer.Serialize(fs, template); } StartPawnsFromTemplate.StartPawns = template.StartPawns; GameDataSaveLoader.SaveGame(savePath); Messages.Message("Tempalte has been created", MessageTypeDefOf.PositiveEvent, false); }
private void CreateWorldTemplate() { if (string.IsNullOrEmpty(saveName)) { Messages.Message("Enter correct template name", MessageTypeDefOf.NeutralEvent, false); return; } if (string.IsNullOrEmpty(author)) { Messages.Message("Enter correct author", MessageTypeDefOf.NeutralEvent, false); return; } if (string.IsNullOrEmpty(description)) { Messages.Message("Enter correct description", MessageTypeDefOf.NeutralEvent, false); return; } WorldTemplate template = WorldEditor.LoadedTemplate; template.WorldName = saveName; template.Storyteller = Current.Game.storyteller.def.LabelCap; template.Scenario = Current.Game.Scenario.name; template.Author = author; template.Description = description; template.StartPawns = Find.GameInitData.startingAndOptionalPawns; SaveTemplate(template); WorldEditor.LoadedTemplate = template; LoadTemplates(); }
public static void LoadTemplates() { if (!Directory.Exists(TemplateFolder)) { Directory.CreateDirectory(TemplateFolder); } Templates.Clear(); XmlSerializer serializer = new XmlSerializer(typeof(WorldTemplate)); foreach (var folder in Directory.GetDirectories(TemplateFolder)) { string templateInfo = Path.Combine(folder, "info.xml"); if (File.Exists(templateInfo)) { WorldTemplate template = Utils.Deserialize <WorldTemplate>(serializer, templateInfo); Templates.Add(template); } } }
public static void Postfix(ref Rect __state, ref Page_CreateWorldParams __instance) { GUI.BeginGroup(__state); float y = 280f; Rect baseRect = new Rect(0f, y, 200f, 30f); Widgets.Label(baseRect, Translator.Translate("EditorLabel")); Rect EarthRect = new Rect(200f, y, 200f, 30f); if (Settings.FullyActiveEditor == false) { if (Widgets.RadioButtonLabeled(EarthRect, Translator.Translate("isEnableEditorLabel"), isEdit == true)) { isEdit = !isEdit; } } else { Widgets.Label(EarthRect, Translator.Translate("ActiveFullyMode")); isEdit = true; } GUI.EndGroup(); Widgets.Label(new Rect(440, 40, 200, 20), Translator.Translate("WorldTemplates")); int worldsSize = WorldTemplateManager.Templates.Count * 25; Rect scrollRect = new Rect(440, 70, 200, 400); Rect scrollVertRect = new Rect(0, 0, scrollRect.x, worldsSize); Widgets.BeginScrollView(scrollRect, ref scrollPositionWorlds, scrollVertRect); int x = 0; foreach (var world in WorldTemplateManager.Templates) { if (Widgets.ButtonText(new Rect(0, x, 180, 20), world.WorldName)) { selectedTemplate = world; StringBuilder builder = new StringBuilder(); builder.AppendLine($"{Translator.Translate("TemplateHead")}{world.WorldName}"); builder.AppendLine($"{Translator.Translate("TemplateAuthor")}{world.Author}"); builder.AppendLine($"{Translator.Translate("TemplateStoryteller")}{world.Storyteller}"); builder.AppendLine($"{Translator.Translate("TemplateScenario")}{world.Scenario}"); builder.AppendLine($"{Translator.Translate("TemplateDesc")}{world.Description}"); worldInfo = builder.ToString(); } x += 22; } Widgets.EndScrollView(); Widgets.LabelScrollable(new Rect(650, 70, 340, 400), worldInfo, ref scrollPositionInfo, false, false); if (selectedTemplate != null) { if (Widgets.ButtonText(new Rect(440, 500, 200, 20), Translator.Translate("LoadTemplate"))) { isWorldTemplate = true; LoadedTemplate = selectedTemplate; CustomStartingSite.OneWayToShow = false; GameDataSaveLoader.LoadGame(selectedTemplate.FilePath); } } }