Нашёл причину утечки памяти

This commit is contained in:
ThomasCharester committed 2026-03-24 15:16:17 +03:00
1 parent 60c28f54f2
commit 320847af5b
229 files changed
+3094 -18282

No files matched your search

@@ -17,7 +17,7 @@ namespace Code.Infrastructure.UI.Panels
Tween.Color(image,shownColor, 1f).OnComplete(FireOpenedEvent);
}
public override void Close()
public override void Close(Action callback = null)
{
Tween.Color(image,hiddenColor, 1f).OnComplete(FireClosedEvent);
}
@@ -1,11 +1,10 @@
using Code.Infrastructure.Generators;
using System;
using PrimeTween;
using UnityEngine;
using UnityEngine.UI;
namespace Code.Infrastructure.UI.Panels
{
[UIEventOpenClose]
public partial class LogoPanel : UIPanel
{
[SerializeField] private Image image;
@@ -13,12 +12,12 @@ namespace Code.Infrastructure.UI.Panels
[SerializeField] private Color hiddenColor;
public override void Open()
{
Tween.Color(image,shownColor, 1f).OnComplete(FireOpenedEvent);
Tween.Color(image,shownColor, 1f);
}
public override void Close()
public override void Close(Action callback = null)
{
Tween.Color(image,hiddenColor, 1f).OnComplete(FireClosedEvent);
Tween.Color(image,hiddenColor, 1f).OnComplete(callback);
}
}
}
@@ -1,12 +1,10 @@
using Code.Debug;
using Code.Infrastructure.Audio;
using Code.Infrastructure.Generators;
using Code.Infrastructure.Audio;
using Reflex.Attributes;
using UnityEngine;
namespace Code.Infrastructure.UI.Panels
{
[UIEventOpenClose]
public partial class MenuChoosePanel : UIPanel
{
[Inject] IAudioService _audioService;
@@ -17,12 +15,6 @@ namespace Code.Infrastructure.UI.Panels
public override void Open()
{
sceneChooser.EnableButtons();
FireOpenedEvent();
}
public override void Close()
{
FireClosedEvent();
}
}
}
+2 -5
View File
@@ -1,3 +1,4 @@
using System;
using Reflex.Attributes;
using UnityEngine;
@@ -11,16 +12,12 @@ namespace Code.Infrastructure.UI
public bool InjectMeSenpai => injectMeSenpai;
[Inject] protected EventBus.EventBus _eventBus;
public abstract void Open();
public abstract void Close();
public virtual void Close(Action callback = null) => callback?.Invoke();
// Вызвать вручную \ добавить в коллбек для вызова ивента в EventBus
public virtual void FireCreatedEvent(){}
// Вызвать вручную \ добавить в коллбек для вызова ивента в EventBus
public virtual void FireRemovedEvent(){}
// Вызвать вручную \ добавить в коллбек для вызова ивента в EventBus
protected virtual void FireOpenedEvent(){}
// Вызвать вручную \ добавить в коллбек для вызова ивента в EventBus
protected virtual void FireClosedEvent(){gameObject.SetActive(false);}
}
}
+26 -24
View File
@@ -1,12 +1,8 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Code.Infrastructure.EventBus;
using Reflex.Core;
using Reflex.Extensions;
using Reflex.Injectors;
using UnityEngine;
using UnityEngine.SceneManagement;
namespace Code.Infrastructure.UI
{
@@ -22,7 +18,7 @@ namespace Code.Infrastructure.UI
}
// Крайне неудобно пользоваться
public class UIService : IUIPanelLoadedHandle, IUIService
public class UIService : IUIPanelLoadedHandle, IUIService, IDisposable
{
private Dictionary<UIPanelType, UIPanel> _loadedSinglePanels = new();
private Dictionary<UIPanelType, List<UIPanel>> _loadedMultiplePanels = new();
@@ -49,10 +45,9 @@ namespace Code.Infrastructure.UI
_loadedSinglePanels[uiPanelType].Open();
}
// TODO Close event
public void ClosePanel(UIPanelType uiPanelType)
{
_loadedSinglePanels[uiPanelType].Close();
_loadedSinglePanels[uiPanelType].Close(() => _loadedSinglePanels[uiPanelType].gameObject.SetActive(false));
}
public void TryLoadCreatePanel(UIPanelType uiPanelType, Transform parent = null) => _factory.LoadPanel(uiPanelType, parent);
@@ -79,20 +74,31 @@ namespace Code.Infrastructure.UI
panel.FireCreatedEvent();
}
// Для единичных
public void TryRemovePanel(UIPanelType uiPanelType)
{
if (_factory.CheckIsMultiple(uiPanelType))
{
UnityEngine.Debug.LogError("Это для единичных панелей олух");
return;
}
_loadedSinglePanels[uiPanelType].Close();
if (_factory.CheckIsMultiple(uiPanelType)) return;
_loadedSinglePanels[uiPanelType].Close(() => RemovePanel(uiPanelType));
}
// Для многочисленных
public void TryRemovePanel(UIPanel panel)
{
panel.Close();
panel.Close(() => RemovePanel(panel));
}
private void RemovePanel(UIPanel panel)
{
if (!_factory.CheckIsMultiple(panel.PanelType)) return;
_loadedMultiplePanels[panel.PanelType].Remove(panel);
panel.FireRemovedEvent();
_factory.ReleasePanel(panel);
if(_loadedMultiplePanels[panel.PanelType].Count == 0) _loadedMultiplePanels.Remove(panel.PanelType);
}
// Для всех
private void RemovePanel(UIPanelType panelType)
{
if (!_factory.CheckIsMultiple(panelType))
@@ -117,17 +123,13 @@ namespace Code.Infrastructure.UI
}
}
private void RemovePanel(UIPanel panel)
{
_loadedMultiplePanels[panel.PanelType].Remove(panel);
panel.FireRemovedEvent();
_factory.ReleasePanel(panel);
if(_loadedMultiplePanels[panel.PanelType].Count == 0) _loadedMultiplePanels.Remove(panel.PanelType);
}
public UIPanel TryGetSinglePanel(UIPanelType panelType) => _loadedSinglePanels.GetValueOrDefault(panelType);
public List<UIPanel> TryGetMultiplePanels(UIPanelType panelType) => _loadedMultiplePanels.GetValueOrDefault(panelType);
public void Dispose()
{
// TODO Релизнуть всё
_eventBus.Unsubscribe(this);
}
}
}