internal bool UndoLastAction() { Main.DebugMessage("Undoing last action type {1} for state {0}", State, LastAction.ToString()); switch (LastAction) { case LastActionType.restore: Main.DebugMessage("Restoring {0} active mods", ModData.activeMods.Count); SetActiveMods(ModData.activeMods); return(true); case LastActionType.backup: if (ModData != null) { Main.DebugMessage("Restored {0}'s last state", State); DirectXmlSaver.SaveDataObject((object)ModData, PathHandler.GenBackupModListFile(State)); } else { File.Delete(PathHandler.GenBackupModListFile(State)); } return(true); case LastActionType.none: default: Main.Log.Warning("Last Undo Action was not set with a type, cannot undo last action"); return(false); } }
private static void ExposeData(string filepath, bool useUndoAction = false) { try { if (CurrentMode == Mode.Saving) { Data = new ModsConfigData { buildNumber = RimWorld.VersionControl.CurrentBuild, activeMods = ModsConfigHandler.GetActiveMods() }; DirectXmlSaver.SaveDataObject((object)Data, filepath); } else if (CurrentMode == Mode.Loading) { List <string> current = new List <string>(); Data = ReadModList(filepath); ModsConfigHandler.ClearLoadedMods(true); foreach (string modID in Data.activeMods) { ModsConfig.SetActive(modID, true); } } } catch (Exception e) { Main.Log.ReportException(e); ModsConfigHandler.ClearLoadedMods(); } }
private static void HandleCommandLine() { if (GenCommandLine.TryGetCommandLineArg("connect", out string addressPort) && Multiplayer.restartConnect == null) { int port = MultiplayerServer.DefaultPort; var split = addressPort.Split(':'); if (split.Length == 0) { addressPort = "127.0.0.1"; } else if (split.Length >= 1) { addressPort = split[0]; } if (split.Length == 2) { int.TryParse(split[1], out port); } DoubleLongEvent(() => ClientUtil.TryConnectWithWindow(addressPort, port, false), "Connecting"); } if (GenCommandLine.CommandLineArgPassed("arbiter")) { Multiplayer.username = "******"; Prefs.VolumeGame = 0; } if (GenCommandLine.TryGetCommandLineArg("replay", out string replay)) { DoubleLongEvent(() => { Replay.LoadReplay(Replay.ReplayFile(replay), true, () => { var rand = Find.Maps.Select(m => m.AsyncTime().randState).Select(s => $"{s} {(uint)s} {s >> 32}"); Log.Message($"timer {TickPatch.Timer}"); Log.Message($"world rand {Multiplayer.WorldComp.randState} {(uint)Multiplayer.WorldComp.randState} {Multiplayer.WorldComp.randState >> 32}"); Log.Message($"map rand {rand.ToStringSafeEnumerable()} | {Find.Maps.Select(m => m.AsyncTime().mapTicks).ToStringSafeEnumerable()}"); Application.Quit(); }); }, "Replay"); } if (GenCommandLine.CommandLineArgPassed("printsync")) { ExtendDirectXmlSaver.extend = true; DirectXmlSaver.SaveDataObject(new SyncContainer(), "SyncHandlers.xml"); ExtendDirectXmlSaver.extend = false; } }
private void Save() { string dir = new FileInfo(filepath).Directory.FullName; if (modSettings.HasSettings) { if (Directory.Exists(dir) == false) { Directory.CreateDirectory(dir); } DirectXmlSaver.SaveDataObject(modSettings, filepath); } else { Delete(); } }
// public static float horHeadOffset; protected override void DoBasicSettingsMenu(Listing_Standard listing) { base.DoBasicSettingsMenu(listing); // listing.CheckboxLabeled("Moving", ref IsMoving); // listing_Standard.CheckboxLabeled("Equipment", ref Equipment); // listing_Standard.Label(horHeadOffset.ToString("N2") + " - " + verHeadOffset.ToString("N2")); // horHeadOffset = listing_Standard.Slider(horHeadOffset, -1f, 1f); // verHeadOffset = listing_Standard.Slider(verHeadOffset, -1f, 1f); listing.Label(this.BodyAnimDef.offCenterX.ToString("N2")); this.BodyAnimDef.offCenterX = listing.Slider(this.BodyAnimDef.offCenterX, -0.2f, 0.2f); if (listing.ButtonText(EditorWalkcycle.LabelCap)) { List <string> exists = new List <string>(); List <FloatMenuOption> list = new List <FloatMenuOption>(); this.BodyAnimDef.walkCycles.Clear(); foreach (WalkCycleDef walkcycle in (from bsm in DefDatabase <WalkCycleDef> .AllDefs orderby bsm.LabelCap select bsm) .TakeWhile(current => this.BodyAnimDef.WalkCycleType != "None") .Where(current => current.WalkCycleType == this.BodyAnimDef.WalkCycleType)) { list.Add(new FloatMenuOption(walkcycle.LabelCap, delegate { EditorWalkcycle = walkcycle; })); exists.Add(walkcycle.locomotionUrgency.ToString()); this.BodyAnimDef.walkCycles.Add(walkcycle.locomotionUrgency, walkcycle); } string[] names = Enum.GetNames(typeof(LocomotionUrgency)); for (int index = 0; index < names.Length; index++) { string name = names[index]; LocomotionUrgency myenum = (LocomotionUrgency)Enum.ToObject(typeof(LocomotionUrgency), index); if (exists.Contains(myenum.ToString())) { continue; } list.Add( new FloatMenuOption( "Add new " + this.BodyAnimDef.WalkCycleType + "_" + myenum, delegate { WalkCycleDef newCycle = new WalkCycleDef(); newCycle.defName = newCycle.label = this.BodyAnimDef.WalkCycleType + "_" + name; newCycle.locomotionUrgency = myenum; newCycle.WalkCycleType = this.BodyAnimDef.WalkCycleType; GameComponent_FacialStuff.BuildWalkCycles(newCycle); EditorWalkcycle = newCycle; this.BodyAnimDef.walkCycles.Add(myenum, newCycle); })); } Find.WindowStack.Add(new FloatMenu(list)); } if (listing.ButtonText("This pawn is using: " + this.BodyAnimDef.WalkCycleType)) { List <FloatMenuOption> list = new List <FloatMenuOption>(); List <WalkCycleDef> listy = DefDatabase <WalkCycleDef> .AllDefsListForReading; List <string> stringsy = new List <string>(); foreach (WalkCycleDef cycleDef in listy) { if (!stringsy.Contains(cycleDef.WalkCycleType)) { stringsy.Add(cycleDef.WalkCycleType); } } foreach (string s in stringsy) { list.Add(new FloatMenuOption(s, delegate { this.BodyAnimDef.WalkCycleType = s; })); } Find.WindowStack.Add(new FloatMenu(list)); } listing.Gap(); string configFolder = DefPath; if (listing.ButtonText("Export BodyDef")) { string filePath = configFolder + "/BodyAnimDefs/" + this.BodyAnimDef.defName + ".xml"; Find.WindowStack.Add( Dialog_MessageBox.CreateConfirmation( "Confirm overwriting " + filePath, delegate { ExportAnimDefs.Defs animDef = new ExportAnimDefs.Defs(this.BodyAnimDef); DirectXmlSaver.SaveDataObject( animDef, filePath); }, true)); // BodyAnimDef animDef = this.bodyAnimDef; } if (listing.ButtonText("Export WalkCycle")) { string path = configFolder + "/WalkCycleDefs/" + EditorWalkcycle.defName + ".xml"; Find.WindowStack.Add( Dialog_MessageBox.CreateConfirmation( "Confirm overwriting " + path, delegate { ExportWalkCycleDefs.Defs cycle = new ExportWalkCycleDefs.Defs(EditorWalkcycle); DirectXmlSaver.SaveDataObject( cycle, path); }, true)); } }
// public static float horHeadOffset; protected override void DoBasicSettingsMenu(Listing_Standard listing) { base.DoBasicSettingsMenu(listing); GetBodyAnimDef(); // listing_Standard.CheckboxLabeled("Equipment", ref Equipment); // listing_Standard.Label(horHeadOffset.ToString("N2") + " - " + verHeadOffset.ToString("N2")); // horHeadOffset = listing_Standard.Slider(horHeadOffset, -1f, 1f); // verHeadOffset = listing_Standard.Slider(verHeadOffset, -1f, 1f); listing.Label(CompAnim.BodyAnim.offCenterX.ToString("N2")); CompAnim.BodyAnim.offCenterX = listing.Slider(CompAnim.BodyAnim.offCenterX, -0.2f, 0.2f); if (listing.ButtonText(EditorPoseCycle?.LabelCap)) { List <string> exists = new List <string>(); List <FloatMenuOption> list = new List <FloatMenuOption>(); CompAnim.BodyAnim.poseCycles.Clear(); foreach (PoseCycleDef posecycle in (from bsm in DefDatabase <PoseCycleDef> .AllDefs orderby bsm.LabelCap select bsm) .TakeWhile(current => CompAnim.BodyAnim.PoseCycleType != "None") .Where(current => current.PoseCycleType == CompAnim.BodyAnim.PoseCycleType)) { list.Add(new FloatMenuOption(posecycle.LabelCap, delegate { EditorPoseCycle = posecycle; })); exists.Add(posecycle.pawnPosture.ToString()); CompAnim.BodyAnim.poseCycles.Add(posecycle); } string[] names = Enum.GetNames(typeof(PawnPosture)); for (int index = 0; index < names.Length; index++) { string name = names[index]; PawnPosture myenum = (PawnPosture)Enum.ToObject(typeof(PawnPosture), index); if (exists.Contains(myenum.ToString())) { continue; } list.Add( new FloatMenuOption( "Add new " + CompAnim.BodyAnim.PoseCycleType + "_" + myenum, delegate { PoseCycleDef newCycle = new PoseCycleDef(); newCycle.defName = newCycle.label = CompAnim.BodyAnim.PoseCycleType + "_" + name; newCycle.pawnPosture = myenum; newCycle.PoseCycleType = CompAnim.BodyAnim.PoseCycleType; GameComponent_FacialStuff.BuildPoseCycles(newCycle); EditorPoseCycle = newCycle; CompAnim.BodyAnim.poseCycles.Add(newCycle); })); } Find.WindowStack.Add(new FloatMenu(list)); } listing.Gap(); string configFolder = DefPath; if (listing.ButtonText("Export BodyDef")) { string filePath = configFolder + "/BodyAnimDefs/" + CompAnim.BodyAnim.defName + ".xml"; Find.WindowStack.Add( Dialog_MessageBox.CreateConfirmation( "Confirm overwriting " + filePath, delegate { ExportAnimDefs.Defs animDef = new ExportAnimDefs.Defs(CompAnim.BodyAnim); DirectXmlSaver.SaveDataObject( animDef, filePath); }, true)); // BodyAnimDef animDef = this.bodyAnimDef; } if (listing.ButtonText("Export PoseCycle")) { string path = configFolder + "/PoseCycleDefs/" + EditorPoseCycle?.defName + ".xml"; Find.WindowStack.Add( Dialog_MessageBox.CreateConfirmation( "Confirm overwriting " + path, delegate { ExportPoseCycleDefs.Defs cycle = new ExportPoseCycleDefs.Defs(EditorPoseCycle); DirectXmlSaver.SaveDataObject( cycle, path); }, true)); } }
/// <summary> /// Saves an object to an xml file /// </summary> /// <param name="obj">The object to save</param> /// <param name="filepath">The xml file path</param> public static void SaveDataObject(object obj, string filepath) { DirectXmlSaver.SaveDataObject(obj, filepath); }
public static void SavePSISettings([NotNull] string path = "ColonistBar_PSIKF.xml") { string configFolder = Path.GetDirectoryName(GenFilePaths.ModsConfigFilePath); DirectXmlSaver.SaveDataObject(PSISettings, configFolder + "/" + path); }
protected override void FillTab() { if (this.pawn != this.SelPawn) { this.pawn = this.SelPawn; } bool horizontal = this.pawn.Rotation.IsHorizontal; if (!this.SelPawn.GetCompFace(out CompFace compFace)) { return; } Rect rect = new Rect(10f, 10f, 330f, 530f); Listing_Standard listing = new Listing_Standard(); listing.Begin(rect); this.SelPawn.GetCompAnim(out CompBodyAnimator _); listing.CheckboxLabeled("Ignore renderer", ref compFace.IgnoreRenderer); if (GUI.changed) { IgnoreRenderer = compFace.IgnoreRenderer; } ThingWithComps primary = this.SelPawn.equipment?.Primary; if (primary == null) { return; } weaponExtensions = primary?.def.GetCompProperties <CompProperties_WeaponExtensions>(); if (weaponExtensions == null) { weaponExtensions = new CompProperties_WeaponExtensions { compClass = typeof(CompWeaponExtensions) }; primary.def.comps?.Add(weaponExtensions); } if (this.SelPawn.Drafted) { listing.Label(this.pawn.equipment.Primary.def.defName); Vector3 weaponOffset = weaponExtensions.WeaponPositionOffset; listing.Label("Offset: " + (weaponOffset.x).ToString("N2") + " / " + (weaponOffset.y).ToString("N2") + " / " + (weaponOffset.z).ToString("N2")); if (horizontal) { weaponOffset.y = listing.Slider(weaponOffset.y, -1f, 1f, label: "Horizontal x"); } else { weaponOffset.x = listing.Slider(weaponOffset.x, -1f, 1f, label: "Vertical x"); } weaponOffset.z = listing.Slider(weaponOffset.z, -1f, 1f, label: "z"); Vector3 aimedOffset = weaponExtensions.AimedWeaponPositionOffset; listing.Label("OffsetAiming: " + (aimedOffset.x).ToString("N2") + " / " + (aimedOffset.y).ToString("N2") + " / " + (aimedOffset.z).ToString("N2")); if (horizontal) { aimedOffset.y = listing.Slider(aimedOffset.y, -1f, 1f, label: "Horizontal x"); } else { aimedOffset.x = listing.Slider(aimedOffset.x, -1f, 1f, label: "Vertical x"); } aimedOffset.z = listing.Slider(aimedOffset.z, -1f, 1f, label: "z"); Vector3 rightHandPosition = weaponExtensions.RightHandPosition; listing.Label("RH: " + (rightHandPosition.x).ToString("N2") + " / " + (rightHandPosition.z).ToString("N2")); listing.Gap(); rightHandPosition.y = listing.Slider(rightHandPosition.y, -YOffset_HandsFeet, YOffset_HandsFeet, leftAlignedLabel: "behind", rightAlignedLabel: "front", roundTo: YOffset_HandsFeet); rightHandPosition.x = listing.Slider(rightHandPosition.x, -1f, 1f); rightHandPosition.z = listing.Slider(rightHandPosition.z, -1f, 1f); Vector3 leftHandPosition = weaponExtensions.LeftHandPosition; listing.Label("LH: " + (leftHandPosition.x).ToString("N2") + " / " + (leftHandPosition.z).ToString("N2")); listing.Gap(); leftHandPosition.y = listing.Slider(leftHandPosition.y, -YOffset_HandsFeet, YOffset_HandsFeet, leftAlignedLabel: "behind", rightAlignedLabel: "front", roundTo: YOffset_HandsFeet); leftHandPosition.x = listing.Slider(leftHandPosition.x, -1f, 1f); leftHandPosition.z = listing.Slider(leftHandPosition.z, -1f, 1f); if (leftHandPosition != Vector3.zero) { if (listing.ButtonText("Remove left hand position")) { leftHandPosition = Vector3.zero; } } listing.Gap(); if (listing.ButtonText("Export WeaponExtensionDef")) { string defName = "WeaponExtensionDef_" + primary?.def.defName; WeaponExtensionDef wepDef; if (!DefDatabase <WeaponExtensionDef> .AllDefsListForReading.Any(x => x.defName == defName)) { wepDef = new WeaponExtensionDef { defName = defName, label = defName, weapon = primary.def.defName }; DefDatabase <WeaponExtensionDef> .Add(wepDef); } else { wepDef = DefDatabase <WeaponExtensionDef> .GetNamed(defName); } wepDef.weaponPositionOffset = weaponOffset; wepDef.aimedWeaponPositionOffset = aimedOffset; wepDef.firstHandPosition = rightHandPosition; wepDef.secondHandPosition = leftHandPosition; string configFolder = MainTabWindow_BaseAnimator.DefPath; string path = configFolder + "/WeaponExtensionDefs/" + wepDef.defName + ".xml"; Find.WindowStack.Add( Dialog_MessageBox.CreateConfirmation( "Confirm overwriting: " + path, delegate { ExportWeaponExtensionDefs.Defs cycle = new ExportWeaponExtensionDefs.Defs(wepDef); DirectXmlSaver.SaveDataObject( cycle, path); }, true)); } if (GUI.changed) { weaponExtensions.WeaponPositionOffset = weaponOffset; weaponExtensions.AimedWeaponPositionOffset = aimedOffset; weaponExtensions.LeftHandPosition = leftHandPosition; weaponExtensions.RightHandPosition = rightHandPosition; } } listing.End(); // NeedsCardUtility.DoNeedsMoodAndThoughts(new Rect(0f, 0f, this.size.x, this.size.y), base.SelPawn, ref this.thoughtScrollPosition); }