using System.Collections; using System.Collections.Generic; using UnityEngine; using static SpellSO; #if UNITY_EDITOR using UnityEditor; #endif [CreateAssetMenu(fileName = "New Weapon", menuName = "Config/Items/New Weapon")] public class WeaponSO : ItemSO { public enum Type { Sharp, Blunt, Ranged, Magic, Extended, Firearm, None } public List<Dice.DiceR> Damage; public int ModifierChance; public bool Is_Ranged; public bool Two_Handed; public Element Weapon_Element = Element.Normal; public Type Weapon_Type = Type.None; public bool AddSpells; public bool AddAbilities; public bool AddModifiers; public List<SpellSO> SpellsToAdd; public List<AbilitySO> AbilitiesToAdd; public List<ModifierSO> ModifiersToAdd; } #if UNITY_EDITOR [CustomEditor(typeof(WeaponSO))] public class WeaponSOEditor : ItemSOEditor { private WeaponSO container; private void OnEnable() { container = target as WeaponSO; } public override void OnInspectorGUI() { serializedObject.Update(); EditorGUILayout.LabelField("General Properties", EditorStyles.boldLabel); container.ID = EditorGUILayout.IntField("ID", container.ID); EditorGUILayout.PropertyField(serializedObject.FindProperty("Name")); EditorGUILayout.PropertyField(serializedObject.FindProperty("Description")); EditorGUILayout.PropertyField(serializedObject.FindProperty("HelperEffects")); EditorGUILayout.PropertyField(serializedObject.FindProperty("Item_Sprite")); EditorGUILayout.Space(10); EditorGUILayout.LabelField("Weapon Properties", EditorStyles.boldLabel); EditorGUILayout.PropertyField(serializedObject.FindProperty("Damage")); EditorGUILayout.PropertyField(serializedObject.FindProperty("ModifierChance")); EditorGUILayout.PropertyField(serializedObject.FindProperty("Is_Ranged")); EditorGUILayout.PropertyField(serializedObject.FindProperty("Two_Handed")); EditorGUILayout.PropertyField(serializedObject.FindProperty("Weapon_Element")); EditorGUILayout.PropertyField(serializedObject.FindProperty("Weapon_Type")); EditorGUILayout.Space(10); EditorGUILayout.LabelField("Shop Properties", EditorStyles.boldLabel); container.Value = EditorGUILayout.IntField("Value", container.Value); container.Cost = EditorGUILayout.IntField("Cost", container.Cost); EditorGUILayout.Space(5); EditorGUILayout.PropertyField(serializedObject.FindProperty("Item_Rarity")); EditorGUILayout.PropertyField(serializedObject.FindProperty("CantBeSold")); EditorGUILayout.Space(10); EditorGUILayout.LabelField("Requirements", EditorStyles.boldLabel); EditorGUILayout.PropertyField(serializedObject.FindProperty("Has_Requirement")); if (container.Has_Requirement) { EditorGUILayout.PropertyField(serializedObject.FindProperty("Requirements")); if (container.Requirements.Contains(ItemSO.PossReqs.Stats)) { EditorGUILayout.Space(10); EditorGUILayout.LabelField("Stats Requirements", EditorStyles.boldLabel); container.Number_Of_Stat_Reqs = EditorGUILayout.IntField("Number of Stat Requirements", container.Number_Of_Stat_Reqs); container.Number_Of_Stat_Reqs = Mathf.Clamp(container.Number_Of_Stat_Reqs, 0, MaxPrimeStatReqs); if (container.Stats_List.Count < container.Number_Of_Stat_Reqs) { for (int i = 0; i < container.Number_Of_Stat_Reqs; i++) container.Stats_List.Add(new Vector3Int(0, 0, 0)); } else if (container.Stats_List.Count > container.Number_Of_Stat_Reqs) container.Stats_List.Remove(container.Stats_List[^1]); EditorGUILayout.PropertyField(serializedObject.FindProperty("Stats_List")); } if (container.Requirements.Contains(ItemSO.PossReqs.Sec_Stats)) { EditorGUILayout.Space(10); EditorGUILayout.LabelField("Sec Stats Requirements", EditorStyles.boldLabel); container.Number_Of_Sec_Stat_Reqs = EditorGUILayout.IntField("Number of Secondary Stat Requirements", container.Number_Of_Sec_Stat_Reqs); container.Number_Of_Sec_Stat_Reqs = Mathf.Clamp(container.Number_Of_Sec_Stat_Reqs, 0, MaxSecondaryStatReqs); if (container.Sec_Stats_List.Count < container.Number_Of_Sec_Stat_Reqs) { for (int i = 0; i < container.Number_Of_Sec_Stat_Reqs; i++) container.Sec_Stats_List.Add(new Vector3Int(0, 0, 0)); } else if (container.Sec_Stats_List.Count > container.Number_Of_Sec_Stat_Reqs) container.Sec_Stats_List.Remove(container.Sec_Stats_List[^1]); EditorGUILayout.PropertyField(serializedObject.FindProperty("Sec_Stats_List")); } if (container.Requirements.Contains(ItemSO.PossReqs.Item)) { EditorGUILayout.Space(10); EditorGUILayout.LabelField("Item Requirements", EditorStyles.boldLabel); container.Number_Of_Items = EditorGUILayout.IntField("Number of Items", container.Number_Of_Items); container.Number_Of_Items = Mathf.Clamp(container.Number_Of_Items, 0, MaxItemRequirement); if (container.Item_List.Count < container.Number_Of_Items) { for (int i = 0; i < container.Number_Of_Items; i++) container.Item_List.Add(""); } else if (container.Item_List.Count > container.Number_Of_Items && container.Number_Of_Items > 0) container.Item_List.Remove(container.Item_List[^1]); EditorGUILayout.PropertyField(serializedObject.FindProperty("Item_List")); } } EditorGUILayout.Space(15); EditorGUILayout.PropertyField(serializedObject.FindProperty("AddSpells")); if (container.AddSpells) EditorGUILayout.PropertyField(serializedObject.FindProperty("SpellsToAdd")); EditorGUILayout.PropertyField(serializedObject.FindProperty("AddAbilities")); if (container.AddAbilities) EditorGUILayout.PropertyField(serializedObject.FindProperty("AbilitiesToAdd")); EditorGUILayout.PropertyField(serializedObject.FindProperty("AddModifiers")); if (container.AddModifiers) EditorGUILayout.PropertyField(serializedObject.FindProperty("ModifiersToAdd")); serializedObject.ApplyModifiedProperties(); } } #endif