online game working
This commit is contained in:
@@ -223,6 +223,10 @@ namespace MegaKoop.Game.Networking
|
||||
if (thirdPersonCamera != null)
|
||||
{
|
||||
thirdPersonCamera.enabled = info.IsLocal;
|
||||
if (info.IsLocal)
|
||||
{
|
||||
thirdPersonCamera.SetTarget(clone.transform);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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(); }
|
||||
|
||||
Reference in New Issue
Block a user