< Summary

Class:BaseVariableAsset[T]
Assembly:BaseVariable
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/DataStore/Variables/BaseVariableAsset.cs
Covered lines:12
Uncovered lines:6
Coverable lines:18
Total lines:78
Line coverage:66.6% (12 of 18)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Set(...)0%4.054085.71%
Get()0%110100%
implicit operator T(...)0%110100%
Equals(...)0%110100%
RaiseOnChange()0%6200%
OnEnable()0%110100%
CleanUp()0%6200%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/DataStore/Variables/BaseVariableAsset.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using UnityEngine;
 4
 5public abstract class BaseVariableAsset : ScriptableObject
 6{
 7#if UNITY_EDITOR
 8    protected abstract void RaiseOnChange();
 9
 10    [UnityEditor.CustomEditor(typeof(BaseVariableAsset), true)]
 11    public class BaseVariableAssetEditor : UnityEditor.Editor
 12    {
 13        public override void OnInspectorGUI()
 14        {
 15            DrawDefaultInspector();
 16            if (Application.isPlaying && GUILayout.Button("Raise OnChange"))
 17            {
 18                ((BaseVariableAsset)target).RaiseOnChange();
 19            }
 20        }
 21    }
 22#endif
 23}
 24
 25public class BaseVariableAsset<T> : BaseVariableAsset, IEquatable<T>
 26{
 27    public delegate void Change(T current, T previous);
 28
 29    public delegate void Same(T current);
 30
 31    public event Same OnSame;
 32    public event Change OnChange;
 33
 34    [SerializeField] protected T value;
 35
 36    public void Set(T newValue)
 37    {
 9428538        if (Equals(newValue))
 39        {
 6422740            OnSame?.Invoke(newValue);
 041            return;
 42        }
 43
 3005844        var previous = value;
 3005845        value = newValue;
 3005846        OnChange?.Invoke(value, previous);
 61447    }
 48
 89825749    public T Get() { return value; }
 50
 10176051    public static implicit operator T(BaseVariableAsset<T> value) => value.value;
 52
 53    public virtual bool Equals(T other)
 54    {
 55        //NOTE(Brian): According to benchmarks I made, this statement costs about twice than == operator for structs.
 56        //             However, its way more costly for primitives (tested only against float).
 57
 58        //             Left here only for fallback purposes. Optimally this method should be always overriden.
 6059        return EqualityComparer<T>.Default.Equals(value, other);
 60    }
 61
 62#if UNITY_EDITOR
 063    protected sealed override void RaiseOnChange() => OnChange?.Invoke(value, value);
 64
 65    private void OnEnable()
 66    {
 750067        Application.quitting -= CleanUp;
 750068        Application.quitting += CleanUp;
 750069    }
 70
 71    private void CleanUp()
 72    {
 073        Application.quitting -= CleanUp;
 074        if (UnityEditor.AssetDatabase.Contains(this)) //It could happen that the base variable has been created in runti
 075            Resources.UnloadAsset(this);
 076    }
 77#endif
 78}