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 { [Header("UI Document")] public UIDocument uiDocument; [Header("UI Files")] public VisualTreeAsset travelUIAsset; public StyleSheet travelUIStyleSheet; // UI Elements private VisualElement travelContainer; private VisualElement travelPanel; 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 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"); distanceLabel = root.Q