public static void Options(Rect fullArea, Rect leftArea, Rect mainArea)
        {
            GUI.Box(fullArea, "", "backgroundBox");

            GUILayout.BeginArea(fullArea);
            optionsScrollPos = GUILayout.BeginScrollView(optionsScrollPos);
            RPGMakerGUI.Title("Stat Options");
            RPGMakerGUI.SubTitle("Exp Options");
            RPGMakerGUI.Toggle("Allow Exp To Overflow", ref ASVT.AllowExpToOverflow);
            RPGMakerGUI.SubTitle("Stat Options");
            ASVT.RegenInterval = RPGMakerGUI.FloatField("RegenInterval:", ASVT.RegenInterval);

            RPGMakerGUI.SubTitle("Titles");
            ASVT.AttributeNameTitle = RPGMakerGUI.TextField("Attribute Title:", ASVT.AttributeNameTitle);
            ASVT.StatisticNameTitle = RPGMakerGUI.TextField("Statistic Title:", ASVT.StatisticNameTitle);
            ASVT.VitalNameTitle     = RPGMakerGUI.TextField("Vital Title:", ASVT.VitalNameTitle);
            ASVT.TraitNameTitle     = RPGMakerGUI.TextField("Trait Title:", ASVT.TraitNameTitle);

            RPGMakerGUI.SubTitle("Movement");
            ASVT.JumpHeight           = RPGMakerGUI.FloatField("Player Jump Height:", ASVT.JumpHeight);
            ASVT.BaseMovementSpeed    = RPGMakerGUI.FloatField("Base Player Movement Speed:", ASVT.BaseMovementSpeed);
            ASVT.BaseNpcMovementSpeed = RPGMakerGUI.FloatField("Base NPC Movement Speed:", ASVT.BaseNpcMovementSpeed);
            if (RPGMakerGUI.Toggle("Use Stat as Movement Multiplier?", ref ASVT.UseStatForMovementSpeed))
            {
                RPGMakerGUI.PopupID <Rm_StatisticDefintion>("Statistic:", ref ASVT.StatForMovementID, 1);
                RPGMakerGUI.Help("Move Speed = BaseMoveSpeed * Stat:", 1);
            }

            GUILayout.EndScrollView();
            GUILayout.EndArea();
        }
예제 #2
0
        public static void Quests(Rect fullArea, Rect leftArea, Rect mainArea)
        {
            GUI.Box(leftArea, "", "backgroundBox");
            GUI.Box(mainArea, "", "backgroundBoxMain");

            GUILayout.BeginArea(PadRect(leftArea, 0, 0));
            RPGMakerGUI.ListArea(AllSingleQuestsList, ref selectedQuest, Rm_ListAreaType.Quests, false, false);
            GUILayout.EndArea();


            GUILayout.BeginArea(mainArea);
            questScrollPos = GUILayout.BeginScrollView(questScrollPos);

            RPGMakerGUI.Title("Quests");
            if (selectedQuest != null)
            {
                QuestDetails(selectedQuest, false);
            }
            else
            {
                EditorGUILayout.HelpBox("Add or select a new field to customise quests.", MessageType.Info);
            }
            GUILayout.EndScrollView();
            GUILayout.EndArea();
        }
        public static void Attributes(Rect fullArea, Rect leftArea, Rect mainArea)
        {
            var list = Rm_RPGHandler.Instance.ASVT.AttributesDefinitions;

            GUI.Box(leftArea, "", "backgroundBox");
            GUI.Box(mainArea, "", "backgroundBoxMain");

            GUILayout.BeginArea(PadRect(leftArea, 2, 2));
            RPGMakerGUI.ListArea(list, ref selectedAttrInfo, Rm_ListAreaType.Attributes, false, true);
            GUILayout.EndArea();


            GUILayout.BeginArea(mainArea);
            RPGMakerGUI.Title("Attributes");
            if (selectedAttrInfo != null)
            {
                GUILayout.BeginVertical(GUILayout.ExpandWidth(true));
                selectedAttrInfo.Name         = RPGMakerGUI.TextField("Name: ", selectedAttrInfo.Name);
                selectedAttrInfo.Description  = RPGMakerGUI.TextField("Description: ", selectedAttrInfo.Description);
                selectedAttrInfo.DefaultValue = RPGMakerGUI.IntField("Default Value: ", selectedAttrInfo.DefaultValue);
                selectedAttrInfo.Color        = (Rm_UnityColors)RPGMakerGUI.EnumPopup("Color: ", selectedAttrInfo.Color);
                if (RPGMakerGUI.Toggle("Has Max Value?", ref selectedAttrInfo.HasMaxValue))
                {
                    selectedAttrInfo.MaxValue = RPGMakerGUI.IntField("Max Value: ", selectedAttrInfo.MaxValue, 1);
                }
                selectedAttrInfo.Image = RPGMakerGUI.ImageSelector("Image:", selectedAttrInfo.Image, ref selectedAttrInfo.ImagePath, true);
                GUILayout.EndVertical();
            }
            else
            {
                EditorGUILayout.HelpBox("Add or select a new field to customise attributes.", MessageType.Info);
            }
            GUILayout.EndArea();
        }
예제 #4
0
        public static void Enemies(Rect fullArea, Rect leftArea, Rect mainArea)
        {
            var list = Rm_RPGHandler.Instance.Repositories.Enemies.AllEnemies;

            GUI.Box(leftArea, "", "backgroundBox");
            GUI.Box(mainArea, "", "backgroundBoxMain");

            GUILayout.BeginArea(PadRect(leftArea, 0, 0));
            RPGMakerGUI.ListArea(list, ref selectedCharInfo, Rm_ListAreaType.Enemies, false, true);
            GUILayout.EndArea();


            GUILayout.BeginArea(mainArea);
            RPGMakerGUI.Title("Enemies");
            if (selectedCharInfo != null)
            {
                RPGMakerGUI.BeginScrollView();
                if (RPGMakerGUI.Foldout(ref mainInfoFoldout, "Main Info"))
                {
                    GUILayout.BeginHorizontal();
                    GUILayout.BeginVertical(GUILayout.MaxWidth(85));
                    selectedCharInfo.Image = RPGMakerGUI.ImageSelector("", selectedCharInfo.Image,
                                                                       ref selectedCharInfo.ImagePath);

                    GUILayout.EndVertical();
                    GUILayout.BeginVertical(GUILayout.ExpandWidth(true));
                    selectedCharInfo.ID   = RPGMakerGUI.TextField("ID: ", selectedCharInfo.ID);
                    selectedCharInfo.Name = RPGMakerGUI.TextField("Name: ", selectedCharInfo.Name);
                    GUILayout.BeginHorizontal();
                    gameObject = RPGMakerGUI.PrefabSelector("Enemy Prefab:", gameObject, ref selectedCharInfo.CharPrefabPath);
                    gameObject = RPGMakerGUI.PrefabGeneratorButton(Rmh_PrefabType.Enemy, gameObject, ref selectedCharInfo.CharPrefabPath, null, selectedCharInfo.ID);
                    GUILayout.EndHorizontal();

                    Rme_Combatants.CombatantDetails(selectedCharInfo);
                    GUILayout.Space(5);

                    GUILayout.EndVertical();
                    GUILayout.EndHorizontal();
                }
                if (mainInfoFoldout)
                {
                    RPGMakerGUI.EndFoldout();
                }

                Rme_Combatants.Projectile(selectedCharInfo);
                Rme_Combatants.Animations(selectedCharInfo);
                Rme_Combatants.CombatStats(selectedCharInfo);
                Rme_Combatants.Loot(selectedCharInfo);

                RPGMakerGUI.EndScrollView();
            }
            else
            {
                EditorGUILayout.HelpBox("Add or select a new field to customise Enemy Characters.", MessageType.Info);
            }
            GUILayout.EndArea();
        }
        public static void Options(Rect fullArea, Rect leftArea, Rect mainArea)
        {
            GUI.Box(fullArea, "", "backgroundBox");

            GUILayout.BeginArea(fullArea);
            RPGMakerGUI.Title("Interactables - Options");
            Interact.InteractDistance = RPGMakerGUI.FloatField("Interact Distance: ", Interact.InteractDistance);
            RPGMakerGUI.Toggle("Add Harvested Items to Inventory?", ref Interact.AddHarvestItemsToInventory);
            GUILayout.EndArea();
        }
        public static void CustomVariables(Rect fullArea, Rect leftArea, Rect mainArea)
        {
            var list = Rm_RPGHandler.Instance.DefinedVariables.Vars;

            GUI.Box(leftArea, "", "backgroundBox");
            GUI.Box(mainArea, "", "backgroundBoxMain");

            GUILayout.BeginArea(PadRect(leftArea, 0, 0));
            RPGMakerGUI.ListArea(list, ref selectedInfo, Rm_ListAreaType.CustomVaraibles, false, false);
            GUILayout.EndArea();

            GUILayout.BeginArea(mainArea);
            RPGMakerGUI.Title("Defined Variables");
            if (selectedInfo != null)
            {
                selectedInfo.Name = RPGMakerGUI.TextField("Name: ", selectedInfo.Name);
                var prevSelIndex = selectedInfo.VariableType;

                selectedInfo.VariableType = (Rmh_CustomVariableType)RPGMakerGUI.EnumPopup("Type:", selectedInfo.VariableType);

                if (prevSelIndex != selectedInfo.VariableType)
                {
                    GUI.FocusControl("");
                }

                switch (selectedInfo.VariableType)
                {
                case Rmh_CustomVariableType.Float:
                    selectedInfo.FloatValue = RPGMakerGUI.FloatField("Default Value:", selectedInfo.FloatValue);
                    break;

                case Rmh_CustomVariableType.Int:
                    selectedInfo.IntValue = RPGMakerGUI.IntField("Default Value:", selectedInfo.IntValue);
                    break;

                case Rmh_CustomVariableType.String:
                    selectedInfo.StringValue = RPGMakerGUI.TextField("Default Value:", selectedInfo.StringValue);
                    break;

                case Rmh_CustomVariableType.Bool:
                    selectedBooleanResult  = selectedInfo.BoolValue ? 0 : 1;
                    selectedBooleanResult  = RPGMakerGUI.Popup("Default Value:", selectedBooleanResult, new[] { "True", "False" });
                    selectedInfo.BoolValue = selectedBooleanResult == 0;
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
            else
            {
                RPGMakerGUI.Title("Add or select a new field to customise credits.");
            }
            GUILayout.EndArea();
        }
        private void OnGUIx()
        {
            if (Links.Count + Warnings.Length + Info.Length < 1)
            {
                Close();
            }

            GUI.skin = null;
            GUI.skin = Resources.Load("RPGMakerAssets/EditorSkinRPGMaker") as GUISkin;
            GUILayout.BeginVertical("backgroundBox");

            RPGMakerGUI.Title("Important Update Info");
            foreach (var text in Links)
            {
                GUILayout.BeginVertical();
                EditorGUILayout.HelpBox(text.Key, MessageType.Error);
                if (GUILayout.Button("Click Here For More Information", "genericButton", GUILayout.Height(20)))
                {
                    Process.Start(text.Value);
                }
                GUILayout.EndVertical();
                GUILayout.Space(5);
            }
            GUILayout.Space(10);
            foreach (var text in Warnings)
            {
                EditorGUILayout.HelpBox(text, MessageType.Warning);
                GUILayout.Space(5);
            }
            foreach (var text in Info)
            {
                EditorGUILayout.HelpBox(text, MessageType.Info);
                GUILayout.Space(5);
            }


            GUILayout.FlexibleSpace();

            if (EditorApplication.timeSinceStartup >= _timeToEnable)
            {
                if (GUILayout.Button("Close", "genericButton", GUILayout.Height(20)))
                {
                    Close();
                }
            }
            else
            {
                GUI.enabled = false;
                GUILayout.Button("Can close in " + (_timeToEnable - EditorApplication.timeSinceStartup).ToString("F2") + " seconds", "genericButton", GUILayout.Height(20));
                GUI.enabled = false;
            }
            GUILayout.EndVertical();
        }
예제 #8
0
        public static void QuestChains(Rect fullArea, Rect leftArea, Rect mainArea)
        {
            leftAreaB   = new Rect(leftArea.xMax + 5, leftArea.y, leftArea.width, leftArea.height);
            mainAreaAlt = new Rect(leftAreaB.xMax + 5, leftArea.y, mainArea.width - (leftAreaB.width + 5),
                                   leftArea.height);

            GUI.Box(leftArea, "", "backgroundBox");
            GUI.Box(leftAreaB, "", "backgroundBox");
            GUI.Box(mainAreaAlt, "", "backgroundBox");



            GUILayout.BeginArea(PadRect(leftArea, 0, 0));
            var selected = selectedQuestChain;

            RPGMakerGUI.ListArea(questChainList, ref selectedQuestChain, Rm_ListAreaType.QuestChains, false, false);
            if (selected != selectedQuestChain)
            {
                booleanArrayForToggles = new bool[999];
            }
            GUILayout.EndArea();

            GUILayout.BeginArea(leftAreaB);
            if (selectedQuestChain != null)
            {
                var rect = RPGMakerGUI.ListArea(selectedQuestChain.QuestsInChain, ref selectedQuestChainQuest, Rm_ListAreaType.Quests, false, false, Rme_ListButtonsToShow.AllExceptHelp, true, selectedQuestChain.ID);
            }
            GUILayout.EndArea();

            GUILayout.BeginArea(mainAreaAlt);
            questChainScrollPos = GUILayout.BeginScrollView(questChainScrollPos);
            RPGMakerGUI.Title("Quest Chains");
            if (selectedQuestChain != null)
            {
                selectedQuestChain.Name = RPGMakerGUI.TextField("Name: ", selectedQuestChain.Name);
                if (selectedQuestChainQuest != null)
                {
                    var quest = selectedQuestChainQuest;
                    QuestDetails(quest, true);
                }
                else
                {
                    EditorGUILayout.HelpBox("Select a quest in the quest chain to begin editing it.", MessageType.Info);
                }
            }
            else
            {
                EditorGUILayout.HelpBox("Add or select a new field to customise quest chains.", MessageType.Info);
            }
            GUILayout.EndScrollView();
            GUILayout.EndArea();
        }
예제 #9
0
        public static void Options(Rect fullArea, Rect leftArea, Rect mainArea)
        {
            GUI.Box(fullArea, "", "backgroundBox");

            GUILayout.BeginArea(fullArea);
            RPGMakerGUI.Title("Objectives - Options");

            RPGMakerGUI.Toggle("Show Quest Markers?", ref Questing.ShowQuestMarkers);
            Questing.QuestStarted.Audio  = RPGMakerGUI.AudioClipSelector("Quest Started Sound:", Questing.QuestStarted.Audio, ref Questing.QuestStarted.AudioPath);
            Questing.QuestComplete.Audio = RPGMakerGUI.AudioClipSelector("Quest Completed Sound:", Questing.QuestComplete.Audio, ref Questing.QuestComplete.AudioPath);

            GUILayout.EndArea();
        }
        public static void InteractableObjects(Rect fullArea, Rect leftArea, Rect mainArea)
        {
            var list = Rm_RPGHandler.Instance.Repositories.Interactable.AllInteractables;

            GUI.Box(leftArea, "", "backgroundBox");
            GUI.Box(mainArea, "", "backgroundBoxMain");

            GUILayout.BeginArea(PadRect(leftArea, 0, 0));
            RPGMakerGUI.ListArea(list, ref selectedInteractable, Rm_ListAreaType.Interactables, false, true);
            GUILayout.EndArea();


            GUILayout.BeginArea(mainArea);
            RPGMakerGUI.Title("Interactables");
            if (selectedInteractable != null)
            {
                RPGMakerGUI.TextField("ID: ", selectedInteractable.ID);
                selectedInteractable.Name = RPGMakerGUI.TextField("Name: ", selectedInteractable.Name);
                GUILayout.BeginHorizontal();
                gameObject = RPGMakerGUI.PrefabSelector("Prefab:", gameObject, ref selectedInteractable.PrefabPath);
                gameObject = RPGMakerGUI.PrefabGeneratorButton(Rmh_PrefabType.Interactable, gameObject, ref selectedInteractable.PrefabPath, null, selectedInteractable.ID);
                GUILayout.EndHorizontal();

                selectedInteractable.Image = RPGMakerGUI.ImageSelector("Image", selectedInteractable.Image, ref selectedInteractable.ImagePath, true);
                if (GUILayout.Button("Open Interaction Window", "genericButton", GUILayout.MaxHeight(30)))
                {
                    var trees        = Rm_RPGHandler.Instance.Nodes.DialogNodeBank.NodeTrees;
                    var existingTree = trees.FirstOrDefault(t => t.ID == selectedInteractable.ID);
                    if (existingTree == null)
                    {
                        existingTree      = NodeWindow.GetNewTree(NodeTreeType.Dialog);
                        existingTree.ID   = selectedInteractable.ID;
                        existingTree.Name = selectedInteractable.Name;
                        trees.Add(existingTree);
                    }

                    DialogNodeWindow.ShowWindow(selectedInteractable.ID);
                    selectedInteractable.ConversationNodeId = existingTree.ID;
                }
            }
            else
            {
                EditorGUILayout.HelpBox("Add or select a new field to customise interactables.", MessageType.Info);
            }
            GUILayout.EndArea();
        }
예제 #11
0
        public static void Options(Rect fullArea, Rect leftArea, Rect mainArea)
        {
            GUI.Box(fullArea, "", "backgroundBox");

            GUILayout.BeginArea(fullArea);
            optionsScrollPos = GUILayout.BeginScrollView(optionsScrollPos);
            RPGMakerGUI.Title("Enemy - Options");

            var result = RPGMakerGUI.FoldoutToolBar(ref showMonsterTypes, "Monster Types",
                                                    new[] { "+Monster Type" });

            if (showMonsterTypes)
            {
                for (int index = 0; index < Enemy.MonsterTypes.Count; index++)
                {
                    var def = Enemy.MonsterTypes[index];
                    GUILayout.BeginHorizontal();
                    def.Name = RPGMakerGUI.TextField("", def.Name);
                    if (RPGMakerGUI.DeleteButton(25))
                    {
                        Enemy.MonsterTypes.Remove(def);
                        index--;
                    }
                    GUILayout.EndHorizontal();
                }

                if (result == 0)
                {
                    Enemy.MonsterTypes.Add(new MonsterTypeDefinition());
                }

                if (Enemy.MonsterTypes.Count == 0)
                {
                    EditorGUILayout.HelpBox(
                        "You can define monster types to use elsewhere such as Boss, Miniboss, etc.",
                        MessageType.Info);
                }
            }
            if (showMonsterTypes)
            {
                RPGMakerGUI.EndFoldout();
            }
            GUILayout.EndScrollView();
            GUILayout.EndArea();
        }
예제 #12
0
        public static void Options(Rect fullArea, Rect leftArea, Rect mainArea)
        {
            GUI.Box(leftArea, "", "backgroundBox");
            GUI.Box(mainArea, "", "backgroundBoxMain");

            GUILayout.BeginArea(PadRect(leftArea, 0, 0));
            RPGMakerGUI.Title("List 1");

            RPGMakerGUI.Title("List 2");
            RPGMakerGUI.Title("List 3");

            GUILayout.EndArea();


            GUILayout.BeginArea(mainArea);
            RPGMakerGUI.Title("Game page.");
            RPGMakerGUI.Title("UI - OPTIONS");
            GUILayout.EndArea();
        }
예제 #13
0
        public static void Options(Rect fullArea, Rect leftArea, Rect mainArea)
        {
            GUI.Box(fullArea, "", "backgroundBox");
            GUILayout.BeginArea(fullArea);
            RPGMakerGUI.Title("Game Options");

            RPGMakerGUI.SubTitle("General");

            Customise.GameHasAchievements = RPGMakerGUI.Toggle("Enable Achievements?", Customise.GameHasAchievements,
                                                               GUILayout.Width(300));
            Customise.AchievementUnlockedSound.Audio = RPGMakerGUI.AudioClipSelector("Achievement Unlocked Sound:", Customise.AchievementUnlockedSound.Audio, ref Customise.AchievementUnlockedSound.AudioPath);
            Customise.LoadingScreen.Image            = RPGMakerGUI.ImageSelector("Loading Screen:", Customise.LoadingScreen.Image, ref Customise.LoadingScreen.ImagePath);

            RPGMakerGUI.SubTitle("Enable Popups");
            RPGMakerGUI.Toggle("Exp Gained", ref Customise.EnableExpGainedPopup);
            RPGMakerGUI.Toggle("Level Reached", ref Customise.EnableLevelReachedPopup);
            RPGMakerGUI.Toggle("Skill Exp Gained", ref Customise.EnableSkillExpGainedPopup);

            RPGMakerGUI.SubTitle("Tooltip");
            RPGMakerGUI.Toggle("Follow Mouse Position", ref Customise.TooltipFollowsCursor);

            GUILayout.EndArea();
        }
        public static void Traits(Rect fullArea, Rect leftArea, Rect mainArea)
        {
            var list = Rm_RPGHandler.Instance.ASVT.TraitDefinitions;

            GUI.Box(leftArea, "", "backgroundBox");
            GUI.Box(mainArea, "", "backgroundBoxMain");

            GUILayout.BeginArea(PadRect(leftArea, 0, 0));
            RPGMakerGUI.ListArea(list, ref selectedTraitInfo, Rm_ListAreaType.Traits, false, false);
            GUILayout.EndArea();


            GUILayout.BeginArea(mainArea);
            RPGMakerGUI.Title("Traits");
            if (selectedTraitInfo != null)
            {
                GUILayout.BeginVertical(GUILayout.ExpandWidth(true));
                selectedTraitInfo.Name        = RPGMakerGUI.TextField("Name: ", selectedTraitInfo.Name);
                selectedTraitInfo.Description = RPGMakerGUI.TextArea("Description: ", selectedTraitInfo.Description);
                RPGMakerGUI.PopupID <ExpDefinition>("Exp Definition:", ref selectedTraitInfo.ExpDefinitionID, "ID", "Name", "Trait");

                selectedTraitInfo.StartingLevel = RPGMakerGUI.IntField("Starting Level: ", selectedTraitInfo.StartingLevel);

                selectedTraitInfo.Color = (Rm_UnityColors)RPGMakerGUI.EnumPopup("Color: ", selectedTraitInfo.Color);
                selectedTraitInfo.Image = RPGMakerGUI.ImageSelector("Image:", selectedTraitInfo.Image, ref selectedTraitInfo.ImagePath, true);

                GUILayout.EndVertical();
            }
            else
            {
                EditorGUILayout.HelpBox("Add or select a new field to customise traits.", MessageType.Info);
                EditorGUILayout.HelpBox("What is a trait? A trait is a stat that has a Level with exp to level." +
                                        "\nExample use: Sword Mastery (Exp gained with Combat Node check that current" +
                                        " weapon is of type Sword)", MessageType.Info);
            }
            GUILayout.EndArea();
        }
예제 #15
0
        public static void NPCs(Rect fullArea, Rect leftArea, Rect mainArea)
        {
            var list = Rm_RPGHandler.Instance.Repositories.Interactable.AllNpcs;

            GUI.Box(leftArea, "", "backgroundBox");
            GUI.Box(mainArea, "", "backgroundBoxMain");

            GUILayout.BeginArea(PadRect(leftArea, 0, 0));
            RPGMakerGUI.ListArea(list, ref selectedNPCInfo, Rm_ListAreaType.NPCs, false, true);
            GUILayout.EndArea();

            GUILayout.BeginArea(mainArea);
            RPGMakerGUI.Title("NPCs");
            if (selectedCharInfo != null)
            {
                RPGMakerGUI.BeginScrollView();
                if (RPGMakerGUI.Foldout(ref mainInfoFoldout, "Main Info"))
                {
                    GUILayout.BeginHorizontal();
                    GUILayout.BeginVertical(GUILayout.MaxWidth(85));
                    selectedCharInfo.Image = RPGMakerGUI.ImageSelector("", selectedCharInfo.Image,
                                                                       ref selectedCharInfo.ImagePath);

                    GUILayout.EndVertical();
                    GUILayout.BeginVertical(GUILayout.ExpandWidth(true));
                    RPGMakerGUI.TextField("ID: ", selectedCharInfo.ID);
                    selectedCharInfo.Name = RPGMakerGUI.TextField("Name: ", selectedCharInfo.Name);
                    GUILayout.BeginHorizontal();
                    gameObject = RPGMakerGUI.PrefabSelector("NPC Prefab:", gameObject, ref selectedCharInfo.CharPrefabPath);
                    gameObject = RPGMakerGUI.PrefabGeneratorButton(Rmh_PrefabType.NPC, gameObject, ref selectedCharInfo.CharPrefabPath, null, selectedCharInfo.ID);
                    GUILayout.EndHorizontal();


                    if (GUILayout.Button("Open Interaction Window", "genericButton", GUILayout.MaxHeight(30)))
                    {
                        var trees        = Rm_RPGHandler.Instance.Nodes.DialogNodeBank.NodeTrees;
                        var existingTree = trees.FirstOrDefault(t => t.ID == selectedCharInfo.ID);
                        if (existingTree == null)
                        {
                            existingTree      = NodeWindow.GetNewTree(NodeTreeType.Dialog);
                            existingTree.ID   = selectedCharInfo.ID;
                            existingTree.Name = selectedCharInfo.Name;
                            trees.Add(existingTree);
                        }

                        DialogNodeWindow.ShowWindow(selectedCharInfo.ID);
                        selectedNPCInfo.Interaction.ConversationNodeId = existingTree.ID;
                    }
                    if (Rm_RPGHandler.Instance.Combat.NPCsCanFight)
                    {
                        if (RPGMakerGUI.Toggle("This NPC Can Fight?", ref selectedNPCInfo.CanFight))
                        {
                            selectedNPCInfo.CanBeKilled = RPGMakerGUI.Toggle("Can be Perma-killed? ", selectedNPCInfo.CanBeKilled);
                            Rme_Combatants.CombatantDetails(selectedNPCInfo);
                        }
                    }
                    GUILayout.Space(5);
                    GUILayout.EndVertical();
                    GUILayout.EndHorizontal();
                }
                if (mainInfoFoldout)
                {
                    RPGMakerGUI.EndFoldout();
                }


                Rme_Combatants.Animations(selectedNPCInfo);



                if (Rm_RPGHandler.Instance.Combat.NPCsCanFight && selectedNPCInfo.CanFight)
                {
                    Rme_Combatants.CombatStats(selectedNPCInfo);
                    Rme_Combatants.Loot(selectedNPCInfo);
                }

                RPGMakerGUI.EndScrollView();
            }
            else
            {
                EditorGUILayout.HelpBox("Add or select a new field to customise Enemy Characters.", MessageType.Info);
            }
            GUILayout.EndArea();
        }
예제 #16
0
        public static void Reputations(Rect fullArea, Rect leftArea, Rect mainArea)
        {
            var list = Rm_RPGHandler.Instance.Repositories.Quests.AllReputations;

            GUI.Box(leftArea, "", "backgroundBox");
            GUI.Box(mainArea, "", "backgroundBoxMain");

            GUILayout.BeginArea(PadRect(leftArea, 0, 0));
            RPGMakerGUI.ListArea(list, ref selectedReputation, Rm_ListAreaType.Reputations, false, false);
            GUILayout.EndArea();


            GUILayout.BeginArea(mainArea);
            RPGMakerGUI.Title("Reputations");
            if (selectedReputation != null)
            {
                GUILayout.BeginHorizontal();
                GUILayout.BeginVertical(GUILayout.MaxWidth(85));
                selectedReputation.Image = RPGMakerGUI.ImageSelector("", selectedReputation.Image,
                                                                     ref selectedReputation.ImagePath);

                GUILayout.EndVertical();
                GUILayout.BeginVertical(GUILayout.ExpandWidth(true));
                selectedReputation.Name                    = RPGMakerGUI.TextField("Name: ", selectedReputation.Name);
                selectedReputation.StartingValue           = RPGMakerGUI.IntField("Starting Value: ", selectedReputation.StartingValue);
                selectedReputation.ValueLossForNPCAttack   = RPGMakerGUI.IntField("Loss on NPC Attack: ", selectedReputation.ValueLossForNPCAttack);
                selectedReputation.IsTrackable             = RPGMakerGUI.Toggle("Trackable?", selectedReputation.IsTrackable);
                selectedReputation.AttackIfBelowReputation = RPGMakerGUI.Toggle("Attack if below Rep?", selectedReputation.AttackIfBelowReputation);
                if (selectedReputation.AttackIfBelowReputation)
                {
                    selectedReputation.BelowReputationValue = RPGMakerGUI.IntField("Attack if Below: ", selectedReputation.BelowReputationValue);
                }

                GUILayout.Space(40);
                GUILayout.Label("Enemy Factions:");
                if (Rm_RPGHandler.Instance.Repositories.Quests.AllReputations.Count > 1) //As we include the current reputation
                {
                    foreach (var d in Rm_RPGHandler.Instance.Repositories.Quests.AllReputations.Where(r => r.ID != selectedReputation.ID))
                    {
                        var faction = selectedReputation.EnemyFactions.FirstOrDefault(a => a.ID == d.ID);
                        if (faction == null)
                        {
                            var factionToAdd = new FactionStatus()
                            {
                                ID     = d.ID,
                                IsTrue = false
                            };

                            selectedReputation.EnemyFactions.Add(factionToAdd);
                        }
                    }

                    for (int index = 0; index < selectedReputation.EnemyFactions.Count; index++)
                    {
                        var v           = selectedReputation.EnemyFactions[index];
                        var stillExists =
                            Rm_RPGHandler.Instance.Repositories.Quests.AllReputations.FirstOrDefault(
                                a => a.ID == v.ID);

                        if (stillExists == null)
                        {
                            selectedReputation.EnemyFactions.Remove(v);
                            index--;
                        }
                    }

                    foreach (var v in selectedReputation.EnemyFactions)
                    {
                        var prefix =
                            Rm_RPGHandler.Instance.Repositories.Quests.AllReputations.First(a => a.ID == v.ID).
                            Name;
                        RPGMakerGUI.Toggle(prefix, ref v.IsTrue);
                    }
                }
                else
                {
                    EditorGUILayout.HelpBox("No other factions.", MessageType.Info);
                }

                #region "AlliedFactions"
                //                GUILayout.Label("Allied Factions:");
//                if (Rm_RPGHandler.Instance.Repositories.Quests.AllReputations.Count > 1) //As we include the current reputation
//                {
//                    foreach (var d in Rm_RPGHandler.Instance.Repositories.Quests.AllReputations.Where(r => r.ID != selectedReputation.ID))
//                    {
//                        var faction = selectedReputation.AlliedFactions.FirstOrDefault(a => a.ID == d.ID);
//                        if (faction == null)
//                        {
//                            var factionToAdd = new FactionStatus()
//                            {
//                                ID = d.ID,
//                                IsTrue = false
//                            };
//
//                            selectedReputation.AlliedFactions.Add(factionToAdd);
//                        }
//                    }
//
//                    for (int index = 0; index < selectedReputation.AlliedFactions.Count; index++)
//                    {
//                        var v = selectedReputation.AlliedFactions[index];
//                        var stillExists =
//                            Rm_RPGHandler.Instance.Repositories.Quests.AllReputations.FirstOrDefault(
//                                a => a.ID == v.ID);
//
//                        if (stillExists == null)
//                        {
//                            selectedReputation.AlliedFactions.Remove(v);
//                            index--;
//                        }
//                    }
//
//                    foreach (var v in selectedReputation.AlliedFactions)
//                    {
//                        var prefix =
//                            Rm_RPGHandler.Instance.Repositories.Quests.AllReputations.First(a => a.ID == v.ID).
//                                Name;
//                        RPGMakerGUI.Toggle(prefix, ref v.IsTrue);
//                    }
//                }
//                else
//                {
//                    EditorGUILayout.HelpBox("No other factions.", MessageType.Info);
                //                }
                #endregion

                var result = RPGMakerGUI.FoldoutToolBar(ref showRanks, "Faction Ranks", "+Rank");
                if (showRanks)
                {
                    for (int index = 0; index < selectedReputation.Ranks.Count; index++)
                    {
                        var rank = selectedReputation.Ranks[index];
                        GUILayout.BeginHorizontal();
                        rank.Name        = EditorGUILayout.TextField("", rank.Name);
                        rank.Requirement = EditorGUILayout.IntField("Requirement:", rank.Requirement);
                        GUI.enabled      = selectedReputation.Ranks.Count > 1;
                        if (RPGMakerGUI.DeleteButton(25))
                        {
                            selectedReputation.Ranks.RemoveAt(index);
                            index--;
                        }
                        GUI.enabled = true;
                        GUILayout.EndHorizontal();
                    }

                    RPGMakerGUI.EndFoldout();
                }

                if (result == 0)
                {
                    selectedReputation.Ranks.Add(new FactionRank());
                }

                GUILayout.EndVertical();
                GUILayout.EndHorizontal();
            }
            else
            {
                EditorGUILayout.HelpBox("Add or select a new field to customise reputations.", MessageType.Info);
            }
            GUILayout.EndArea();
        }
예제 #17
0
        public static void VendorShops(Rect fullArea, Rect leftArea, Rect mainArea)
        {
            leftAreaB   = new Rect(leftArea.xMax + 5, leftArea.y, leftArea.width, leftArea.height);
            mainAreaAlt = new Rect(leftAreaB.xMax + 5, leftArea.y, mainArea.width - (leftAreaB.width + 5),
                                   leftArea.height);

            GUI.Box(leftArea, "", "backgroundBox");
            GUI.Box(leftAreaB, "", "backgroundBox");
            GUI.Box(mainAreaAlt, "", "backgroundBox");


            var list = Rm_RPGHandler.Instance.Repositories.Vendor.AllVendors;

            GUILayout.BeginArea(PadRect(leftArea, 0, 0));
            RPGMakerGUI.ListArea(list, ref selectedVendorShop, Rm_ListAreaType.VendorShops, false, true);
            GUILayout.EndArea();

            GUILayout.BeginArea(leftAreaB);
            if (selectedVendorShop != null)
            {
                RPGMakerGUI.ListArea(selectedVendorShop.VendorShopItems, ref selectedVendorShopItem, Rm_ListAreaType.VendorShopItem, false, false, Rme_ListButtonsToShow.AllExceptHelp, true);
            }
            GUILayout.EndArea();

            GUILayout.BeginArea(mainAreaAlt);
            RPGMakerGUI.Title("Vendor Shops");
            if (selectedVendorShop != null)
            {
                selectedVendorShop.Name = RPGMakerGUI.TextField("Name: ", selectedVendorShop.Name);
                if (selectedVendorShopItem != null)
                {
                    //todo: replace with PopupID
                    RPGMakerGUI.SubTitle("Selected Vendor Shop Item");
                    var allItems = Rm_RPGHandler.Instance.Repositories.Items.AllItems;
                    if (string.IsNullOrEmpty(selectedVendorShopItem.ItemID))
                    {
                        selecteVendorItem = 0;
                    }
                    else
                    {
                        var stillExists =
                            allItems.FirstOrDefault(a => a.ID == selectedVendorShopItem.ItemID);
                        selecteVendorItem = stillExists != null?allItems.IndexOf(stillExists) : 0;
                    }
                    selecteVendorItem = EditorGUILayout.Popup("Item:", selecteVendorItem,
                                                              allItems.Select((q, indexOf) => indexOf + ". " + q.Name).
                                                              ToArray());

                    if (allItems.Count > 0)
                    {
                        selectedVendorShopItem.ItemID = allItems[selecteVendorItem].ID;

                        var stackable = allItems[selecteVendorItem] as IStackable;
                        if (stackable != null)
                        {
                            selectedVendorShopItem.InfiniteStock = RPGMakerGUI.Toggle("Infinite Stock?",
                                                                                      selectedVendorShopItem.
                                                                                      InfiniteStock);


                            if (!selectedVendorShopItem.InfiniteStock)
                            {
                                selectedVendorShopItem.QuantityRemaining = RPGMakerGUI.IntField("Quantity:",
                                                                                                selectedVendorShopItem.
                                                                                                QuantityRemaining);
                            }
                        }
                    }
                    else
                    {
                        RPGMakerGUI.Label("No Items Found.");
                    }
                }
            }
            else
            {
                EditorGUILayout.HelpBox("Add or select a new field to customise Vendor Shops.", MessageType.Info);
            }
            GUILayout.EndArea();
        }
        public static void HarvestableObjects(Rect fullArea, Rect leftArea, Rect mainArea)
        {
            var list = Rm_RPGHandler.Instance.Harvesting.HarvestableDefinitions;

            GUI.Box(leftArea, "", "backgroundBox");
            GUI.Box(mainArea, "", "backgroundBoxMain");

            GUILayout.BeginArea(PadRect(leftArea, 0, 0));
            RPGMakerGUI.ListArea(list, ref selectedHarvestable, Rm_ListAreaType.Harvestables, false, true);
            GUILayout.EndArea();


            GUILayout.BeginArea(mainArea);
            areaScrollPos = GUILayout.BeginScrollView(areaScrollPos);

            RPGMakerGUI.Title("Harvestable Objects");
            if (selectedHarvestable != null)
            {
                RPGMakerGUI.TextField("ID: ", selectedHarvestable.ID);
                selectedHarvestable.Name = RPGMakerGUI.TextField("Name: ", selectedHarvestable.Name);
                GUILayout.BeginHorizontal();
                gameObject = RPGMakerGUI.PrefabSelector("Prefab:", gameObject, ref selectedHarvestable.PrefabPath);
                gameObject = RPGMakerGUI.PrefabGeneratorButton(Rmh_PrefabType.Harvest, gameObject, ref selectedHarvestable.PrefabPath, null, selectedHarvestable.ID);
                GUILayout.EndHorizontal();

                if (RPGMakerGUI.Toggle("Regenerates harvestables?", ref selectedHarvestable.RegensResources))
                {
                    selectedHarvestable.TimeInSecToRegen  = RPGMakerGUI.FloatField("Time before regen:", selectedHarvestable.TimeInSecToRegen);
                    selectedHarvestable.AmountRegenerated = RPGMakerGUI.IntField("Amount regenerated:", selectedHarvestable.AmountRegenerated);
                    selectedHarvestable.MaxAtOnce         = RPGMakerGUI.IntField("Max At Once:", selectedHarvestable.MaxAtOnce);
                }
                else
                {
                    selectedHarvestable.MinObtainable = RPGMakerGUI.IntField("Min Total Quantity Obtainable:", selectedHarvestable.MinObtainable);
                    selectedHarvestable.MaxObtainable = RPGMakerGUI.IntField("Max Total Quantity Obtainable:", selectedHarvestable.MaxObtainable);
                }

                if (RPGMakerGUI.Toggle("Is Quest Item?", ref selectedHarvestable.IsQuestItem))
                {
                    RPGMakerGUI.PopupID <Quest>("Accepted Quest Required To Loot:", ref selectedHarvestable.QuestAcceptedID);
                    RPGMakerGUI.PopupID <Item>("Harvested Quest Item:", ref selectedHarvestable.HarvestedObjectID, "ID", "Name", "Quest");
                    if (!string.IsNullOrEmpty(selectedHarvestable.HarvestedObjectID))
                    {
                        var item      = Rm_RPGHandler.Instance.Repositories.QuestItems.AllItems.First(i => i.ID == selectedHarvestable.HarvestedObjectID);
                        var stackable = item as IStackable;
                        if (stackable != null)
                        {
                            selectedHarvestable.MinAmountGained = RPGMakerGUI.IntField("Min Quantity Gained:", selectedHarvestable.MinAmountGained);
                            selectedHarvestable.MaxAmountGained = RPGMakerGUI.IntField("Max Quantity Gained:", selectedHarvestable.MaxAmountGained);
                        }
                    }
                }
                else
                {
                    RPGMakerGUI.PopupID <Item>("Harvested Item:", ref selectedHarvestable.HarvestedObjectID);
                    if (!string.IsNullOrEmpty(selectedHarvestable.HarvestedObjectID))
                    {
                        var item      = Rm_RPGHandler.Instance.Repositories.Items.AllItems.First(i => i.ID == selectedHarvestable.HarvestedObjectID);
                        var stackable = item as IStackable;
                        if (stackable != null)
                        {
                            selectedHarvestable.MinAmountGained = RPGMakerGUI.IntField("Min Quantity Gained:", selectedHarvestable.MinAmountGained);
                            selectedHarvestable.MaxAmountGained = RPGMakerGUI.IntField("Max Quantity Gained:", selectedHarvestable.MaxAmountGained);
                        }
                    }
                }

                selectedHarvestable.HarvestSound  = RPGMakerGUI.AudioClipSelector("Harvesting Sound:", selectedHarvestable.HarvestSound, ref selectedHarvestable.HarvestingSoundPath);
                selectedHarvestable.TimeToHarvest = RPGMakerGUI.FloatField("Time to harvest:", selectedHarvestable.TimeToHarvest);
                if (RPGMakerGUI.Toggle("Require Level To Harvest:", ref selectedHarvestable.RequireLevel))
                {
                    selectedHarvestable.LevelRequired = RPGMakerGUI.IntField("- Required Level", selectedHarvestable.LevelRequired);
                }

                if (RPGMakerGUI.Toggle("Require Trait Level To Harvest:", ref selectedHarvestable.RequireTraitLevel))
                {
                    RPGMakerGUI.PopupID <Rm_TraitDefintion>("- Trait", ref selectedHarvestable.RequiredTraitID);
                    selectedHarvestable.TraitLevelRequired = RPGMakerGUI.IntField("- Required Trait Level", selectedHarvestable.TraitLevelRequired);
                }



                Rme_Main_General.ProgressionGain(true, selectedHarvestable.ProgressionGain);

                if (RPGMakerGUI.Foldout(ref showHarvestAnims, "Animations"))
                {
                    foreach (var classHarvestAnim in selectedHarvestable.ClassHarvestingAnims)
                    {
                        var classInfo = RPG.Player.GetCharacterDefinition(classHarvestAnim.ClassID);
                        var className = classInfo.Name;
                        if (classInfo.AnimationType == RPGAnimationType.Legacy)
                        {
                            classHarvestAnim.LegacyAnim = RPGMakerGUI.TextField(className + " Animation:", classHarvestAnim.LegacyAnim);
                        }
                        else
                        {
                            GUILayout.BeginHorizontal();
                            classHarvestAnim.AnimNumber = RPGMakerGUI.IntField(className + "Anim AnimNumber:", classHarvestAnim.AnimNumber);
                            GUILayout.EndHorizontal();
                        }
                    }

                    RPGMakerGUI.EndFoldout();
                }
            }
            else
            {
                EditorGUILayout.HelpBox("Add or select a new field to customise harvestable objects.", MessageType.Info);
            }
            GUILayout.EndScrollView();
            GUILayout.EndArea();
        }
예제 #19
0
        public static void GlobalPlaylist(Rect fullArea, Rect leftArea, Rect mainArea)
        {
            GUI.Box(fullArea, "", "backgroundBox");
            GUILayout.BeginArea(fullArea);
            playlistScrollPos = GUILayout.BeginScrollView(playlistScrollPos);
            RPGMakerGUI.Title("Global Music Playlist");
            RPGMakerGUI.SubTitle("Audio Options");
            Audio.PlayThroughSceneSwitch = RPGMakerGUI.Toggle("Persist Through Scenes?", Audio.PlayThroughSceneSwitch,
                                                              GUILayout.Width(300));

            Audio.LoadAllAudioOnLoad = RPGMakerGUI.Toggle("Load All Audio On Load?", Audio.LoadAllAudioOnLoad, GUILayout.Width(300));
            Audio.FadeOutMusic       = RPGMakerGUI.Toggle("Fade Out Tracks?", Audio.FadeOutMusic, GUILayout.Width(300));
            Audio.FadeOutTime        = RPGMakerGUI.FloatField("Fade Out Time:", Audio.FadeOutTime, 1, GUILayout.Width(300));
            Audio.FadeInMusic        = RPGMakerGUI.Toggle("Fade In Tracks?", Audio.FadeInMusic, GUILayout.Width(300));
            Audio.FadeInTime         = RPGMakerGUI.FloatField("Fade In Time:", Audio.FadeInTime, 1, GUILayout.Width(300));
            RPGMakerGUI.Toggle("Shuffle Playlist?", ref Audio.ShufflePlaylist, GUILayout.Width(300));
            var result = RPGMakerGUI.FoldoutToolBar(ref showPlaylist, "Global Playlist", new[] { "+ Music" });

            if (showPlaylist)
            {
                if (result == 0)
                {
                    Audio.GlobalPlaylist.Add(new AudioContainer());
                }
                GUILayout.Space(5);
                for (int index = 0; index < Audio.GlobalPlaylist.Count; index++)
                {
                    var music = Audio.GlobalPlaylist[index];
                    GUILayout.BeginHorizontal(GUILayout.Height(30));
                    GUILayout.Space(5);

                    music.Audio = RPGMakerGUI.AudioClipSelector("Music File:", music.Audio, ref music.AudioPath);

                    if (GUILayout.Button(RPGMakerGUI.DelIcon, "genericButton", GUILayout.Width(25), GUILayout.Height(25)))
                    {
                        Audio.GlobalPlaylist.Remove(music);
                        index--;
                    }
                    GUILayout.Space(5);
                    GUILayout.EndHorizontal();
                    GUILayout.Space(5);
                }

                if (Audio.GlobalPlaylist.Count == 0)
                {
                    EditorGUILayout.HelpBox("Click +Music to add bg music to be played when scene music is not found.", MessageType.Info);
                }
                RPGMakerGUI.EndFoldout();
            }

            if (RPGMakerGUI.Toggle("Unique scene music?", ref Audio.PlayUniqueMusicForScenes))
            {
                var battleResult = RPGMakerGUI.FoldoutToolBar(ref showScenePlaylists, "Scene Playlists", new[] { "+ Scene" });
                if (showScenePlaylists)
                {
                    if (battleResult == 0)
                    {
                        Audio.ScenePlaylists.Add(new SceneMusic());
                    }
                    GUILayout.Space(5);
                    for (int index = 0; index < Audio.ScenePlaylists.Count; index++)
                    {
                        var sceneMusic = Audio.ScenePlaylists[index];
                        GUILayout.BeginHorizontal(GUILayout.Height(30));
                        GUILayout.Space(5);

                        sceneMusic.Music.Audio = RPGMakerGUI.AudioClipSelector("Music File:", sceneMusic.Music.Audio, ref sceneMusic.Music.AudioPath);
                        sceneMusic.SceneName   = RPGMakerGUI.SceneSelector("Scene:", ref sceneMusic.SceneName);

                        if (GUILayout.Button(RPGMakerGUI.DelIcon, "genericButton", GUILayout.Width(25), GUILayout.Height(25)))
                        {
                            Audio.ScenePlaylists.Remove(sceneMusic);
                            index--;
                        }
                        GUILayout.Space(5);
                        GUILayout.EndHorizontal();
                        GUILayout.Space(5);
                    }

                    if (Audio.ScenePlaylists.Count == 0)
                    {
                        EditorGUILayout.HelpBox("Click +Music to add music to be played during battles.", MessageType.Info);
                    }
                    RPGMakerGUI.EndFoldout();
                }
            }

            if (RPGMakerGUI.Toggle("Unique battle music?", ref Audio.PlayUniqueMusicForBattles))
            {
                var battleResult = RPGMakerGUI.FoldoutToolBar(ref showBattlePlaylist, "Battle Playlist", new[] { "+ Music" });
                if (showBattlePlaylist)
                {
                    if (battleResult == 0)
                    {
                        Audio.BattlePlaylist.Add(new AudioContainer());
                    }
                    GUILayout.Space(5);
                    for (int index = 0; index < Audio.BattlePlaylist.Count; index++)
                    {
                        var music = Audio.BattlePlaylist[index];
                        GUILayout.BeginHorizontal(GUILayout.Height(30));
                        GUILayout.Space(5);

                        music.Audio = RPGMakerGUI.AudioClipSelector("Music File:", music.Audio, ref music.AudioPath);

                        if (GUILayout.Button(RPGMakerGUI.DelIcon, "genericButton", GUILayout.Width(25), GUILayout.Height(25)))
                        {
                            Audio.BattlePlaylist.Remove(music);
                            index--;
                        }
                        GUILayout.Space(5);
                        GUILayout.EndHorizontal();
                        GUILayout.Space(5);
                    }

                    if (Audio.BattlePlaylist.Count == 0)
                    {
                        EditorGUILayout.HelpBox("Click +Music to add music to be played during battles.", MessageType.Info);
                    }
                    RPGMakerGUI.EndFoldout();
                }
            }

            if (RPGMakerGUI.Toggle("Unique music on Player Death?", ref Audio.PlayUniqueMusicForDeath))
            {
                Audio.DeathMusic.Audio = RPGMakerGUI.AudioClipSelector("- Music File:", Audio.DeathMusic.Audio, ref Audio.DeathMusic.AudioPath);
            }

            GUILayout.EndScrollView();
            GUILayout.EndArea();
        }
예제 #20
0
        public static void WorldMap(Rect fullArea, Rect leftArea, Rect mainArea)
        {
            leftAreaB   = new Rect(leftArea.xMax + 5, leftArea.y, leftArea.width, leftArea.height);
            mainAreaAlt = new Rect(leftAreaB.xMax + 5, leftArea.y, mainArea.width - (leftAreaB.width + 5),
                                   leftArea.height);

            GUI.Box(leftArea, "", "backgroundBox");
            GUI.Box(leftAreaB, "", "backgroundBox");
            GUI.Box(mainAreaAlt, "", "backgroundBox");



            GUILayout.BeginArea(PadRect(leftArea, 0, 0));
            RPGMakerGUI.ListArea(worldAreaList, ref selectedWorldArea, Rm_ListAreaType.WorldAreas, false, false);
            GUILayout.EndArea();

            GUILayout.BeginArea(leftAreaB);
            if (selectedWorldArea != null)
            {
                var rect = RPGMakerGUI.ListArea(selectedWorldArea.Locations, ref selectedWorldAreaLocation, Rm_ListAreaType.Location, false, false, Rme_ListButtonsToShow.AllExceptHelp, true, selectedWorldArea.ID);
            }
            GUILayout.EndArea();

            GUILayout.BeginArea(mainAreaAlt);
            worldAreaScrollPos = GUILayout.BeginScrollView(worldAreaScrollPos);
            RPGMakerGUI.Title("World Areas (Not Finished)");
            if (selectedWorldArea != null)
            {
                selectedWorldArea.Name = RPGMakerGUI.TextField("Name: ", selectedWorldArea.Name);
                selectedWorldArea.ImageContainer.Image = RPGMakerGUI.ImageSelector("Image:", selectedWorldArea.ImageContainer.Image, ref selectedWorldArea.ImageContainer.ImagePath);
                if (GUILayout.Button("Open Interaction Node Tree", "genericButton", GUILayout.MaxHeight(30)))
                {
                    var trees        = Rm_RPGHandler.Instance.Nodes.WorldMapNodeBank.NodeTrees;
                    var existingTree = trees.FirstOrDefault(t => t.ID == selectedWorldArea.ID);
                    if (existingTree == null)
                    {
                        existingTree    = NodeWindow.GetNewTree(NodeTreeType.WorldMap);
                        existingTree.ID = selectedWorldArea.ID;

                        Debug.Log(existingTree.ID + ":::" + existingTree.Name);
                        existingTree.Name = selectedWorldArea.Name;
                        trees.Add(existingTree);
                    }

                    WorldMapNodeWindow.ShowWindow(selectedWorldArea.ID);
                }
            }

            if (selectedWorldArea != null)
            {
                RPGMakerGUI.SubTitle("Location Info:");
                if (selectedWorldAreaLocation != null)
                {
                    var loc = selectedWorldAreaLocation;
                    loc.Name = RPGMakerGUI.TextField("Name:", loc.Name);
                    loc.ImageContainer.Image = RPGMakerGUI.ImageSelector("Name:", loc.ImageContainer.Image, ref loc.ImageContainer.ImagePath);
                    loc.Description          = RPGMakerGUI.TextField("Description:", loc.Description);
                    RPGMakerGUI.SceneSelector("Scene:", ref loc.SceneName);
                    if (RPGMakerGUI.Toggle("Use Custom Spawn Location?", ref loc.UseCustomLocation))
                    {
                        loc.CustomSpawnLocation = EditorGUILayout.Vector3Field("Location:", loc.CustomSpawnLocation);
                    }
                }
                else
                {
                    EditorGUILayout.HelpBox("Select a location in the world area to begin editing it.", MessageType.Info);
                }
            }
            else
            {
                EditorGUILayout.HelpBox("Add or select a new field to customise world areas.", MessageType.Info);
            }
            GUILayout.EndScrollView();
            GUILayout.EndArea();
        }
        public static void Vitals(Rect fullArea, Rect leftArea, Rect mainArea)
        {
            var list = Rm_RPGHandler.Instance.ASVT.VitalDefinitions;

            GUI.Box(leftArea, "", "backgroundBox");
            GUI.Box(mainArea, "", "backgroundBoxMain");

            GUILayout.BeginArea(PadRect(leftArea, 0, 0));
            RPGMakerGUI.ListArea(list, ref selectedVitalInfo, Rm_ListAreaType.Vitals, false, true);
            GUILayout.EndArea();


            GUILayout.BeginArea(mainArea);
            RPGMakerGUI.Title("Vitals");
            if (selectedVitalInfo != null)
            {
                GUILayout.BeginVertical(GUILayout.ExpandWidth(true));

                selectedVitalInfo.Name         = RPGMakerGUI.TextField("Name: ", selectedVitalInfo.Name);
                selectedVitalInfo.Description  = RPGMakerGUI.TextField("Description: ", selectedVitalInfo.Description);
                selectedVitalInfo.DefaultValue = RPGMakerGUI.IntField("Default Value: ", selectedVitalInfo.DefaultValue);
                selectedVitalInfo.Color        = (Rm_UnityColors)RPGMakerGUI.EnumPopup("Color: ", selectedVitalInfo.Color);

                GUI.enabled = !selectedVitalInfo.IsHealth;
                var oldHealth = selectedVitalInfo.IsHealth;
                selectedVitalInfo.IsHealth = RPGMakerGUI.Toggle("Is Health Vital? ", selectedVitalInfo.IsHealth);
                GUI.enabled = true;

                if (oldHealth != selectedVitalInfo.IsHealth)
                {
                    ASVT.VitalDefinitions.Where(v => v.IsHealth && v.ID != selectedVitalInfo.ID).ToList()
                    .ForEach(vit => vit.IsHealth = false);
                }

                selectedVitalInfo.HasUpperLimit = RPGMakerGUI.Toggle("Has Max Value?",
                                                                     selectedVitalInfo.HasUpperLimit);
                if (selectedVitalInfo.HasUpperLimit)
                {
                    selectedVitalInfo.UpperLimit = RPGMakerGUI.IntField("Max Value?", selectedVitalInfo.UpperLimit);
                }

                if (!selectedVitalInfo.IsHealth)
                {
                    RPGMakerGUI.Toggle("Always Starts At Zero?", ref selectedVitalInfo.AlwaysStartsAtZero);
                }
                else
                {
                    selectedVitalInfo.AlwaysStartsAtZero = false;
                }

                selectedVitalInfo.BaseRegenPercentValue = RPGMakerGUI.FloatField("Base Regen Percent:", selectedVitalInfo.BaseRegenPercentValue);
                RPGMakerGUI.Toggle("Also Regen While In Combat?", ref selectedVitalInfo.RegenWhileInCombat);

                /*
                 *       public bool ReduceHealthIfZero;
                 * public float ReductionIntervalSeconds;
                 * public bool ReduceByFixedAmount;
                 * public int ReductionFixedAmount;
                 * public float ReductionPercentageAmount;*/

                if (!selectedVitalInfo.IsHealth && RPGMakerGUI.Toggle("Reduce Health Vital At Zero?", ref selectedVitalInfo.ReduceHealthIfZero))
                {
                    selectedVitalInfo.ReductionIntervalSeconds = RPGMakerGUI.FloatField("Reduce every X seconds:", selectedVitalInfo.ReductionIntervalSeconds, 1);

                    if (RPGMakerGUI.Toggle("Reduce By Fixed Amount?", 1, ref selectedVitalInfo.ReduceByFixedAmount))
                    {
                        selectedVitalInfo.ReductionFixedAmount = RPGMakerGUI.IntField("Reduce by X:", selectedVitalInfo.ReductionFixedAmount, 1);
                    }
                    else
                    {
                        GUILayout.BeginHorizontal();
                        selectedVitalInfo.ReductionPercentageAmount = RPGMakerGUI.FloatField("Reduce by X percent of Max HP:", selectedVitalInfo.ReductionPercentageAmount, 1);
                        RPGMakerGUI.Label(selectedVitalInfo.ReductionPercentageAmount.ToString("#0.##%"));
                        GUILayout.EndHorizontal();
                    }
                }

                selectedVitalInfo.Image = RPGMakerGUI.ImageSelector("Image:", selectedVitalInfo.Image, ref selectedVitalInfo.ImagePath, true);

                GUILayout.EndVertical();
            }
            else
            {
                EditorGUILayout.HelpBox("Add or select a new field to customise vitals.", MessageType.Info);
            }
            GUILayout.EndArea();
        }