diff --git a/EndlessClient/Rendering/Character/CharacterRenderer.cs b/EndlessClient/Rendering/Character/CharacterRenderer.cs index 5d4752f1b..b1bcde8a8 100644 --- a/EndlessClient/Rendering/Character/CharacterRenderer.cs +++ b/EndlessClient/Rendering/Character/CharacterRenderer.cs @@ -516,8 +516,14 @@ protected override void Dispose(bool disposing) if (disposing) { _outline?.Dispose(); + + if (Game != null && Game.Components != null && Game.Components.Contains(_nameLabel)) + Game.Components.Remove(_nameLabel); _nameLabel?.Dispose(); + if (_chatBubble.IsValueCreated) + _chatBubble.Value?.Dispose(); + _sb?.Dispose(); _charRenderTarget?.Dispose(); } diff --git a/EndlessClient/Rendering/Character/CharacterRendererUpdater.cs b/EndlessClient/Rendering/Character/CharacterRendererUpdater.cs index 4a29668a3..3ab124389 100644 --- a/EndlessClient/Rendering/Character/CharacterRendererUpdater.cs +++ b/EndlessClient/Rendering/Character/CharacterRendererUpdater.cs @@ -6,6 +6,7 @@ using Microsoft.Xna.Framework; using Optional; using Optional.Collections; +using System; using System.Collections.Generic; using System.Linq; @@ -176,9 +177,14 @@ private ICharacterRenderer InitializeRendererForCharacter(EOLib.Domain.Character renderer.Initialize(); return renderer; } + + public void Dispose() + { + _characterRendererRepository.Dispose(); + } } - public interface ICharacterRendererUpdater + public interface ICharacterRendererUpdater : IDisposable { void UpdateCharacters(GameTime gameTime); } diff --git a/EndlessClient/Rendering/Map/MapRenderer.cs b/EndlessClient/Rendering/Map/MapRenderer.cs index 021b9e7e0..6c87bdc48 100644 --- a/EndlessClient/Rendering/Map/MapRenderer.cs +++ b/EndlessClient/Rendering/Map/MapRenderer.cs @@ -416,6 +416,9 @@ protected override void Dispose(bool disposing) _mapObjectTarget.Dispose(); _sb.Dispose(); _mouseCursorRenderer.Dispose(); + + _npcRendererUpdater.Dispose(); + _characterRendererUpdater.Dispose(); } base.Dispose(disposing); diff --git a/EndlessClient/Rendering/NPC/NPCRendererUpdater.cs b/EndlessClient/Rendering/NPC/NPCRendererUpdater.cs index f366087b2..a5ed0ff6f 100644 --- a/EndlessClient/Rendering/NPC/NPCRendererUpdater.cs +++ b/EndlessClient/Rendering/NPC/NPCRendererUpdater.cs @@ -1,4 +1,5 @@ -using System.Linq; +using System; +using System.Linq; using AutomaticTypeMapper; using EOLib; using EOLib.Domain.Map; @@ -95,9 +96,14 @@ private void UpdateNPCRenderers(GameTime gameTime) foreach (var renderer in _npcRendererRepository.NPCRenderers.Values) renderer.Update(gameTime); } + + public void Dispose() + { + _npcRendererRepository.Dispose(); + } } - public interface INPCRendererUpdater + public interface INPCRendererUpdater : IDisposable { void UpdateNPCs(GameTime gameTime); }