Files
Continentis/Assets/Plugins/IngameDebugConsole/Scripts/EventSystemHandler.cs

72 lines
2.2 KiB
C#
Raw Normal View History

2025-10-23 00:49:44 -04:00
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.SceneManagement;
#if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER
using UnityEngine.InputSystem.UI;
#endif
namespace IngameDebugConsole
{
2026-03-20 11:56:50 -04:00
// Avoid multiple EventSystems in the scene by activating the embedded EventSystem only if one doesn't already exist in the scene
[DefaultExecutionOrder(1000)]
public class EventSystemHandler : MonoBehaviour
{
2025-10-23 00:49:44 -04:00
#pragma warning disable 0649
2026-03-20 11:56:50 -04:00
[SerializeField] private GameObject embeddedEventSystem;
2025-10-23 00:49:44 -04:00
#pragma warning restore 0649
#if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER
2026-03-20 11:56:50 -04:00
private void Awake()
{
var legacyInputModule = embeddedEventSystem.GetComponent<StandaloneInputModule>();
if (legacyInputModule)
{
DestroyImmediate(legacyInputModule);
embeddedEventSystem.AddComponent<InputSystemUIInputModule>();
}
}
2025-10-23 00:49:44 -04:00
#endif
2026-03-20 11:56:50 -04:00
private void OnEnable()
{
SceneManager.sceneLoaded -= OnSceneLoaded;
SceneManager.sceneLoaded += OnSceneLoaded;
SceneManager.sceneUnloaded -= OnSceneUnloaded;
SceneManager.sceneUnloaded += OnSceneUnloaded;
2025-10-23 00:49:44 -04:00
2026-03-20 11:56:50 -04:00
ActivateEventSystemIfNeeded();
}
2025-10-23 00:49:44 -04:00
2026-03-20 11:56:50 -04:00
private void OnDisable()
{
SceneManager.sceneLoaded -= OnSceneLoaded;
SceneManager.sceneUnloaded -= OnSceneUnloaded;
2025-10-23 00:49:44 -04:00
2026-03-20 11:56:50 -04:00
DeactivateEventSystem();
}
2025-10-23 00:49:44 -04:00
2026-03-20 11:56:50 -04:00
private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
DeactivateEventSystem();
ActivateEventSystemIfNeeded();
}
2025-10-23 00:49:44 -04:00
2026-03-20 11:56:50 -04:00
private void OnSceneUnloaded(Scene current)
{
// Deactivate the embedded EventSystem before changing scenes because the new scene might have its own EventSystem
DeactivateEventSystem();
}
2025-10-23 00:49:44 -04:00
2026-03-20 11:56:50 -04:00
private void ActivateEventSystemIfNeeded()
{
if (embeddedEventSystem && !EventSystem.current)
embeddedEventSystem.SetActive(true);
}
2025-10-23 00:49:44 -04:00
2026-03-20 11:56:50 -04:00
private void DeactivateEventSystem()
{
if (embeddedEventSystem)
embeddedEventSystem.SetActive(false);
}
}
2025-10-23 00:49:44 -04:00
}