Encounter / Assets / Scripts / ScriptableObjects / ItemSO.cs
ItemSO.cs
Raw
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

#if UNITY_EDITOR
using UnityEditor;
#endif

[CreateAssetMenu(fileName = "New General Item", menuName = "Config/Items/New General Item")]
public class ItemSO : ScriptableObject
{
    public enum Rarity
    {
        Common,
        Uncommon,
        Rare,
        VeryRare,
        UltimateRare,
        Strange,
        Demonic,
        Godly,
        Legendary,
        Brainbusting,
        GameBreaking
    }
    public int ID;
    public string Name;
    public int Value;
    public int Cost;
    public Sprite Item_Sprite;
    [TextArea(3, 12)] public string Description;
    public List<string> HelperEffects;
    public Rarity Item_Rarity = Rarity.Common;
    public bool CantBeSold;
    public bool IsUniqueItem;

    public enum PossReqs
    {
        Stats,
        Sec_Stats,
        Item
    }
    public bool Has_Requirement;
    public List<PossReqs> Requirements;

    // Stats Fields
    public int Number_Of_Stat_Reqs;
    [Tooltip("0 - STR | 1 - INT | 2 - CON | 3 - DEX | 4 - CHA | 5 - WIS | 6 - LCK")]
    public List<Vector3Int> Stats_List;

    // Secondary Stat Fields
    public int Number_Of_Sec_Stat_Reqs;
    [Tooltip("0 - HP | 1 - MP | 2 - Armor")]
    public List<Vector3Int> Sec_Stats_List;

    // Item Fields
    public int Number_Of_Items;
    public List<string> Item_List;
}

#if UNITY_EDITOR
[CustomEditor(typeof(ItemSO), true)]
public class ItemSOEditor : Editor
{
    private ItemSO container;

    protected const int MaxPrimeStatReqs = 14;
    protected const int MaxSecondaryStatReqs = 6;
    protected const int MaxItemRequirement = 10;

    private void OnEnable()
    {
        container = target as ItemSO;
    }

    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("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.PropertyField(serializedObject.FindProperty("IsUniqueItem"));

        serializedObject.ApplyModifiedProperties();
    }
}
#endif