online game working

This commit is contained in:
2025-10-05 19:54:30 +02:00
parent 73595994d1
commit 807e8fc5f3
4 changed files with 89 additions and 6 deletions

View File

@@ -223,6 +223,10 @@ namespace MegaKoop.Game.Networking
if (thirdPersonCamera != null)
{
thirdPersonCamera.enabled = info.IsLocal;
if (info.IsLocal)
{
thirdPersonCamera.SetTarget(clone.transform);
}
}
}

View File

@@ -93,6 +93,15 @@ namespace MegaKoop.Game.Networking
private void Update()
{
if (networkManager == null)
{
networkManager = SteamCoopNetworkManager.Instance;
if (networkManager != null)
{
RegisterHandlers();
}
}
if (networkManager == null)
{
return;
@@ -178,7 +187,8 @@ namespace MegaKoop.Game.Networking
}
else
{
characterController.enabled = false;
characterController.enabled = isLocalPlayer;
characterController.SetInputSource(null);
}
}

View File

@@ -132,11 +132,23 @@ namespace MegaKoop.Game.Networking
isHost = steamService.IsHost;
#if STEAMWORKSNET
if (steamService.IsInLobby && p2pTransport != null)
if (p2pTransport != null)
{
if (ulong.TryParse(steamService.LobbyIdString, out ulong lobbyValue) && lobbyValue != 0)
if (steamService.IsInLobby)
{
p2pTransport.SetActiveLobby(new CSteamID(lobbyValue));
CSteamID lobbyId = steamService.LobbyId;
if (lobbyId != CSteamID.Nil)
{
p2pTransport.SetActiveLobby(lobbyId);
}
else if (ulong.TryParse(steamService.LobbyIdString, out ulong lobbyValue) && lobbyValue != 0)
{
p2pTransport.SetActiveLobby(new CSteamID(lobbyValue));
}
}
else
{
p2pTransport.SetActiveLobby(CSteamID.Nil);
}
}
#endif

View File

@@ -79,6 +79,7 @@ namespace MegaKoop.UI
// Steam service
private SteamLobbyService steam;
private LobbyGameSceneCoordinator lobbyGameCoordinator;
private SteamCoopNetworkManager coopNetworkManager;
// Local state cache
private bool IsInLobby => steam != null && steam.IsInLobby;
@@ -386,12 +387,33 @@ namespace MegaKoop.UI
EnsureComponent<SteamLobbyManager>();
EnsureComponent<SteamP2PTransport>();
var coopManager = EnsureComponent<SteamCoopNetworkManager>();
coopManager.SynchronizeWithLobby(steam);
coopNetworkManager = EnsureComponent<SteamCoopNetworkManager>();
coopNetworkManager.SynchronizeWithLobby(steam);
lobbyGameCoordinator = servicesRoot.GetComponent<LobbyGameSceneCoordinator>() ?? servicesRoot.AddComponent<LobbyGameSceneCoordinator>();
DontDestroyOnLoad(servicesRoot);
}
SyncCoopNetwork();
}
private void SyncCoopNetwork()
{
if (steam == null)
{
return;
}
if (coopNetworkManager == null)
{
#if UNITY_2023_1_OR_NEWER
coopNetworkManager = Object.FindFirstObjectByType<SteamCoopNetworkManager>(FindObjectsInactive.Include);
#else
coopNetworkManager = Object.FindObjectOfType<SteamCoopNetworkManager>();
#endif
}
coopNetworkManager?.SynchronizeWithLobby(steam);
}
private void RegisterSteamEvents()
@@ -404,6 +426,11 @@ namespace MegaKoop.UI
steam.OnLobbyDataUpdated += OnLobbyDataUpdated;
steam.OnJoinFailed += OnJoinFailed;
steam.OnAvatarUpdated += OnAvatarUpdated;
steam.OnLobbyCreated += HandleLobbyCreatedSync;
steam.OnLobbyEntered += HandleLobbyEnteredSync;
steam.OnLobbyLeft += HandleLobbyLeftSync;
steam.OnMembersChanged += HandleMembersChangedSync;
steam.OnLobbyDataUpdated += HandleLobbyDataUpdatedSync;
}
private void UnregisterSteamEvents()
@@ -416,6 +443,11 @@ namespace MegaKoop.UI
steam.OnLobbyDataUpdated -= OnLobbyDataUpdated;
steam.OnJoinFailed -= OnJoinFailed;
steam.OnAvatarUpdated -= OnAvatarUpdated;
steam.OnLobbyCreated -= HandleLobbyCreatedSync;
steam.OnLobbyEntered -= HandleLobbyEnteredSync;
steam.OnLobbyLeft -= HandleLobbyLeftSync;
steam.OnMembersChanged -= HandleMembersChangedSync;
steam.OnLobbyDataUpdated -= HandleLobbyDataUpdatedSync;
}
private void OnLobbyCreated()
@@ -451,6 +483,31 @@ namespace MegaKoop.UI
UpdateUIFromSteam();
}
private void HandleLobbyCreatedSync()
{
SyncCoopNetwork();
}
private void HandleLobbyEnteredSync()
{
SyncCoopNetwork();
}
private void HandleLobbyLeftSync()
{
SyncCoopNetwork();
}
private void HandleMembersChangedSync()
{
SyncCoopNetwork();
}
private void HandleLobbyDataUpdatedSync()
{
SyncCoopNetwork();
}
private void OnMembersChanged() => UpdateUIFromSteam();
private void OnLobbyDataUpdated() => UpdateUIFromSteam();
private void OnJoinFailed(string reason) { Debug.LogWarning($"[Lobby] Join failed: {reason}"); UpdateUIFromSteam(); }