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(); }
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(); }