using UnityEngine; using UnityEngine.UIElements; using System.Collections.Generic; using System.Linq; /// /// UI Controller for the Travel System with route selection and comparison /// public class TravelUI : MonoBehaviour, IClickBlocker { [Header("UI Document")] public UIDocument uiDocument; [Header("UI Files")] public VisualTreeAsset travelUIAsset; public StyleSheet travelUIStyleSheet; [Header("Debug")] public bool debugMode = false; // UI Elements private VisualElement travelContainer; private VisualElement travelPanel; private VisualElement clickBlocker; private Label distanceLabel; private Label timeLabel; private Label specialCostsLabel; private Button startTravelButton; private Button cancelTravelButton; private VisualElement routeList; // Travel data private Vector2Int currentDestination; private List availableRoutes = new List(); private TravelRoute selectedRoute; // State private bool isUIVisible = false; void Awake() { // Find UI Document if not assigned if (uiDocument == null) { uiDocument = GetComponent(); } // Load UXML asset from Resources if not assigned if (travelUIAsset == null) { travelUIAsset = Resources.Load("UI/Map/TravelUI"); if (travelUIAsset == null) { // Try alternative path travelUIAsset = Resources.Load("TravelUI"); } } // Load USS style sheet if not assigned if (travelUIStyleSheet == null) { travelUIStyleSheet = Resources.Load("UI/Map/TravelUI"); if (travelUIStyleSheet == null) { // Try alternative path travelUIStyleSheet = Resources.Load("TravelUI"); } } } void Start() { SetupUI(); } void OnEnable() { // Register with ClickManager when this component is enabled if (ClickManager.Instance != null) { ClickManager.Instance.RegisterClickBlocker(this); } } void OnDisable() { // Unregister from ClickManager when this component is disabled if (ClickManager.Instance != null) { ClickManager.Instance.UnregisterClickBlocker(this); } } void OnDestroy() { // Ensure we're unregistered when destroyed if (ClickManager.Instance != null) { ClickManager.Instance.UnregisterClickBlocker(this); } } void SetupUI() { if (uiDocument == null) { Debug.LogError("TravelUI: UIDocument not found!"); return; } var root = uiDocument.rootVisualElement; // Load and instantiate the UXML if we have the asset if (travelUIAsset != null) { // Clear existing content root.Clear(); // Instantiate from UXML travelUIAsset.CloneTree(root); // Add style sheet if (travelUIStyleSheet != null) { root.styleSheets.Add(travelUIStyleSheet); } else { Debug.LogWarning("TravelUI: No style sheet found"); } } else { Debug.LogWarning("TravelUI: No UXML asset found"); } // Find UI elements travelContainer = root.Q("TravelContainer"); travelPanel = root.Q("TravelPanel"); clickBlocker = root.Q("ClickBlocker"); distanceLabel = root.Q