using System; using System.Collections.Generic; using Unity.Multiplayer.Center.Recommendations; using UnityEngine; using UnityEngine.UIElements; namespace Unity.Multiplayer.Center.Window.UI.RecommendationView { internal class NetcodeSelectionView : SolutionSelectionView { public NetcodeSelectionView() : base("Netcode Solution") {} } internal class HostingModelSelectionView : SolutionSelectionView { public HostingModelSelectionView() : base("Hosting Model") {} } internal class SolutionSelectionView : PackageSelectionView { readonly SectionHeader m_Header; readonly Label m_AssociatedFeaturesHeader; readonly RecommendationItemView m_MainHostingModelItem; readonly VisualElement m_ContainerRoot; readonly HelpBox m_Warning; protected override VisualElement ContainerRoot => m_ContainerRoot; /// /// Gets fired when the user changes the solution. /// public event Action OnUserChangedSolution; protected SolutionSelectionView(string title) { AddToClassList("main-section"); m_Header = new SectionHeader(title); Add(m_Header); m_AssociatedFeaturesHeader = new Label() { text = "Associated Packages", name = "associated-features-headline" }; Add(m_AssociatedFeaturesHeader); m_MainHostingModelItem = new RecommendationItemView(isRadio: false); Add(m_MainHostingModelItem); m_Header.OnSolutionSelected += () => OnUserChangedSolution?.Invoke(); m_ContainerRoot = new VisualElement(); Add(m_ContainerRoot); m_Warning = new HelpBox(null, HelpBoxMessageType.Info); Add(m_Warning); SetVisible(m_Warning, false); } public void UpdateData(RecommendedSolutionViewData[] availableSolutions, List allPackages) { m_Header.UpdateData(availableSolutions); var selectedSolution = RecommendationUtils.GetSelectedSolution(availableSolutions); UpdateMainPackageView(selectedSolution); UpdatePackageData(allPackages); SetVisible(m_AssociatedFeaturesHeader, allPackages.Count > 0 || selectedSolution.MainPackage != null); } void UpdateMainPackageView(RecommendedSolutionViewData selectedSolution) { var hasMainPackage = selectedSolution.MainPackage != null; m_Warning.text = selectedSolution.WarningString; SetVisible(m_Warning, !string.IsNullOrEmpty(selectedSolution.WarningString)); SetVisible(m_MainHostingModelItem, hasMainPackage); if (!hasMainPackage) return; m_MainHostingModelItem.UpdateData(selectedSolution.MainPackage); m_MainHostingModelItem.SetIsSelected(true); m_MainHostingModelItem.SetCheckboxEnabled(false); } } }