diff --git a/Basis/Assets/AddressableAssetsData/AssetGroups/Basis Foundation Assets.asset b/Basis/Assets/AddressableAssetsData/AssetGroups/Basis Foundation Assets.asset index ad74e5c82..9a1ea1875 100644 --- a/Basis/Assets/AddressableAssetsData/AssetGroups/Basis Foundation Assets.asset +++ b/Basis/Assets/AddressableAssetsData/AssetGroups/Basis Foundation Assets.asset @@ -95,6 +95,11 @@ MonoBehaviour: m_ReadOnly: 0 m_SerializedLabels: [] FlaggedDuringContentUpdateRestriction: 0 + - m_GUID: 4842676b04316a443b7ab8df4753579d + m_Address: Packages/com.basis.sdk/Prefabs/Panel Elements/Player List Prefab.prefab + m_ReadOnly: 0 + m_SerializedLabels: [] + FlaggedDuringContentUpdateRestriction: 0 - m_GUID: 4b6d450b11ad8974e8c4ba0b1e0df50e m_Address: RemotePlayer m_ReadOnly: 0 diff --git a/Basis/Packages/com.basis.framework/BasisUI/Elements/PanelPlayerList.cs b/Basis/Packages/com.basis.framework/BasisUI/Elements/PanelPlayerList.cs new file mode 100644 index 000000000..5564f546f --- /dev/null +++ b/Basis/Packages/com.basis.framework/BasisUI/Elements/PanelPlayerList.cs @@ -0,0 +1,629 @@ +using Basis.Scripts.BasisSdk.Players; +using Basis.Scripts.Networking; +using Basis.Scripts.Networking.NetworkedAvatar; +using Basis.Scripts.Networking.Receivers; +using System; +using System.Collections.Generic; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using TMPro; +using UnityEngine; +using UnityEngine.UI; +using Task = System.Threading.Tasks.Task; + +namespace Basis.BasisUI +{ + [Serializable] + public struct PlatformBadge + { + public string platformRegex; + public string platformDisplayName; + public Sprite platformIcon; + } + + public struct UserButtonAction + { + public string title; + public Action action; + public string buttonStyle; + } + + public struct PlayerListFilter + { + public string filterName; + public Func filterFunction; + } + + public struct PlayerBadge + { + public string badgeName; + public Sprite badgeIcon; + } + + public class PanelPlayerList : PanelSelectionGroup + { + public static class PlayerListStyles + { + public static string Default = "Packages/com.basis.sdk/Prefabs/Panel Elements/Player List Prefab.prefab"; + } + + public static PanelPlayerList CreateNew(Component parent) + => CreateNew(PlayerListStyles.Default, parent); + + public bool ShowLocalPlayerInList = false; + public PlatformBadge[] PlatformBadges = new PlatformBadge[] + { + new() { platformRegex = "Windows", platformDisplayName = "PC", platformIcon = null }, + new() { platformRegex = "iOS|iPhone|iPad", platformDisplayName = "iOS", platformIcon = null }, + new() { platformRegex = "Android", platformDisplayName = "Android", platformIcon = null }, + new() { platformRegex = "Macintosh|Mac OS X", platformDisplayName = "Mac", platformIcon = null }, + new() { platformRegex = "Linux", platformDisplayName = "Linux", platformIcon = null }, + }; + + public RectTransform UserActionButtonParent; + public PanelSlider UserVolumeSlider; + public TMP_Text TitleText; + public GameObject BadgeTemplate; + public Button IndexButtonTemplate; + public ScrollRect playerScrollRect; + + // --- Pools (instead of Destroy/Instantiate every refresh) + private readonly List