예제 #1
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();
        }
예제 #3
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 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();
        }
예제 #5
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();
        }
        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();
        }
        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();
        }
예제 #8
0
    void OnGUI()
    {
        try
        {
            GUI.skin = Resources.Load("RPGMakerAssets/EditorSkinRPGMaker") as GUISkin;

            GUILayout.BeginHorizontal();
            GUILayout.BeginVertical();

            foreach (var element in GUIElements)
            {
                if (element.Type == GUIType.Textfield)
                {
                    element.StringValue = GUILayout.TextField(element.StringValue, element.LayoutOptions);
                }

                if (element.Type == GUIType.EditorTextfield)
                {
                    element.StringValue = EditorGUILayout.TextField(element.EditorGUILabel, element.StringValue);
                }

                if (element.Type == GUIType.BeginHorizontal)
                {
                    GUILayout.BeginHorizontal();
                }
                if (element.Type == GUIType.EndHorizontal)
                {
                    GUILayout.EndHorizontal();
                }
                if (element.Type == GUIType.BeginVertical)
                {
                    GUILayout.BeginVertical();
                }
                if (element.Type == GUIType.EndVertical)
                {
                    GUILayout.EndVertical();
                }
            }
            GUILayout.EndVertical();

            GUILayout.BeginVertical(GUILayout.MaxWidth(180));
            var rect = RPGMakerGUI.ListArea(GUIElements, ref selectedGUIelement, Rm_ListAreaType.Vitals, true, true);
            var evt  = Event.current;
            if (evt.type == EventType.MouseDown)
            {
                var mousePos = evt.mousePosition;
                if (rect.Contains(mousePos))
                {
                    var menu = new GenericMenu();
                    foreach (var typeOf in addableElements)
                    {
                        menu.AddItem(new GUIContent(typeOf.ToString()), false, AddGUIElement(), typeOf);
                    }
                    menu.ShowAsContext();
                    evt.Use();
                }
            }
            if (selectedGUIelement != null)
            {
                RPGMakerGUI.SubTitle("GUI Element Settings");
                if (selectedGUIelement.Type == GUIType.Textfield)
                {
                    selectedGUIelement.MaxWidth = RPGMakerGUI.IntField("Max Width", selectedGUIelement.MaxWidth);
                }
                if (selectedGUIelement.Type == GUIType.EditorTextfield)
                {
                    selectedGUIelement.EditorGUILabel = RPGMakerGUI.TextField("Prefix Label:", selectedGUIelement.EditorGUILabel);
                }

                if (GUILayout.Button("Save(tesT)"))
                {
                    var b = GeneralMethods.CopyObject(selectedGUIelement);
                }
            }
            GUILayout.FlexibleSpace();
            GUILayout.EndVertical();



            GUILayout.EndHorizontal();
        }
        catch (Exception e)
        {
            Debug.Log(e.StackTrace);
        }
    }
예제 #9
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();
        }
예제 #10
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();
        }
예제 #11
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();
        }
예제 #12
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();
        }
        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();
        }