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) if (thirdPersonCamera != null)
{ {
thirdPersonCamera.enabled = info.IsLocal; thirdPersonCamera.enabled = info.IsLocal;
if (info.IsLocal)
{
thirdPersonCamera.SetTarget(clone.transform);
}
} }
} }

View File

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

View File

@@ -132,13 +132,25 @@ namespace MegaKoop.Game.Networking
isHost = steamService.IsHost; isHost = steamService.IsHost;
#if STEAMWORKSNET #if STEAMWORKSNET
if (steamService.IsInLobby && p2pTransport != null) if (p2pTransport != null)
{ {
if (ulong.TryParse(steamService.LobbyIdString, out ulong lobbyValue) && lobbyValue != 0) if (steamService.IsInLobby)
{
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)); p2pTransport.SetActiveLobby(new CSteamID(lobbyValue));
} }
} }
else
{
p2pTransport.SetActiveLobby(CSteamID.Nil);
}
}
#endif #endif
} }

View File

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