using System.Collections.Generic; using UnityEngine; namespace CleverCrow.Fluid.StatsSystem { [CreateAssetMenu(fileName = "StatDefinition", menuName = "Fluid/Stats/Definitions/Default")] public class StatDefinition : StatDefinitionBase { private const int MIN_SORT_INDEX = 0; private const int MAX_SORT_INDEX = 1000; [Tooltip("User friendly lookup ID")] [SerializeField] private string _id; public string Id => _id; [Header("Value")] [SerializeField] private StatValueSelector _value = new StatValueSelector(); public StatValueSelector Value => _value; [Tooltip("Each time a modifier is set, it will be rounded to the nearest whole number. Note that" + " the corresponding operator in Settings must have rounding enabled in order for this to work." + " Does not round the total result")] [SerializeField] private bool _roundModifiers = true; public bool RoundModifiers => _roundModifiers; [Tooltip("Calculated total with modifiers will always be a rounded number")] [SerializeField] private bool _roundResult; public bool RoundResult => _roundResult; [Header("Display")] [Tooltip("User friendly display name")] [SerializeField] string _displayName = "Untitled"; public string DisplayName => _displayName; [Tooltip("Hidden stats will be ignored for display in interfaces")] [SerializeField] bool _hidden; public bool Hidden => _hidden; [Tooltip("If a float value, should it be displayed as a percentile?")] [SerializeField] bool _percentile; [Tooltip("Priority when displayed in the inspector and menus. Higher number equals more likely to be above the fold")] [SerializeField] [Range(MIN_SORT_INDEX, MAX_SORT_INDEX)] int _sortIndex = 500; public int SortIndex => _sortIndex; [Tooltip("Descriptive text for this stat")] [TextArea] [SerializeField] string _description; public string Description => _description; public bool IsPercentile => _value.IsFloat && _percentile; /// /// Used by collections to recursively search through definitions quickly /// /// /// public override List GetDefinitions (HashSet visited) { if (visited == null || visited.Contains(this)) { if (Application.isPlaying) { Debug.LogWarningFormat("Duplicate StatDefinition detected {0}", name); } return new List(); } visited.Add(this); return new List { this }; } } }