Пример #1
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();
        }
Пример #2
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();
        }
        public static void Main(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, 1, 1));

            if (classPrefabs == null)
            {
                classPrefabs = Resources.LoadAll <GameObject>("Prefabs/Classes");
            }

            try
            {
                //Get class prefabs in class prefab location
                foreach (var classPrefab in classPrefabs)
                {
                    var ifSelected = selectedClass == classPrefab ? "listItemSelected" : "listItem";
                    if (GUILayout.Button(classPrefab.name, ifSelected))
                    {
                        selectedClass = classPrefab;
                        Debug.Log("clicked class  " + selectedClass.name);
                    }
                }
            }
            catch (Exception e)
            {
                Debug.Log("Failed loading class for costume designer, reloading class prefabs");
                classPrefabs = Resources.LoadAll <GameObject>("Prefabs/Classes");
                GUILayout.EndArea();
                return;
            }


            GUILayout.FlexibleSpace();

            if (GUILayout.Button("- Reload Classes -", "listItem"))
            {
                classPrefabs = Resources.LoadAll <GameObject>("Prefabs/Classes");
            }

            GUILayout.EndArea();

            GUILayout.BeginArea(PadRect(leftAreaB, 1, 2));
            GUILayout.BeginHorizontal();

            GUILayout.Label("Filter:", GUILayout.Width(35));
            GUI.SetNextControlName("searchTerm");
            _searchTerm = GUILayout.TextField(_searchTerm, "nodeTextField");
            GUILayout.Space(1);
            GUILayout.EndHorizontal();
            if (Event.current.type == EventType.Repaint)
            {
                if (GUI.GetNameOfFocusedControl() == "searchTerm" && _searchTerm == _searchTermPlaceholder)
                {
                    _searchTerm = "";
                }
            }

            hierarchyScrollView = GUILayout.BeginScrollView(hierarchyScrollView);
            if (selectedClass != null)
            {
                var children = selectedClass.GetAllChildren <Transform>();
                if (_searchTerm != _searchTermPlaceholder)
                {
                    children = children.Where(n => n.name.ToLower().Contains(_searchTerm.ToLower())).ToArray();
                }
                foreach (var child in children)
                {
                    var ifSelected = selectedChildTransform == child ? "listItemSelected" : "listItem";
                    if (GUILayout.Button(child.name, ifSelected))
                    {
                        selectedChildTransform = child;
                    }
                }
            }
            else
            {
                EditorGUILayout.HelpBox("Pick a class to choose a child transform to enable/disable depending on an equipped item.", MessageType.Info);
            }
            GUILayout.EndScrollView();
            GUILayout.EndArea();

            GUILayout.BeginArea(mainAreaAlt);
            if (selectedChildTransform != null)
            {
                var classDef = Rm_RPGHandler.Instance.Player.CharacterDefinitions.FirstOrDefault(c => c.Name == selectedClass.name);
                if (classDef != null)
                {
                    var result = RPGMakerGUI.FoldoutToolBar(ref showItems, "Items required to show", "+Item");
                    if (showItems)
                    {
                        var defs = classDef.EquipmentInfo.Definitions.Where(d => d.NameOfTransform == selectedChildTransform.name).ToList();

                        for (int i = 0; i < defs.Count; i++)
                        {
                            var dynamicDef = defs[i];
                            GUILayout.BeginHorizontal();
                            //RPGMakerGUI.PopupID<Item>("Item:", ref dynamicDef.RequiredEquippedItemId);
                            RPGMakerGUI.PopupID <Item>("Item:", ref dynamicDef.RequiredEquippedItemId, "ID", "Name", "CraftItemAndQuest");

                            if (RPGMakerGUI.DeleteButton(25))
                            {
                                classDef.EquipmentInfo.Definitions.Remove(dynamicDef);
                                i--;
                            }

                            GUILayout.EndHorizontal();
                            RPGMakerGUI.Toggle("Only In Weapon Slot?", ref dynamicDef.OnlyWeaponSlot);
                            if (!dynamicDef.OnlyWeaponSlot && RPGMakerGUI.Toggle("Only In Specific Slot?", ref dynamicDef.SpecificSlot))
                            {
                                RPGMakerGUI.PopupID <SlotDefinition>("Slot:", ref dynamicDef.SlotId);
                            }

                            GUILayout.Space(20);
                        }
                        foreach (var dynamicDef in defs)
                        {
                        }

                        if (result == 0)
                        {
                            classDef.EquipmentInfo.Definitions.Add(new DynamicEquipmentDefinition(selectedChildTransform.name));
                        }

                        if (!classDef.EquipmentInfo.Definitions.Any())
                        {
                            EditorGUILayout.HelpBox("Click +Item to add an item which will activate this transform", MessageType.Info);
                        }

                        RPGMakerGUI.EndFoldout();
                    }
                }
                else
                {
                    EditorGUILayout.HelpBox("This class does not exist in your class definitions. Rename the prefab in 'Resources/Prefabs/Classes' to be the same as your class.", MessageType.Error);
                }
            }
            else
            {
                EditorGUILayout.HelpBox("Pick a child transform to choose an item for it to depend on.", MessageType.Info);
            }
            GUILayout.EndArea();
        }