Elo system update
This commit is contained in:
@@ -1,6 +1,12 @@
|
||||
using Fusion;
|
||||
using UnityEngine;
|
||||
|
||||
public partial struct _PlayerInputData : INetworkInput
|
||||
namespace OnlyScove.Scripts
|
||||
{
|
||||
public float direction;
|
||||
}
|
||||
public struct PlayerInputData : INetworkInput
|
||||
{
|
||||
public Vector2 Direction;
|
||||
public NetworkBool sprint;
|
||||
public Quaternion rot;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ using System.Threading.Tasks;
|
||||
using Fusion;
|
||||
using Fusion.Sockets;
|
||||
using UnityEngine;
|
||||
using OnlyScove.Scripts;
|
||||
|
||||
namespace Hallucinate.UI
|
||||
{
|
||||
@@ -42,7 +43,6 @@ namespace Hallucinate.UI
|
||||
{
|
||||
OnJoinStartedEvent?.Invoke();
|
||||
|
||||
// Sử dụng SessionProperties để lưu mật khẩu
|
||||
var customProps = new Dictionary<string, SessionProperty>();
|
||||
if (!string.IsNullOrEmpty(password))
|
||||
{
|
||||
@@ -88,13 +88,6 @@ namespace Hallucinate.UI
|
||||
|
||||
public void OnPlayerJoined(NetworkRunner runner, PlayerRef player)
|
||||
{
|
||||
if (runner.IsServer)
|
||||
{
|
||||
Vector2 spawnPosition = (player == runner.LocalPlayer) ? new Vector2(-8, 0) : new Vector2(8, 0);
|
||||
var networkPlayerObject = runner.Spawn(_playerPrefab, spawnPosition, Quaternion.identity, player);
|
||||
_spawnedCharacters.Add(player, networkPlayerObject);
|
||||
}
|
||||
|
||||
if (player == runner.LocalPlayer)
|
||||
{
|
||||
var pdm = FindFirstObjectByType<_PlayerDataManager>();
|
||||
@@ -104,12 +97,21 @@ namespace Hallucinate.UI
|
||||
{
|
||||
Name = LocalPlayerProfile.Name,
|
||||
Role = LocalPlayerProfile.Role,
|
||||
IsReady = false
|
||||
};
|
||||
pdm.RPC_UpdatePlayerMetaData(player, metaData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void StartGame()
|
||||
{
|
||||
if (_runner.IsServer)
|
||||
{
|
||||
_runner.LoadScene("Main Scene");
|
||||
}
|
||||
}
|
||||
|
||||
public void OnPlayerLeft(NetworkRunner runner, PlayerRef player)
|
||||
{
|
||||
if (_spawnedCharacters.TryGetValue(player, out NetworkObject networkObject))
|
||||
@@ -132,8 +134,27 @@ namespace Hallucinate.UI
|
||||
|
||||
public void OnInput(NetworkRunner runner, NetworkInput input)
|
||||
{
|
||||
var data = new _PlayerInputData();
|
||||
data.direction = Input.GetAxis("Vertical");
|
||||
var data = new PlayerInputData();
|
||||
|
||||
// Try to get input from the local player's InputReader
|
||||
if (PlayerStateMachine.Local != null && PlayerStateMachine.Local.Input != null)
|
||||
{
|
||||
var inputReader = PlayerStateMachine.Local.Input;
|
||||
data.Direction = inputReader.MoveInput;
|
||||
data.sprint = inputReader.IsSprintHeld;
|
||||
|
||||
if (PlayerStateMachine.Local.Cam != null)
|
||||
{
|
||||
data.rot = PlayerStateMachine.Local.Cam.PlanarRotation;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Fallback to basic input if player not spawned or InputReader missing
|
||||
data.Direction = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));
|
||||
data.sprint = Input.GetKey(KeyCode.LeftShift);
|
||||
}
|
||||
|
||||
input.Set(data);
|
||||
}
|
||||
|
||||
@@ -149,7 +170,31 @@ namespace Hallucinate.UI
|
||||
public void OnObjectEnterAOI(NetworkRunner runner, NetworkObject obj, PlayerRef player) { }
|
||||
public void OnCustomAuthenticationResponse(NetworkRunner runner, Dictionary<string, object> data) { }
|
||||
public void OnHostMigration(NetworkRunner runner, HostMigrationToken hostMigrationToken) { }
|
||||
public void OnSceneLoadDone(NetworkRunner runner) { }
|
||||
|
||||
public void OnSceneLoadDone(NetworkRunner runner)
|
||||
{
|
||||
string currentSceneName = UnityEngine.SceneManagement.SceneManager.GetActiveScene().name;
|
||||
|
||||
if (runner.IsServer && currentSceneName == "Main Scene")
|
||||
{
|
||||
foreach (var player in runner.ActivePlayers)
|
||||
{
|
||||
Vector2 spawnPosition = (player == runner.LocalPlayer) ? new Vector2(-8, 0) : new Vector2(8, 0);
|
||||
var networkPlayerObject = runner.Spawn(_playerPrefab, spawnPosition, Quaternion.identity, player);
|
||||
_spawnedCharacters.Add(player, networkPlayerObject);
|
||||
}
|
||||
}
|
||||
|
||||
if (currentSceneName == "Main Scene")
|
||||
{
|
||||
if (UIManager.Instance != null) UIManager.Instance.OnGameStarted();
|
||||
}
|
||||
else if (currentSceneName == "Lobby" || currentSceneName == "Menu")
|
||||
{
|
||||
if (UIManager.Instance != null) UIManager.Instance.OnBackToMenu();
|
||||
}
|
||||
}
|
||||
|
||||
public void OnSceneLoadStart(NetworkRunner runner) { }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,23 +6,29 @@ public struct _PlayerMetaData : INetworkStruct
|
||||
{
|
||||
public NetworkString<_16> Name;
|
||||
public _Role Role;
|
||||
public NetworkBool IsReady;
|
||||
}
|
||||
|
||||
public class _PlayerDataManager : NetworkBehaviour
|
||||
{
|
||||
// biến này của Fusion sẽ tự động đồng bộ giữa các client và host,
|
||||
// khi có thay đổi sẽ tự động cập nhật ở tất cả các bên
|
||||
[Networked]
|
||||
public NetworkDictionary<PlayerRef, _PlayerMetaData> Players => default;
|
||||
|
||||
// RPC: phương thức này sẽ được gọi từ client hoặc
|
||||
// host để cập nhật thông tin player, sau đó sẽ được gửi
|
||||
// đến state authority (host) để xử lý và đồng bộ lại cho tất cả các client
|
||||
[Rpc(RpcSources.All, RpcTargets.StateAuthority)]
|
||||
public void RPC_UpdatePlayerMetaData(PlayerRef playerRef, _PlayerMetaData metaData)
|
||||
{
|
||||
Players.Set(playerRef, metaData);
|
||||
}
|
||||
|
||||
[Rpc(RpcSources.All, RpcTargets.StateAuthority)]
|
||||
public void RPC_SetReady(PlayerRef playerRef, bool ready)
|
||||
{
|
||||
if (Players.TryGet(playerRef, out var data))
|
||||
{
|
||||
data.IsReady = ready;
|
||||
Players.Set(playerRef, data);
|
||||
}
|
||||
}
|
||||
|
||||
public bool TryGetPlayerMetaData(PlayerRef playerRef, out _PlayerMetaData metaData)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user