using Godot; using Nocturnis.DataStructures.Data; using Nocturnis.DataStructures.DataTypes; using Nocturnis.GlobalManagement.Constants; using Nocturnis.GlobalManagement.Providers; using Skeleton.DataStructure; namespace Nocturnis.DataStructures; public class DataCache : CacheItem { public new static DataCache Null => new (x => (null, DataTypeConstant.BaseDataTypes.Null)); public DataCache(Func rec) { Value = new DataVariable(); ProxyCalculator = c => (rec(c).Data, rec(c).Type); } public DataCache(Func rec) { Value = new DataVariable(); ProxyCalculator = rec; } private new Func ProxyCalculator { get; set; } public override DataVariable Get { get { if (Expired) { (object val, DataType type) = ProxyCalculator(this); Value!.Type.Assign(type); Value.Data = val; } return Value; } } public void UpdateCalculation(Func rec) { Expire(); foreach (CacheItem item in Dependencies) item.References.Remove(this); Dependencies = new HashSet(); ProxyCalculator = rec; } }