Skip to content

Commit

Permalink
prevent null ref exception for fields that isn't serializable
Browse files Browse the repository at this point in the history
  • Loading branch information
Eddio0141 committed Sep 13, 2024
1 parent 2cf12e7 commit 88d6329
Showing 1 changed file with 1 addition and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,38 +19,26 @@ private readonly struct StoredState
public readonly ScriptableObject ScriptableObject;

private readonly FieldData[] _savedFields;
private readonly FieldInfo[] _resetFields;

private readonly ILogger _logger;
private readonly ITryFreeMalloc _freeMalloc;

public StoredState(ScriptableObject scriptableObject, ILogger logger, ITryFreeMalloc freeMalloc)
{
ScriptableObject = scriptableObject;
_logger = logger;
_freeMalloc = freeMalloc;

// save
var fields = scriptableObject.GetType().GetFieldsRecursive(AccessTools.all)
.Where(x => !x.IsStatic && !x.IsLiteral && x.DeclaringType != typeof(Object));

var resetFields = new List<FieldInfo>();
var savedFields = new List<FieldData>();

foreach (var field in fields)
{
if (field.IsFieldUnitySerializable())
{
savedFields.Add(new(field, scriptableObject, logger, freeMalloc));
continue;
}

StaticLogger.Trace("Field is not unity serializable, resetting on load");
resetFields.Add(field);
savedFields.Add(new(field, scriptableObject, logger, freeMalloc));
}

_savedFields = savedFields.ToArray();
_resetFields = resetFields.ToArray();
}

public void Load()
Expand All @@ -65,12 +53,6 @@ public void Load()
{
savedField.Load();
}

foreach (var resetField in _resetFields)
{
_freeMalloc?.TryFree(ScriptableObject, resetField);
resetField.SetValue(ScriptableObject, null);
}
}
}

Expand Down

0 comments on commit 88d6329

Please sign in to comment.