diff --git a/Assets/Scripts/Duy/LobbyManager.cs b/Assets/Scripts/Duy/LobbyManager.cs index ef546a06..c09c7fea 100644 --- a/Assets/Scripts/Duy/LobbyManager.cs +++ b/Assets/Scripts/Duy/LobbyManager.cs @@ -14,10 +14,7 @@ [Header("Character Selection")] public TMP_InputField playerNameInput; - public Image[] characterPreviewImages; - - public int selectedCharacterIndex = 0; [Header("Room List")] public GameObject roomListParent; public GameObject roomListItemPrefab; @@ -28,23 +25,13 @@ { lobbyPanel.SetActive(false); characterSelectionPanel.SetActive(true); - OnSelectCharacter(selectedCharacterIndex); + spawner = FindFirstObjectByType<_BasicSpawner>(); await spawner.StartLobby(); } - public void OnSelectCharacter(int index) - { - selectedCharacterIndex = index; - // update preview images - for (var i = 0; i < characterPreviewImages.Length; i++) - { - characterPreviewImages[i].color = (i == index) - ? Color.green - : Color.white; - } - } + public void OnNextButton() { @@ -59,11 +46,11 @@ var _profile = new _PlayerProfile() { Name = playerName, - Class = (_CharacterClass)selectedCharacterIndex + }; spawner.SetLocalPlayerProfile(_profile); // đưa lên host để tạo player object, ở đây tạm thời chỉ log ra console - Debug.Log($"Player Name: {_profile.Name}, Class: {_profile.Class}"); + Debug.Log($"Player Name: {_profile.Name}, Class: {_profile.Role}"); // chuyển sang lobby panel characterSelectionPanel.SetActive(false); lobbyPanel.SetActive(true); diff --git a/Assets/Scripts/Duy/PlayerDataManager.cs b/Assets/Scripts/Duy/PlayerDataManager.cs index 56262d2b..5762967d 100644 --- a/Assets/Scripts/Duy/PlayerDataManager.cs +++ b/Assets/Scripts/Duy/PlayerDataManager.cs @@ -5,7 +5,7 @@ using UnityEngine; public struct _PlayerMetaData : INetworkStruct { public NetworkString<_16> Name; - public _CharacterClass Class; + public _Role Role; } public class _PlayerDataManager : NetworkBehaviour diff --git a/Assets/Scripts/Duy/PlayerInfo.cs b/Assets/Scripts/Duy/PlayerInfo.cs index 59a79b80..7a271d11 100644 --- a/Assets/Scripts/Duy/PlayerInfo.cs +++ b/Assets/Scripts/Duy/PlayerInfo.cs @@ -2,16 +2,16 @@ using Fusion; using TMPro; using UnityEngine; -public enum _CharacterClass +public enum _Role { - Blue, - Red + Seeker, + Trapper } public struct _PlayerProfile { public string Name; - public _CharacterClass Class; + public _Role Role; } public class PlayerInfo : NetworkBehaviour @@ -37,7 +37,7 @@ public class PlayerInfo : NetworkBehaviour if (playerDataManager.TryGetPlayerMetaData(Object.InputAuthority, out var metadata)) { var name = metadata.Name; - var charClass = metadata.Class; + var charClass = metadata.Role; nameText.text = $"{name} ({charClass})"; diff --git a/Assets/Scripts/Duy/_BasicSpawner.cs b/Assets/Scripts/Duy/_BasicSpawner.cs index f9c3af35..aa938f87 100644 --- a/Assets/Scripts/Duy/_BasicSpawner.cs +++ b/Assets/Scripts/Duy/_BasicSpawner.cs @@ -146,7 +146,7 @@ public class _BasicSpawner : MonoBehaviour, INetworkRunnerCallbacks var metaData = new _PlayerMetaData() { Name = LocalPlayerProfile.Name, - Class = LocalPlayerProfile.Class, + Role = LocalPlayerProfile.Role, }; pdm.RPC_UpdatePlayerMetaData(player, metaData); @@ -275,4 +275,27 @@ public class _BasicSpawner : MonoBehaviour, INetworkRunnerCallbacks } return null; } + void AssignRoles(NetworkRunner runner) + { + var players = runner.ActivePlayers.ToList(); + + if (players.Count < 2) return; + + var p1 = players[0]; + var p2 = players[1]; + + bool random = UnityEngine.Random.value > 0.5f; + + SetRole(runner, p1, random ? _Role.Seeker : _Role.Trapper); + SetRole(runner, p2, random ? _Role.Trapper : _Role.Seeker); + } + void SetRole(NetworkRunner runner, PlayerRef player, _Role role) + { + var obj = runner.GetPlayerObject(player); + var data = obj.GetComponent<_PlayerData>(); + + data.PlayerRole = role; + + Debug.Log($"Player {player} assigned role: {role}"); + } } diff --git a/Assets/Scripts/Duy/_PlayerData.cs b/Assets/Scripts/Duy/_PlayerData.cs new file mode 100644 index 00000000..01dff510 --- /dev/null +++ b/Assets/Scripts/Duy/_PlayerData.cs @@ -0,0 +1,30 @@ +using Fusion; +using UnityEngine; + +public class _PlayerData : NetworkBehaviour +{ + [Networked] + public _Role PlayerRole { get; set; } + + public override void Spawned() + { + if (Object.HasInputAuthority) + { + SetupByRole(PlayerRole); + } + } + + void SetupByRole(_Role role) + { + if (role == _Role.Seeker) + { + Debug.Log("I am Seeker"); + // bật flashlight + } + else + { + Debug.Log("I am Trapper"); + // bật trap UI + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Duy/_PlayerData.cs.meta b/Assets/Scripts/Duy/_PlayerData.cs.meta new file mode 100644 index 00000000..0d0aaeee --- /dev/null +++ b/Assets/Scripts/Duy/_PlayerData.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 96ce77b74a34e7440a0b54af32c6d402 \ No newline at end of file