using System; using UnityEngine; public class LevelSwitch : MonoBehaviour { public LevelSwitchData switchData; public SpriteRenderer iconRenderer; private Interactable interactable; void Awake() { if (iconRenderer == null) iconRenderer = GetComponent(); interactable = GetComponent(); if (interactable != null) { interactable.Interacted += OnInteracted; } ApplySwitchData(); } void OnDestroy() { if (interactable != null) { interactable.Interacted -= OnInteracted; } } #if UNITY_EDITOR void OnValidate() { if (iconRenderer == null) iconRenderer = GetComponent(); ApplySwitchData(); } #endif public void ApplySwitchData() { if (switchData != null) { if (iconRenderer != null) iconRenderer.sprite = switchData.mapSprite; gameObject.name = switchData.targetLevelSceneName; // Optionally update other fields, e.g. description } } private async void OnInteracted() { Debug.Log($"LevelSwitch.OnInteracted: Switching to level {switchData?.targetLevelSceneName}"); if (switchData != null && !string.IsNullOrEmpty(switchData.targetLevelSceneName)) { // Optionally: show loading UI here var progress = new Progress(p => Debug.Log($"Loading progress: {p * 100:F0}%")); await SceneManagerService.Instance.SwitchSceneAsync(switchData.targetLevelSceneName, progress); // Optionally: hide loading UI here } } }