コード例 #1
0
        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();
        }
コード例 #2
0
        private static void QuestDetails(Quest quest, bool inQuestChain)
        {
            if (RPGMakerGUI.Foldout(ref showSelectedQuestDetails, "Selected Quest - Main Details"))
            {
                GUILayout.BeginHorizontal();
                GUILayout.BeginVertical(GUILayout.MaxWidth(85));
                quest.Image.Image = RPGMakerGUI.ImageSelector("", quest.Image.Image, ref quest.Image.ImagePath);

                GUILayout.EndVertical();
                GUILayout.BeginVertical(GUILayout.ExpandWidth(true));
                quest.Name          = RPGMakerGUI.TextField("Name: ", quest.Name);
                quest.Description   = RPGMakerGUI.TextArea("Description:", quest.Description);
                quest.ConditionMode = (QuestConditionMode)RPGMakerGUI.EnumPopup("Condition Mode:", quest.ConditionMode);
                if (GUILayout.Button("Open Dialog/Event On Accept", "genericButton", GUILayout.MaxHeight(30)))
                {
                    var trees        = Rm_RPGHandler.Instance.Nodes.DialogNodeBank.NodeTrees;
                    var existingTree = trees.FirstOrDefault(t => t.ID == quest.DialogNodeTreeID);
                    if (existingTree == null)
                    {
                        existingTree      = NodeWindow.GetNewTree(NodeTreeType.Dialog);
                        existingTree.ID   = quest.ID;
                        existingTree.Name = quest.Name;
                        trees.Add(existingTree);
                    }

                    DialogNodeWindow.ShowWindow(quest.ID);
                    quest.DialogNodeTreeID = existingTree.ID;
                }

                if (GUILayout.Button("Open Dialog/Event On Complete", "genericButton", GUILayout.MaxHeight(30)))
                {
                    var trees        = Rm_RPGHandler.Instance.Nodes.DialogNodeBank.NodeTrees;
                    var existingTree = trees.FirstOrDefault(t => t.ID == quest.CompletedDialogNodeTreeID);
                    if (existingTree == null)
                    {
                        existingTree      = NodeWindow.GetNewTree(NodeTreeType.Dialog);
                        existingTree.ID   = "complete_" + quest.ID;
                        existingTree.Name = "Completed " + quest.Name;
                        trees.Add(existingTree);
                    }

                    DialogNodeWindow.ShowWindow(existingTree.ID);
                    quest.CompletedDialogNodeTreeID = existingTree.ID;
                }

                GUILayout.Space(5);
                RPGMakerGUI.Toggle("Player Keeps Quest Items?", ref quest.PlayerKeepsQuestItems);
                RPGMakerGUI.Toggle("Is Repeatable?", ref quest.Repeatable);
                RPGMakerGUI.Toggle("Can Abandon?", ref quest.CanAbandon);
                if (RPGMakerGUI.Toggle("Has Time Limit?", ref quest.HasTimeLimit))
                {
                    quest.TimeLimit = RPGMakerGUI.FloatField("- Time Limit:", quest.TimeLimit);
                }
                if (RPGMakerGUI.Toggle("Run Event On Accept?", ref quest.RunEventOnAccept))
                {
                    RPGMakerGUI.PopupID <NodeChain>("- Event:", ref quest.EventOnAcceptID);
                }
                if (RPGMakerGUI.Toggle("Run Event On Completion?", ref quest.RunEventOnComplete))
                {
                    RPGMakerGUI.PopupID <NodeChain>("- Event:", ref quest.EventOnCompletionId);
                }
                if (RPGMakerGUI.Toggle("Run Event On Cancel?", ref quest.RunEventOnCancel))
                {
                    RPGMakerGUI.PopupID <NodeChain>("- Event:", ref quest.EventOnCancelId);
                }


                GUILayout.Space(5);
                GUILayout.EndVertical();
                GUILayout.EndHorizontal();

                RPGMakerGUI.EndFoldout();
            }

            if (RPGMakerGUI.Foldout(ref showSelectedQuestReq, "Requirements"))
            {
                List <Quest> availableReqQuests = new List <Quest>();
                if (inQuestChain)
                {
                    availableReqQuests = Rm_RPGHandler.Instance.Repositories.Quests.AllQuests.Where(q => selectedQuestChain.QuestsInChain.FirstOrDefault(qu => qu.ID == q.ID) == null).ToList();
                }
                else
                {
                    availableReqQuests = Rm_RPGHandler.Instance.Repositories.Quests.AllQuests;
                }


                RPGMakerGUI.FoldoutList(ref showReqAcceptedQuests, "Required Completed Quests", quest.Requirements.QuestCompletedIDs, availableReqQuests, "+Quest",
                                        "", "Click +Quest to add a requirement for a completed quest.");

                RPGMakerGUI.FoldoutList(ref showCustomVarReqSetters, "Custom Var Requirements", quest.Requirements.CustomRequirements, Rm_RPGHandler.Instance.DefinedVariables.Vars, "+VariableReq",
                                        "", "Click +VariableReq to add a varaible requirement", "VariableID", "Name", "ID", "Name", false, "Value");

                RPGMakerGUI.SubTitle("More Requirements");

                if (RPGMakerGUI.Toggle("Require Player Level:", ref quest.Requirements.RequireLevel))
                {
                    quest.Requirements.LevelRequired = RPGMakerGUI.IntField("- Required Level:", quest.Requirements.LevelRequired);
                }

                if (RPGMakerGUI.Toggle("Require Player Class:", ref quest.Requirements.RequireClass))
                {
                    RPGMakerGUI.PopupID <Rm_ClassNameDefinition>("- Class ID:", ref quest.Requirements.RequiredClassID);
                }

                RPGMakerGUI.Toggle("Require Reputation Above Amount :", ref quest.Requirements.ReqRepAboveValue);
                if (quest.Requirements.ReqRepAboveValue)
                {
                    quest.Requirements.ReqRepBelowValue = false;
                }
                RPGMakerGUI.Toggle("Require Reputation Below Amount :", ref quest.Requirements.ReqRepBelowValue);
                if (quest.Requirements.ReqRepBelowValue)
                {
                    quest.Requirements.ReqRepAboveValue = false;
                }

                if (quest.Requirements.ReqRepAboveValue || quest.Requirements.ReqRepBelowValue)
                {
                    RPGMakerGUI.PopupID <ReputationDefinition>("- Reputation Faction:", ref quest.Requirements.ReputationFactionID);
                    var prefix = quest.Requirements.ReqRepAboveValue ? "Above " : "Below ";
                    quest.Requirements.ReputationValue = RPGMakerGUI.IntField("- " + prefix + "Amount:", quest.Requirements.ReputationValue);
                }

                if (RPGMakerGUI.Toggle("Require Trait Level?", ref quest.Requirements.RequireTraitLevel))
                {
                    RPGMakerGUI.PopupID <Rm_TraitDefintion>("- Trait:", ref quest.Requirements.RequiredTraitID);
                    quest.Requirements.TraitLevel = RPGMakerGUI.IntField("- Level:", quest.Requirements.TraitLevel);
                }
                if (RPGMakerGUI.Toggle("Require Learnt Skill?", ref quest.Requirements.RequireLearntSkill))
                {
                    RPGMakerGUI.PopupID <Skill>("- Skill:", ref quest.Requirements.LearntSkillID);
                }

                RPGMakerGUI.EndFoldout();
            }


            var result = RPGMakerGUI.FoldoutToolBar(ref showSelectedQuestMainConditions, "Quest Conditions", "+Condition", false, false);

            if (showSelectedQuestMainConditions)
            {
                if (quest.Conditions.Count == 0)
                {
                    EditorGUILayout.HelpBox("Click +Condition to add a new quest condition.", MessageType.Info);
                }

                for (int index = 0; index < quest.Conditions.Count; index++)
                {
                    GUILayout.BeginVertical("foldoutBox");

                    GUILayout.BeginHorizontal();
                    GUILayout.FlexibleSpace();

                    if (index > 0 && GUILayout.Button("Move Up", "genericButton"))
                    {
                        GUI.FocusControl("");
                        var curCondition  = quest.Conditions[index];
                        var prevCondition = quest.Conditions[index - 1];

                        quest.Conditions[index - 1] = curCondition;
                        quest.Conditions[index]     = prevCondition;

                        return;
                    }

                    if (index < quest.Conditions.Count - 1 && GUILayout.Button("Move Down", "genericButton"))
                    {
                        GUI.FocusControl("");
                        var curCondition  = quest.Conditions[index];
                        var nextCondition = quest.Conditions[index + 1];

                        quest.Conditions[index + 1] = curCondition;
                        quest.Conditions[index]     = nextCondition;

                        return;
                    }

                    GUILayout.EndHorizontal();

                    quest.Conditions[index] = ShowConditionInfo(quest.Conditions[index]);

                    GUILayout.BeginHorizontal();
                    GUILayout.FlexibleSpace();
                    if (GUILayout.Button("Delete", "genericButton", GUILayout.Height(25), GUILayout.Width(100)))
                    {
                        GUI.FocusControl("");
                        quest.Conditions.RemoveAt(index);
                        index--;
                    }
                    GUILayout.FlexibleSpace();
                    GUILayout.EndHorizontal();

                    GUILayout.EndVertical();
                }


                if (result == 0)
                {
                    quest.Conditions.Add(new KillCondition());
                }

                RPGMakerGUI.EndFoldout();
            }

            if (RPGMakerGUI.Foldout(ref showFinalCondition, "Final Condition"))
            {
                if (RPGMakerGUI.Toggle("Enable Final Condition?", ref quest.HasFinalCondition))
                {
                    quest.FinalCondition = ShowConditionInfo(quest.FinalCondition);
                }
                RPGMakerGUI.EndFoldout();
            }

            if (RPGMakerGUI.Foldout(ref showBonusCondition, "Bonus Condition"))
            {
                if (RPGMakerGUI.Toggle("Enable Bonus Condition?", ref quest.HasBonusCondition))
                {
                    quest.BonusCondition = ShowConditionInfo(quest.BonusCondition);
                    if (RPGMakerGUI.Toggle("- Has Time Limit", ref quest.BonusHasTimeLimit))
                    {
                        quest.BonusTimeLimit = RPGMakerGUI.FloatField("  - Time Limit:", quest.BonusTimeLimit);
                    }
                }

                RPGMakerGUI.EndFoldout();
            }



            if (RPGMakerGUI.Foldout(ref showQuestRewards, "Rewards"))
            {
                ShowQuestRewardInfo(ref showQuestMainRewards, "Item Rewards", quest.Rewards);
                RPGMakerGUI.EndFoldout();
            }

            if (quest.HasBonusCondition)
            {
                if (RPGMakerGUI.Foldout(ref showBonusRewards, "Bonus Rewards"))
                {
                    ShowQuestRewardInfo(ref showQuestBonusRewards, "Bonus Condition Reward", quest.BonusRewards);
                    RPGMakerGUI.EndFoldout();
                }
            }

            RPGMakerGUI.FoldoutList(ref showCustomVarSetters, "Set Custom Vars on Completion", quest.SetCustomVariablesOnCompletion, Rm_RPGHandler.Instance.DefinedVariables.Vars, "+VariableSetter",
                                    "", "Click +VariableSetter to add a varaible setter", "VariableID", "Name", "ID", "Name");
        }