This commit is contained in:
Dominik G.
2025-10-12 14:18:12 +02:00
parent 3594fdd761
commit ba150ac5d3
2 changed files with 7 additions and 20 deletions

View File

@@ -157,7 +157,6 @@ namespace MegaKoop.Game.Networking
networkManager = SteamCoopNetworkManager.Instance; networkManager = SteamCoopNetworkManager.Instance;
} }
bool isHost = networkManager != null && networkManager.IsHost;
ulong localSteamId = SteamBootstrap.IsInitialized ? SteamUser.GetSteamID().m_SteamID : 0UL; ulong localSteamId = SteamBootstrap.IsInitialized ? SteamUser.GetSteamID().m_SteamID : 0UL;
if (!localOverrideSet && autoAssignOwnerToLocalPlayer && ownerSteamId == 0 && localSteamId != 0) if (!localOverrideSet && autoAssignOwnerToLocalPlayer && ownerSteamId == 0 && localSteamId != 0)
@@ -170,7 +169,7 @@ namespace MegaKoop.Game.Networking
isLocalPlayer = ownerSteamId != 0 && ownerSteamId == localSteamId; isLocalPlayer = ownerSteamId != 0 && ownerSteamId == localSteamId;
} }
isAuthority = isHost; // Host drives authoritative simulation. isAuthority = isLocalPlayer; // Each player has authority over their own character.
} }
private void ConfigureController() private void ConfigureController()
@@ -218,7 +217,7 @@ namespace MegaKoop.Game.Networking
private void HandlePlayerInputMessage(NetworkMessage message) private void HandlePlayerInputMessage(NetworkMessage message)
{ {
if (!isAuthority) if (isAuthority)
{ {
return; return;
} }
@@ -253,29 +252,17 @@ namespace MegaKoop.Game.Networking
public void SendLocalInput(Vector2 moveInput, bool jump) public void SendLocalInput(Vector2 moveInput, bool jump)
{ {
if (networkManager == null || identity == null) if (networkManager == null || identity == null || !isAuthority)
{ {
return; return;
} }
var message = new PlayerInputMessage(identity.NetworkId, moveInput, jump); if (!networkManager.IsConnected)
byte[] payload = PlayerInputMessage.Serialize(message);
if (!networkManager.IsConnected || networkManager.IsHost)
{ {
// If we are host, feed directly. return;
HandlePlayerInputMessage(new NetworkMessage(NetworkMessageType.PlayerInput, payload, SteamUser.GetSteamID().m_SteamID));
} }
else
{
CSteamID lobby = networkManager.ActiveLobby;
CSteamID lobbyOwner = lobby != CSteamID.Nil ? SteamMatchmaking.GetLobbyOwner(lobby) : CSteamID.Nil;
if (lobbyOwner == CSteamID.Nil)
{
lobbyOwner = SteamUser.GetSteamID();
}
networkManager.SendToPlayer(lobbyOwner, NetworkMessageType.PlayerInput, payload, EP2PSend.k_EP2PSendUnreliableNoDelay); networkManager.SendToAll(NetworkMessageType.PlayerInput, PlayerInputMessage.Serialize(new PlayerInputMessage(identity.NetworkId, moveInput, jump)), EP2PSend.k_EP2PSendUnreliableNoDelay);
}
} }
} }
} }

View File

@@ -44,7 +44,7 @@ namespace MegaKoop.Game.Networking
return; return;
} }
if (!characterNetwork.IsLocalPlayer || characterNetwork.IsAuthority) if (!characterNetwork.IsLocalPlayer)
{ {
return; return;
} }