safer UIBehaviour instance updates, init method

This commit is contained in:
Sinai 2021-04-16 02:46:04 +10:00
parent a6ff9e02e2
commit f89455549e

View File

@ -15,26 +15,37 @@ namespace UnityExplorer.UI.Models
if (!Instances.Any()) if (!Instances.Any())
return; return;
try
{
for (int i = Instances.Count - 1; i >= 0; i--) for (int i = Instances.Count - 1; i >= 0; i--)
{ {
var instance = Instances[i]; var instance = Instances[i];
if (!instance.UIRoot) if (instance == null || !instance.UIRoot)
{
ExplorerCore.Log($"Instance {instance?.GetType().Name ?? "<null>"} has no UIRoot or it was destroyed!");
Instances.RemoveAt(i); Instances.RemoveAt(i);
else if (instance.NeedsUpdate && instance.Visible) continue;
}
if (instance.Visible)
instance.Update(); instance.Update();
} }
} }
catch (Exception ex)
/// <summary> {
/// Default false, if true then Update should be implemented. ExplorerCore.Log(ex);
/// </summary> }
public virtual bool NeedsUpdate => false; }
public UIBehaviourModel() public UIBehaviourModel()
{ {
Instances.Add(this); Instances.Add(this);
} }
public virtual void Init()
{
}
/// <summary> /// <summary>
/// Default empty method, override and implement if NeedsUpdateTick is true. /// Default empty method, override and implement if NeedsUpdateTick is true.
/// </summary> /// </summary>