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