using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using Zenject;
namespace DanroJump.Debugging
{
///
/// Инжектит debug-зависимости в явно помеченные сценовые компоненты.
///
public sealed class RuntimeDebugSceneInjector : IInitializable, IDisposable
{
private readonly DiContainer container;
private readonly HashSet injectedEntityIds = new();
public RuntimeDebugSceneInjector(DiContainer container)
{
this.container = container;
}
public void Initialize()
{
InjectLoadedScenes();
SceneManager.sceneLoaded += OnSceneLoaded;
}
public void Dispose()
{
SceneManager.sceneLoaded -= OnSceneLoaded;
injectedEntityIds.Clear();
}
private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
InjectLoadedScenes();
}
private void InjectLoadedScenes()
{
var behaviours = UnityEngine.Object.FindObjectsByType(FindObjectsInactive.Include);
for (int index = 0; index < behaviours.Length; index++)
{
var behaviour = behaviours[index];
if (behaviour is not IDebugLogConsumer)
{
continue;
}
if (!injectedEntityIds.Add(behaviour.GetEntityId()))
{
continue;
}
container.Inject(behaviour);
}
}
}
}