using System.Collections; using System.Collections.Generic; using UnityEngine; #if UNITY_EDITOR using UnityEditor; #endif [CreateAssetMenu(fileName = "New Modifier", menuName = "Config/New Modifier")] public class ModifierSO : ScriptableObject { public enum Effect { Stat, HPRegen, ManaRegen, ArmorModifier, Accuracy, Crit, DamageModifier, DOT, Other } public enum Type { Buff, Debuff } public string Name; public Effect Modifier; public Type Mod_Type; public Sprite Mod_Sprite; public bool Is_Value; public bool Is_Percent; public bool Is_Dice; public int Value; public int FlagValue; public List<EntityStats.Stat> StatModified; [Range(0, 100)] public int Percent; public List<Dice.DiceR> Dice_Value; public List<Dice.DiceR> Length_Of_Effect; public int LengthOfEffectNoDice; [TextArea(3, 12)] public string Description; public bool ModifierAppliedAtEndOfEffect; public ModifierSO EndModifier; } #if UNITY_EDITOR [CustomEditor(typeof(ModifierSO))] public class ModifierSOEditor : Editor { private ModifierSO container; private void OnEnable() { container = target as ModifierSO; } public override void OnInspectorGUI() { serializedObject.Update(); EditorGUILayout.LabelField("Effect", EditorStyles.boldLabel); EditorGUILayout.Space(10); EditorGUILayout.PropertyField(serializedObject.FindProperty("Name")); EditorGUILayout.PropertyField(serializedObject.FindProperty("Description")); EditorGUILayout.PropertyField(serializedObject.FindProperty("Modifier")); EditorGUILayout.PropertyField(serializedObject.FindProperty("Mod_Type")); EditorGUILayout.PropertyField(serializedObject.FindProperty("Mod_Sprite")); EditorGUILayout.Space(15); if (container.Modifier is ModifierSO.Effect.Other) { container.FlagValue = EditorGUILayout.IntField("Flag Value", container.FlagValue); EditorGUILayout.Space(10); } EditorGUILayout.LabelField("Type of Value", EditorStyles.boldLabel); EditorGUILayout.Space(10); EditorGUILayout.PropertyField(serializedObject.FindProperty("Is_Value")); if (container.Is_Value) { container.Value = EditorGUILayout.IntField("Value", container.Value); if (container.Modifier is not ModifierSO.Effect.Accuracy && container.Modifier is not ModifierSO.Effect.ArmorModifier) EditorGUILayout.PropertyField(serializedObject.FindProperty("StatModified")); } EditorGUILayout.Space(20); EditorGUILayout.PropertyField(serializedObject.FindProperty("Is_Percent")); if (container.Is_Percent) container.Percent = EditorGUILayout.IntField("Percentage Value (0-100)", container.Percent); EditorGUILayout.Space(20); EditorGUILayout.PropertyField(serializedObject.FindProperty("Is_Dice")); if (container.Is_Dice) EditorGUILayout.PropertyField(serializedObject.FindProperty("Dice_Value")); EditorGUILayout.Space(20); EditorGUILayout.LabelField("Length Of Time For Modifier", EditorStyles.boldLabel); EditorGUILayout.Space(10); EditorGUILayout.PropertyField(serializedObject.FindProperty("Length_Of_Effect")); EditorGUILayout.PropertyField(serializedObject.FindProperty("LengthOfEffectNoDice")); EditorGUILayout.PropertyField(serializedObject.FindProperty("ModifierAppliedAtEndOfEffect")); if (container.ModifierAppliedAtEndOfEffect) EditorGUILayout.PropertyField(serializedObject.FindProperty("EndModifier")); serializedObject.ApplyModifiedProperties(); } } #endif