Esempio n. 1
0
        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();
            }
        }
Esempio n. 3
0
        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();
            }
        }
Esempio n. 5
0
        // 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));
            }
        }
Esempio n. 6
0
        // 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));
            }
        }
Esempio n. 7
0
 /// <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);
 }
Esempio n. 8
0
        public static void SavePSISettings([NotNull] string path = "ColonistBar_PSIKF.xml")
        {
            string configFolder = Path.GetDirectoryName(GenFilePaths.ModsConfigFilePath);

            DirectXmlSaver.SaveDataObject(PSISettings, configFolder + "/" + path);
        }
Esempio n. 9
0
        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);
        }