update: basicspawner( => random)

This commit is contained in:
manhduyhoang90
2026-04-23 08:56:35 +07:00
parent d2e3dbf653
commit fb50541036
6 changed files with 66 additions and 24 deletions

View File

@@ -14,10 +14,7 @@
[Header("Character Selection")] public TMP_InputField playerNameInput; [Header("Character Selection")] public TMP_InputField playerNameInput;
public Image[] characterPreviewImages;
public int selectedCharacterIndex = 0;
[Header("Room List")] public GameObject roomListParent; [Header("Room List")] public GameObject roomListParent;
public GameObject roomListItemPrefab; public GameObject roomListItemPrefab;
@@ -28,23 +25,13 @@
{ {
lobbyPanel.SetActive(false); lobbyPanel.SetActive(false);
characterSelectionPanel.SetActive(true); characterSelectionPanel.SetActive(true);
OnSelectCharacter(selectedCharacterIndex);
spawner = FindFirstObjectByType<_BasicSpawner>(); spawner = FindFirstObjectByType<_BasicSpawner>();
await spawner.StartLobby(); 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() public void OnNextButton()
{ {
@@ -59,11 +46,11 @@
var _profile = new _PlayerProfile() var _profile = new _PlayerProfile()
{ {
Name = playerName, Name = playerName,
Class = (_CharacterClass)selectedCharacterIndex
}; };
spawner.SetLocalPlayerProfile(_profile); spawner.SetLocalPlayerProfile(_profile);
// đưa lên host để tạo player object, ở đây tạm thời chỉ log ra console // đư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 // chuyển sang lobby panel
characterSelectionPanel.SetActive(false); characterSelectionPanel.SetActive(false);
lobbyPanel.SetActive(true); lobbyPanel.SetActive(true);

View File

@@ -5,7 +5,7 @@ using UnityEngine;
public struct _PlayerMetaData : INetworkStruct public struct _PlayerMetaData : INetworkStruct
{ {
public NetworkString<_16> Name; public NetworkString<_16> Name;
public _CharacterClass Class; public _Role Role;
} }
public class _PlayerDataManager : NetworkBehaviour public class _PlayerDataManager : NetworkBehaviour

View File

@@ -2,16 +2,16 @@ using Fusion;
using TMPro; using TMPro;
using UnityEngine; using UnityEngine;
public enum _CharacterClass public enum _Role
{ {
Blue, Seeker,
Red Trapper
} }
public struct _PlayerProfile public struct _PlayerProfile
{ {
public string Name; public string Name;
public _CharacterClass Class; public _Role Role;
} }
public class PlayerInfo : NetworkBehaviour public class PlayerInfo : NetworkBehaviour
@@ -37,7 +37,7 @@ public class PlayerInfo : NetworkBehaviour
if (playerDataManager.TryGetPlayerMetaData(Object.InputAuthority, out var metadata)) if (playerDataManager.TryGetPlayerMetaData(Object.InputAuthority, out var metadata))
{ {
var name = metadata.Name; var name = metadata.Name;
var charClass = metadata.Class; var charClass = metadata.Role;
nameText.text = $"{name} ({charClass})"; nameText.text = $"{name} ({charClass})";

View File

@@ -146,7 +146,7 @@ public class _BasicSpawner : MonoBehaviour, INetworkRunnerCallbacks
var metaData = new _PlayerMetaData() var metaData = new _PlayerMetaData()
{ {
Name = LocalPlayerProfile.Name, Name = LocalPlayerProfile.Name,
Class = LocalPlayerProfile.Class, Role = LocalPlayerProfile.Role,
}; };
pdm.RPC_UpdatePlayerMetaData(player, metaData); pdm.RPC_UpdatePlayerMetaData(player, metaData);
@@ -275,4 +275,27 @@ public class _BasicSpawner : MonoBehaviour, INetworkRunnerCallbacks
} }
return null; 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}");
}
} }

View File

@@ -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
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 96ce77b74a34e7440a0b54af32c6d402