online game working
This commit is contained in:
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -132,11 +132,23 @@ 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)
|
||||||
{
|
{
|
||||||
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
|
#endif
|
||||||
|
|||||||
@@ -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(); }
|
||||||
|
|||||||
Reference in New Issue
Block a user