From f6b6afd9f309e018aed5f6940436e62de4bfef2d Mon Sep 17 00:00:00 2001 From: alexiscatnip Date: Fri, 22 Jul 2022 23:49:17 +0800 Subject: [PATCH] refactor: Add guard clause to AgentPresenter methods --- Assets/Raindrop/Unity3D/AgentPresenter.cs | 27 ++++++++++++++++------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/Assets/Raindrop/Unity3D/AgentPresenter.cs b/Assets/Raindrop/Unity3D/AgentPresenter.cs index fbdf958..d37855f 100644 --- a/Assets/Raindrop/Unity3D/AgentPresenter.cs +++ b/Assets/Raindrop/Unity3D/AgentPresenter.cs @@ -1,9 +1,8 @@ -using System; using OpenMetaverse; using Raindrop.Rendering; using System.Collections.Generic; -using System.Threading; using Plugins.CommonDependencies; +using Raindrop.Netcom; using UE = UnityEngine ; using UnityEngine ; @@ -19,15 +18,18 @@ namespace Raindrop.Presenters public uint z_MinimapAgents; private object avatarsDictLock = new object(); - private Dictionary avatarsDict + private Dictionary avatarsDict = new Dictionary(); //user UUID -> user gameobject - private Dictionary avatarsDictMinimap + private Dictionary avatarsDictMinimap = new Dictionary(); //user UUID -> user gameobject in minimap public GameObject agentReference; //reference to the agent, if rezzed - it should. private RaindropInstance instance { get { return ServiceLocator.Instance.Get(); } } - //private RaindropNetcom netcom { get { return instance.Netcom; } } - bool Active => instance.Client.Network.Connected; + private RaindropNetcom netcom { get { return instance?.Netcom; } } + private GridClient client { get { return instance?.Client; } } + bool IsNetworkLayerActive => (instance != null) && + (instance.Client != null) && + instance.Client.Network.Connected; void Start() { @@ -39,13 +41,19 @@ namespace Raindrop.Presenters private void OnDisable() { - instance.Client.Objects.AvatarUpdate -= Objects_AvatarUpdate; - instance.Client.Objects.TerseObjectUpdate -= ObjectsOnTerseObjectUpdate; + if (client == null) + return; + + client.Objects.AvatarUpdate -= Objects_AvatarUpdate; + client.Objects.TerseObjectUpdate -= ObjectsOnTerseObjectUpdate; } private void ObjectsOnTerseObjectUpdate(object sender, TerseObjectUpdateEventArgs e) { + if (! IsNetworkLayerActive) + return; + if (e.Simulator != instance.Client.Network.CurrentSim) return; @@ -75,6 +83,9 @@ namespace Raindrop.Presenters } private void Objects_AvatarUpdate(object sender, AvatarUpdateEventArgs e) { + if (! IsNetworkLayerActive) + return; + if (e.Simulator != instance.Client.Network.CurrentSim) return;