diff --git a/Assets/Scripts/ConnectionManagement/ConnectionState/ClientConnectedState.cs b/Assets/Scripts/ConnectionManagement/ConnectionState/ClientConnectedState.cs index 32b1f503fd..9d4e0e0f1a 100644 --- a/Assets/Scripts/ConnectionManagement/ConnectionState/ClientConnectedState.cs +++ b/Assets/Scripts/ConnectionManagement/ConnectionState/ClientConnectedState.cs @@ -1,4 +1,3 @@ -using System; using Unity.BossRoom.UnityServices.Lobbies; using UnityEngine; using VContainer; @@ -27,7 +26,8 @@ public override void Exit() { } public override void OnClientDisconnect(ulong _) { var disconnectReason = m_ConnectionManager.NetworkManager.DisconnectReason; - if (string.IsNullOrEmpty(disconnectReason)) + if (string.IsNullOrEmpty(disconnectReason) || + disconnectReason == "Disconnected due to host shutting down.") { m_ConnectStatusPublisher.Publish(ConnectStatus.Reconnecting); m_ConnectionManager.ChangeState(m_ConnectionManager.m_ClientReconnecting); diff --git a/Assets/Scripts/Gameplay/Action/ConcreteActions/AOEAction.cs b/Assets/Scripts/Gameplay/Action/ConcreteActions/AOEAction.cs index e01564ef61..ac32fa0721 100644 --- a/Assets/Scripts/Gameplay/Action/ConcreteActions/AOEAction.cs +++ b/Assets/Scripts/Gameplay/Action/ConcreteActions/AOEAction.cs @@ -35,7 +35,7 @@ public override bool OnStart(ServerCharacter serverCharacter) // This means we are responsible for triggering reaction-anims ourselves, which we do in PerformAoe() Data.TargetIds = new ulong[0]; serverCharacter.serverAnimationHandler.NetworkAnimator.SetTrigger(Config.Anim); - serverCharacter.clientCharacter.RecvDoActionClientRPC(Data); + serverCharacter.clientCharacter.ClientPlayActionRpc(Data); return ActionConclusion.Continue; } diff --git a/Assets/Scripts/Gameplay/Action/ConcreteActions/ChargedLaunchProjectileAction.cs b/Assets/Scripts/Gameplay/Action/ConcreteActions/ChargedLaunchProjectileAction.cs index e23f5895fb..9d2330537a 100644 --- a/Assets/Scripts/Gameplay/Action/ConcreteActions/ChargedLaunchProjectileAction.cs +++ b/Assets/Scripts/Gameplay/Action/ConcreteActions/ChargedLaunchProjectileAction.cs @@ -53,7 +53,7 @@ public override bool OnStart(ServerCharacter serverCharacter) serverCharacter.serverAnimationHandler.NetworkAnimator.SetTrigger(Config.Anim); // start the "charging up" ActionFX - serverCharacter.clientCharacter.RecvDoActionClientRPC(Data); + serverCharacter.clientCharacter.ClientPlayActionRpc(Data); // sanity-check our data a bit Debug.Assert(Config.Projectiles.Length > 1, $"Action {name} has {Config.Projectiles.Length} Projectiles. Expected at least 2!"); @@ -122,7 +122,7 @@ private void StopChargingUp(ServerCharacter parent) parent.serverAnimationHandler.NetworkAnimator.SetTrigger(Config.Anim2); } - parent.clientCharacter.RecvStopChargingUpClientRpc(GetPercentChargedUp()); + parent.clientCharacter.ClientStopChargingUpRpc(GetPercentChargedUp()); if (!m_HitByAttack) { LaunchProjectile(parent); diff --git a/Assets/Scripts/Gameplay/Action/ConcreteActions/ChargedShieldAction.cs b/Assets/Scripts/Gameplay/Action/ConcreteActions/ChargedShieldAction.cs index 0146305c3e..390d17212f 100644 --- a/Assets/Scripts/Gameplay/Action/ConcreteActions/ChargedShieldAction.cs +++ b/Assets/Scripts/Gameplay/Action/ConcreteActions/ChargedShieldAction.cs @@ -52,7 +52,7 @@ public override bool OnStart(ServerCharacter serverCharacter) // raise the start trigger to start the animation loop! serverCharacter.serverAnimationHandler.NetworkAnimator.SetTrigger(Config.Anim); - serverCharacter.clientCharacter.RecvDoActionClientRPC(Data); + serverCharacter.clientCharacter.ClientPlayActionRpc(Data); return true; } @@ -145,7 +145,7 @@ private void StopChargingUp(ServerCharacter parent) if (IsChargingUp()) { m_StoppedChargingUpTime = Time.time; - parent.clientCharacter.RecvStopChargingUpClientRpc(GetPercentChargedUp()); + parent.clientCharacter.ClientStopChargingUpRpc(GetPercentChargedUp()); parent.serverAnimationHandler.NetworkAnimator.SetTrigger(Config.Anim2); diff --git a/Assets/Scripts/Gameplay/Action/ConcreteActions/DashAttackAction.cs b/Assets/Scripts/Gameplay/Action/ConcreteActions/DashAttackAction.cs index 8a1b565497..4cde3d5229 100644 --- a/Assets/Scripts/Gameplay/Action/ConcreteActions/DashAttackAction.cs +++ b/Assets/Scripts/Gameplay/Action/ConcreteActions/DashAttackAction.cs @@ -38,7 +38,7 @@ public override bool OnStart(ServerCharacter serverCharacter) serverCharacter.serverAnimationHandler.NetworkAnimator.SetTrigger(Config.Anim); // tell clients to visualize this action - serverCharacter.clientCharacter.RecvDoActionClientRPC(Data); + serverCharacter.clientCharacter.ClientPlayActionRpc(Data); return ActionConclusion.Continue; } @@ -80,7 +80,7 @@ public override void Cancel(ServerCharacter serverCharacter) // because the client-side visualization of the action moves the character visualization around, // we need to explicitly end the client-side visuals when we abort - serverCharacter.clientCharacter.RecvCancelActionsByPrototypeIDClientRpc(ActionID); + serverCharacter.clientCharacter.ClientCancelActionsByPrototypeIDRpc(ActionID); } diff --git a/Assets/Scripts/Gameplay/Action/ConcreteActions/FXProjectileTargetedAction.cs b/Assets/Scripts/Gameplay/Action/ConcreteActions/FXProjectileTargetedAction.cs index 84a1cbbb71..2cbf68078a 100644 --- a/Assets/Scripts/Gameplay/Action/ConcreteActions/FXProjectileTargetedAction.cs +++ b/Assets/Scripts/Gameplay/Action/ConcreteActions/FXProjectileTargetedAction.cs @@ -49,7 +49,7 @@ public override bool OnStart(ServerCharacter serverCharacter) serverCharacter.serverAnimationHandler.NetworkAnimator.SetTrigger(Config.Anim); // tell clients to visualize this action - serverCharacter.clientCharacter.RecvDoActionClientRPC(Data); + serverCharacter.clientCharacter.ClientPlayActionRpc(Data); return true; } @@ -84,7 +84,7 @@ public override void Cancel(ServerCharacter serverCharacter) { if (!m_ImpactedTarget) { - serverCharacter.clientCharacter.RecvCancelActionsByPrototypeIDClientRpc(ActionID); + serverCharacter.clientCharacter.ClientCancelActionsByPrototypeIDRpc(ActionID); } } diff --git a/Assets/Scripts/Gameplay/Action/ConcreteActions/LaunchProjectileAction.cs b/Assets/Scripts/Gameplay/Action/ConcreteActions/LaunchProjectileAction.cs index 8b7e5fe3d2..e2995a6358 100644 --- a/Assets/Scripts/Gameplay/Action/ConcreteActions/LaunchProjectileAction.cs +++ b/Assets/Scripts/Gameplay/Action/ConcreteActions/LaunchProjectileAction.cs @@ -21,7 +21,7 @@ public override bool OnStart(ServerCharacter serverCharacter) serverCharacter.physicsWrapper.Transform.forward = Data.Direction; serverCharacter.serverAnimationHandler.NetworkAnimator.SetTrigger(Config.Anim); - serverCharacter.clientCharacter.RecvDoActionClientRPC(Data); + serverCharacter.clientCharacter.ClientPlayActionRpc(Data); return true; } diff --git a/Assets/Scripts/Gameplay/Action/ConcreteActions/MeleeAction.cs b/Assets/Scripts/Gameplay/Action/ConcreteActions/MeleeAction.cs index c2e5e03c42..b19f26b9d0 100644 --- a/Assets/Scripts/Gameplay/Action/ConcreteActions/MeleeAction.cs +++ b/Assets/Scripts/Gameplay/Action/ConcreteActions/MeleeAction.cs @@ -51,7 +51,7 @@ public override bool OnStart(ServerCharacter serverCharacter) } serverCharacter.serverAnimationHandler.NetworkAnimator.SetTrigger(Config.Anim); - serverCharacter.clientCharacter.RecvDoActionClientRPC(Data); + serverCharacter.clientCharacter.ClientPlayActionRpc(Data); return true; } diff --git a/Assets/Scripts/Gameplay/Action/ConcreteActions/StealthModeAction.cs b/Assets/Scripts/Gameplay/Action/ConcreteActions/StealthModeAction.cs index 6119beaf76..efba0d028b 100644 --- a/Assets/Scripts/Gameplay/Action/ConcreteActions/StealthModeAction.cs +++ b/Assets/Scripts/Gameplay/Action/ConcreteActions/StealthModeAction.cs @@ -28,7 +28,7 @@ public override bool OnStart(ServerCharacter serverCharacter) { serverCharacter.serverAnimationHandler.NetworkAnimator.SetTrigger(Config.Anim); - serverCharacter.clientCharacter.RecvDoActionClientRPC(Data); + serverCharacter.clientCharacter.ClientPlayActionRpc(Data); return true; } @@ -90,7 +90,7 @@ private void EndStealth(ServerCharacter parent) // presses the Stealth button twice in a row: "end this Stealth action and start a new one". If we cancelled // all actions of this type in Cancel(), we'd end up cancelling both the old AND the new one, because // the new one would already be in the clients' actionFX queue. - parent.clientCharacter.RecvCancelActionsByPrototypeIDClientRpc(ActionID); + parent.clientCharacter.ClientCancelActionsByPrototypeIDRpc(ActionID); } } diff --git a/Assets/Scripts/Gameplay/Action/ConcreteActions/TossAction.cs b/Assets/Scripts/Gameplay/Action/ConcreteActions/TossAction.cs index a3a9a86757..db1b4b92d1 100644 --- a/Assets/Scripts/Gameplay/Action/ConcreteActions/TossAction.cs +++ b/Assets/Scripts/Gameplay/Action/ConcreteActions/TossAction.cs @@ -40,7 +40,7 @@ public override bool OnStart(ServerCharacter serverCharacter) } serverCharacter.serverAnimationHandler.NetworkAnimator.SetTrigger(Config.Anim); - serverCharacter.clientCharacter.RecvDoActionClientRPC(Data); + serverCharacter.clientCharacter.ClientPlayActionRpc(Data); return true; } diff --git a/Assets/Scripts/Gameplay/Action/ConcreteActions/TrampleAction.cs b/Assets/Scripts/Gameplay/Action/ConcreteActions/TrampleAction.cs index 5d180289c9..70fd601ab6 100644 --- a/Assets/Scripts/Gameplay/Action/ConcreteActions/TrampleAction.cs +++ b/Assets/Scripts/Gameplay/Action/ConcreteActions/TrampleAction.cs @@ -85,7 +85,7 @@ public override bool OnStart(ServerCharacter serverCharacter) serverCharacter.serverAnimationHandler.NetworkAnimator.SetTrigger(Config.Anim); } - serverCharacter.clientCharacter.RecvDoActionClientRPC(Data); + serverCharacter.clientCharacter.ClientPlayActionRpc(Data); return true; } @@ -238,7 +238,7 @@ private void StunSelf(ServerCharacter parent) if (!m_WasStunned) { parent.Movement.CancelMove(); - parent.clientCharacter.RecvCancelAllActionsClientRpc(); + parent.clientCharacter.ClientCancelAllActionsRpc(); } m_WasStunned = true; } diff --git a/Assets/Scripts/Gameplay/Action/Input/ChargedActionInput.cs b/Assets/Scripts/Gameplay/Action/Input/ChargedActionInput.cs index 8183b1cdfb..ff267f3237 100644 --- a/Assets/Scripts/Gameplay/Action/Input/ChargedActionInput.cs +++ b/Assets/Scripts/Gameplay/Action/Input/ChargedActionInput.cs @@ -26,7 +26,7 @@ private void Start() public override void OnReleaseKey() { - m_PlayerOwner.RecvStopChargingUpServerRpc(); + m_PlayerOwner.ServerStopChargingUpRpc(); Destroy(gameObject); } diff --git a/Assets/Scripts/Gameplay/DebugCheats/DebugCheatsManager.cs b/Assets/Scripts/Gameplay/DebugCheats/DebugCheatsManager.cs index 3fc874f39c..2c170dda4f 100644 --- a/Assets/Scripts/Gameplay/DebugCheats/DebugCheatsManager.cs +++ b/Assets/Scripts/Gameplay/DebugCheats/DebugCheatsManager.cs @@ -1,4 +1,3 @@ -using System; using Unity.BossRoom.ConnectionManagement; using Unity.BossRoom.Gameplay.GameplayObjects; using Unity.BossRoom.Gameplay.GameplayObjects.Character; @@ -77,52 +76,52 @@ static bool AnyTouchDown() public void SpawnEnemy() { - SpawnEnemyServerRpc(); + ServerSpawnEnemyRpc(); } public void SpawnBoss() { - SpawnBossServerRpc(); + ServerSpawnBossRpc(); } public void KillTarget() { - KillTargetServerRpc(); + ServerKillTargetRpc(); } public void KillAllEnemies() { - KillAllEnemiesServerRpc(); + ServerKillAllEnemiesRpc(); } public void ToggleGodMode() { - ToggleGodModeServerRpc(); + ServerToggleGodModeRpc(); } public void HealPlayer() { - HealPlayerServerRpc(); + ServerHealPlayerRpc(); } public void ToggleSuperSpeed() { - ToggleSuperSpeedServerRpc(); + ServerToggleSuperSpeedRpc(); } public void ToggleTeleportMode() { - ToggleTeleportModeServerRpc(); + ServerToggleTeleportModeRpc(); } public void ToggleDoor() { - ToggleDoorServerRpc(); + ServerToggleDoorRpc(); } public void TogglePortals() { - TogglePortalsServerRpc(); + ServerTogglePortalsRpc(); } public void GoToPostGame() @@ -130,24 +129,24 @@ public void GoToPostGame() GoToPostGameServerRpc(); } - [ServerRpc(RequireOwnership = false)] - void SpawnEnemyServerRpc(ServerRpcParams serverRpcParams = default) + [Rpc(SendTo.Server, RequireOwnership = false)] + void ServerSpawnEnemyRpc(RpcParams serverRpcParams = default) { var newEnemy = Instantiate(m_EnemyPrefab); newEnemy.SpawnWithOwnership(NetworkManager.Singleton.LocalClientId, true); PublishCheatUsedMessage(serverRpcParams.Receive.SenderClientId, "SpawnEnemy"); } - [ServerRpc(RequireOwnership = false)] - void SpawnBossServerRpc(ServerRpcParams serverRpcParams = default) + [Rpc(SendTo.Server, RequireOwnership = false)] + void ServerSpawnBossRpc(RpcParams serverRpcParams = default) { var newEnemy = Instantiate(m_BossPrefab); newEnemy.SpawnWithOwnership(NetworkManager.Singleton.LocalClientId, true); PublishCheatUsedMessage(serverRpcParams.Receive.SenderClientId, "SpawnBoss"); } - [ServerRpc(RequireOwnership = false)] - void KillTargetServerRpc(ServerRpcParams serverRpcParams = default) + [Rpc(SendTo.Server, RequireOwnership = false)] + void ServerKillTargetRpc(RpcParams serverRpcParams = default) { ulong clientId = serverRpcParams.Receive.SenderClientId; var playerServerCharacter = PlayerServerCharacter.GetPlayerServerCharacter(clientId); @@ -171,8 +170,8 @@ void KillTargetServerRpc(ServerRpcParams serverRpcParams = default) } } - [ServerRpc(RequireOwnership = false)] - void KillAllEnemiesServerRpc(ServerRpcParams serverRpcParams = default) + [Rpc(SendTo.Server, RequireOwnership = false)] + void ServerKillAllEnemiesRpc(RpcParams serverRpcParams = default) { foreach (var serverCharacter in FindObjectsOfType()) { @@ -187,8 +186,8 @@ void KillAllEnemiesServerRpc(ServerRpcParams serverRpcParams = default) PublishCheatUsedMessage(serverRpcParams.Receive.SenderClientId, "KillAllEnemies"); } - [ServerRpc(RequireOwnership = false)] - void ToggleGodModeServerRpc(ServerRpcParams serverRpcParams = default) + [Rpc(SendTo.Server, RequireOwnership = false)] + void ServerToggleGodModeRpc(RpcParams serverRpcParams = default) { var clientId = serverRpcParams.Receive.SenderClientId; var playerServerCharacter = PlayerServerCharacter.GetPlayerServerCharacter(clientId); @@ -199,8 +198,8 @@ void ToggleGodModeServerRpc(ServerRpcParams serverRpcParams = default) } } - [ServerRpc(RequireOwnership = false)] - void HealPlayerServerRpc(ServerRpcParams serverRpcParams = default) + [Rpc(SendTo.Server, RequireOwnership = false)] + void ServerHealPlayerRpc(RpcParams serverRpcParams = default) { var clientId = serverRpcParams.Receive.SenderClientId; var playerServerCharacter = PlayerServerCharacter.GetPlayerServerCharacter(clientId); @@ -222,8 +221,8 @@ void HealPlayerServerRpc(ServerRpcParams serverRpcParams = default) } } - [ServerRpc(RequireOwnership = false)] - void ToggleSuperSpeedServerRpc(ServerRpcParams serverRpcParams = default) + [Rpc(SendTo.Server, RequireOwnership = false)] + void ServerToggleSuperSpeedRpc(RpcParams serverRpcParams = default) { var clientId = serverRpcParams.Receive.SenderClientId; foreach (var playerServerCharacter in PlayerServerCharacter.GetPlayerServerCharacters()) @@ -237,8 +236,8 @@ void ToggleSuperSpeedServerRpc(ServerRpcParams serverRpcParams = default) PublishCheatUsedMessage(clientId, "ToggleSuperSpeed"); } - [ServerRpc(RequireOwnership = false)] - void ToggleTeleportModeServerRpc(ServerRpcParams serverRpcParams = default) + [Rpc(SendTo.Server, RequireOwnership = false)] + void ServerToggleTeleportModeRpc(RpcParams serverRpcParams = default) { var clientId = serverRpcParams.Receive.SenderClientId; foreach (var playerServerCharacter in PlayerServerCharacter.GetPlayerServerCharacters()) @@ -252,8 +251,8 @@ void ToggleTeleportModeServerRpc(ServerRpcParams serverRpcParams = default) PublishCheatUsedMessage(serverRpcParams.Receive.SenderClientId, "ToggleTeleportMode"); } - [ServerRpc(RequireOwnership = false)] - void ToggleDoorServerRpc(ServerRpcParams serverRpcParams = default) + [Rpc(SendTo.Server, RequireOwnership = false)] + void ServerToggleDoorRpc(RpcParams serverRpcParams = default) { if (SwitchedDoor != null) { @@ -266,8 +265,8 @@ void ToggleDoorServerRpc(ServerRpcParams serverRpcParams = default) } } - [ServerRpc(RequireOwnership = false)] - void TogglePortalsServerRpc(ServerRpcParams serverRpcParams = default) + [Rpc(SendTo.Server, RequireOwnership = false)] + void ServerTogglePortalsRpc(RpcParams serverRpcParams = default) { foreach (var portal in FindObjectsOfType()) { @@ -288,8 +287,8 @@ void TogglePortalsServerRpc(ServerRpcParams serverRpcParams = default) PublishCheatUsedMessage(serverRpcParams.Receive.SenderClientId, "TogglePortals"); } - [ServerRpc(RequireOwnership = false)] - void GoToPostGameServerRpc(ServerRpcParams serverRpcParams = default) + [Rpc(SendTo.Server, RequireOwnership = false)] + void GoToPostGameServerRpc(RpcParams serverRpcParams = default) { SceneLoaderWrapper.Instance.LoadScene("PostGame", useNetworkSceneManager: true); PublishCheatUsedMessage(serverRpcParams.Receive.SenderClientId, "GoToPostGame"); diff --git a/Assets/Scripts/Gameplay/GameState/ClientCharSelectState.cs b/Assets/Scripts/Gameplay/GameState/ClientCharSelectState.cs index 8cf7a34655..199517d27b 100644 --- a/Assets/Scripts/Gameplay/GameState/ClientCharSelectState.cs +++ b/Assets/Scripts/Gameplay/GameState/ClientCharSelectState.cs @@ -416,7 +416,7 @@ public void OnPlayerClickedSeat(int seatIdx) { if (m_NetworkCharSelection.IsSpawned) { - m_NetworkCharSelection.ChangeSeatServerRpc(NetworkManager.Singleton.LocalClientId, seatIdx, false); + m_NetworkCharSelection.ServerChangeSeatRpc(NetworkManager.Singleton.LocalClientId, seatIdx, false); } } @@ -428,7 +428,7 @@ public void OnPlayerClickedReady() if (m_NetworkCharSelection.IsSpawned) { // request to lock in or unlock if already locked in - m_NetworkCharSelection.ChangeSeatServerRpc(NetworkManager.Singleton.LocalClientId, m_LastSeatSelected, !m_HasLocalPlayerLockedIn); + m_NetworkCharSelection.ServerChangeSeatRpc(NetworkManager.Singleton.LocalClientId, m_LastSeatSelected, !m_HasLocalPlayerLockedIn); } } diff --git a/Assets/Scripts/Gameplay/GameState/NetworkCharSelection.cs b/Assets/Scripts/Gameplay/GameState/NetworkCharSelection.cs index a56e4bc722..ddc3990192 100644 --- a/Assets/Scripts/Gameplay/GameState/NetworkCharSelection.cs +++ b/Assets/Scripts/Gameplay/GameState/NetworkCharSelection.cs @@ -105,8 +105,8 @@ private void Awake() /// /// RPC to notify the server that a client has chosen a seat. /// - [ServerRpc(RequireOwnership = false)] - public void ChangeSeatServerRpc(ulong clientId, int seatIdx, bool lockedIn) + [Rpc(SendTo.Server, RequireOwnership = false)] + public void ServerChangeSeatRpc(ulong clientId, int seatIdx, bool lockedIn) { OnClientChangedSeat?.Invoke(clientId, seatIdx, lockedIn); } diff --git a/Assets/Scripts/Gameplay/GameplayObjects/Character/ClientCharacter.cs b/Assets/Scripts/Gameplay/GameplayObjects/Character/ClientCharacter.cs index c59a048846..9af48869d5 100644 --- a/Assets/Scripts/Gameplay/GameplayObjects/Character/ClientCharacter.cs +++ b/Assets/Scripts/Gameplay/GameplayObjects/Character/ClientCharacter.cs @@ -69,8 +69,8 @@ public class ClientCharacter : NetworkBehaviour /// /// Server to Client RPC that broadcasts this action play to all clients. /// /// Data about which action to play and its associated details. - [ClientRpc] - public void RecvDoActionClientRPC(ActionRequestData data) + [Rpc(SendTo.ClientsAndHost)] + public void ClientPlayActionRpc(ActionRequestData data) { ActionRequestData data1 = data; m_ClientActionViz.PlayAction(ref data1); @@ -79,8 +79,8 @@ public void RecvDoActionClientRPC(ActionRequestData data) /// /// This RPC is invoked on the client when the active action FXs need to be cancelled (e.g. when the character has been stunned) /// - [ClientRpc] - public void RecvCancelAllActionsClientRpc() + [Rpc(SendTo.ClientsAndHost)] + public void ClientCancelAllActionsRpc() { m_ClientActionViz.CancelAllActions(); } @@ -88,8 +88,8 @@ public void RecvCancelAllActionsClientRpc() /// /// This RPC is invoked on the client when active action FXs of a certain type need to be cancelled (e.g. when the Stealth action ends) /// - [ClientRpc] - public void RecvCancelActionsByPrototypeIDClientRpc(ActionID actionPrototypeID) + [Rpc(SendTo.ClientsAndHost)] + public void ClientCancelActionsByPrototypeIDRpc(ActionID actionPrototypeID) { m_ClientActionViz.CancelAllActionsWithSamePrototypeID(actionPrototypeID); } @@ -98,8 +98,8 @@ public void RecvCancelActionsByPrototypeIDClientRpc(ActionID actionPrototypeID) /// Called on all clients when this character has stopped "charging up" an attack. /// Provides a value between 0 and 1 inclusive which indicates how "charged up" the attack ended up being. /// - [ClientRpc] - public void RecvStopChargingUpClientRpc(float percentCharged) + [Rpc(SendTo.ClientsAndHost)] + public void ClientStopChargingUpRpc(float percentCharged) { m_ClientActionViz.OnStoppedChargingUp(percentCharged); } diff --git a/Assets/Scripts/Gameplay/GameplayObjects/Character/ServerCharacter.cs b/Assets/Scripts/Gameplay/GameplayObjects/Character/ServerCharacter.cs index 619ec9217a..3edac2f84b 100644 --- a/Assets/Scripts/Gameplay/GameplayObjects/Character/ServerCharacter.cs +++ b/Assets/Scripts/Gameplay/GameplayObjects/Character/ServerCharacter.cs @@ -1,4 +1,3 @@ -using System; using System.Collections; using Unity.BossRoom.ConnectionManagement; using Unity.BossRoom.Gameplay.Actions; @@ -188,8 +187,8 @@ public override void OnNetworkDespawn() /// RPC to send inputs for this character from a client to a server. /// /// The position which this character should move towards. - [ServerRpc] - public void SendCharacterInputServerRpc(Vector3 movementTarget) + [Rpc(SendTo.Server)] + public void ServerSendCharacterInputRpc(Vector3 movementTarget) { if (LifeState == LifeState.Alive && !m_Movement.IsPerformingForcedMovement()) { @@ -213,8 +212,8 @@ public void SendCharacterInputServerRpc(Vector3 movementTarget) /// Client->Server RPC that sends a request to play an action. /// /// Data about which action to play and its associated details. - [ServerRpc] - public void RecvDoActionServerRPC(ActionRequestData data) + [Rpc(SendTo.Server)] + public void ServerPlayActionRpc(ActionRequestData data) { ActionRequestData data1 = data; if (!GameDataSource.Instance.GetActionPrototypeByID(data1.ActionID).Config.IsFriendly) @@ -231,8 +230,8 @@ public void RecvDoActionServerRPC(ActionRequestData data) /// /// Called on server when the character's client decides they have stopped "charging up" an attack. /// - [ServerRpc] - public void RecvStopChargingUpServerRpc() + [Rpc(SendTo.Server)] + public void ServerStopChargingUpRpc() { m_ServerActionPlayer.OnGameplayActivity(Action.GameplayActivity.StoppedChargingUp); } diff --git a/Assets/Scripts/Gameplay/GameplayObjects/Projectiles/PhysicsProjectile.cs b/Assets/Scripts/Gameplay/GameplayObjects/Projectiles/PhysicsProjectile.cs index 34ae2792a9..6701f6a44c 100644 --- a/Assets/Scripts/Gameplay/GameplayObjects/Projectiles/PhysicsProjectile.cs +++ b/Assets/Scripts/Gameplay/GameplayObjects/Projectiles/PhysicsProjectile.cs @@ -204,7 +204,7 @@ void DetectCollisions() var targetNetObj = m_CollisionCache[i].GetComponentInParent(); if (targetNetObj) { - RecvHitEnemyClientRPC(targetNetObj.NetworkObjectId); + ClientHitEnemyRpc(targetNetObj.NetworkObjectId); //retrieve the person that created us, if he's still around. NetworkManager.Singleton.SpawnManager.SpawnedObjects.TryGetValue(m_SpawnerId, out var spawnerNet); @@ -224,8 +224,8 @@ void DetectCollisions() } } - [ClientRpc] - private void RecvHitEnemyClientRPC(ulong enemyId) + [Rpc(SendTo.ClientsAndHost)] + private void ClientHitEnemyRpc(ulong enemyId) { //in the future we could do quite fancy things, like deparenting the Graphics Arrow and parenting it to the target. //For the moment we play some particles (optionally), and cause the target to animate a hit-react. diff --git a/Assets/Scripts/Gameplay/GameplayObjects/TossedItem.cs b/Assets/Scripts/Gameplay/GameplayObjects/TossedItem.cs index 77f5e74739..ea67187979 100644 --- a/Assets/Scripts/Gameplay/GameplayObjects/TossedItem.cs +++ b/Assets/Scripts/Gameplay/GameplayObjects/TossedItem.cs @@ -113,13 +113,13 @@ void Detonate() } // send client RPC to detonate on clients - DetonateClientRpc(); + ClientDetonateRpc(); m_Detonated = true; } - [ClientRpc] - void DetonateClientRpc() + [Rpc(SendTo.ClientsAndHost)] + void ClientDetonateRpc() { detonatedCallback?.Invoke(); } diff --git a/Assets/Scripts/Gameplay/UserInput/ClientInputSender.cs b/Assets/Scripts/Gameplay/UserInput/ClientInputSender.cs index 7dc81ef4b8..5dd2f0df1d 100644 --- a/Assets/Scripts/Gameplay/UserInput/ClientInputSender.cs +++ b/Assets/Scripts/Gameplay/UserInput/ClientInputSender.cs @@ -207,7 +207,7 @@ void FinishSkill() void SendInput(ActionRequestData action) { ActionInputEvent?.Invoke(action); - m_ServerCharacter.RecvDoActionServerRPC(action); + m_ServerCharacter.ServerPlayActionRpc(action); } void FixedUpdate() @@ -273,7 +273,7 @@ void FixedUpdate() k_MaxNavMeshDistance, NavMesh.AllAreas)) { - m_ServerCharacter.SendCharacterInputServerRpc(hit.position); + m_ServerCharacter.ServerSendCharacterInputRpc(hit.position); //Send our client only click request ClientMoveEvent?.Invoke(hit.position); diff --git a/Assets/Scripts/Utils/NetworkOverlay/NetworkStats.cs b/Assets/Scripts/Utils/NetworkOverlay/NetworkStats.cs index e8cf39293d..d8d6ec3111 100644 --- a/Assets/Scripts/Utils/NetworkOverlay/NetworkStats.cs +++ b/Assets/Scripts/Utils/NetworkOverlay/NetworkStats.cs @@ -59,7 +59,7 @@ public ExponentialMovingAverageCalculator(float average) Dictionary m_PingHistoryStartTimes = new Dictionary(); - ClientRpcParams m_PongClientParams; + RpcParams m_PongClientParams; string m_TextToDisplay; @@ -77,7 +77,7 @@ public override void OnNetworkSpawn() CreateNetworkStatsText(); } - m_PongClientParams = new ClientRpcParams() { Send = new ClientRpcSendParams() { TargetClientIds = new[] { OwnerClientId } } }; + m_PongClientParams = RpcTarget.Group(new[] { OwnerClientId }, RpcTargetUse.Persistent); } // Creating a UI text object and add it to NetworkOverlay canvas @@ -100,7 +100,7 @@ void FixedUpdate() { // We could have had a ping/pong where the ping sends the pong and the pong sends the ping. Issue with this // is the higher the latency, the lower the sampling would be. We need pings to be sent at a regular interval - PingServerRPC(m_CurrentRTTPingId); + ServerPingRpc(m_CurrentRTTPingId); m_PingHistoryStartTimes[m_CurrentRTTPingId] = Time.realtimeSinceStartup; m_CurrentRTTPingId++; m_LastPingTime = Time.realtimeSinceStartup; @@ -146,14 +146,14 @@ void FixedUpdate() } } - [ServerRpc] - void PingServerRPC(int pingId, ServerRpcParams serverParams = default) + [Rpc(SendTo.Server)] + void ServerPingRpc(int pingId, RpcParams serverParams = default) { - PongClientRPC(pingId, m_PongClientParams); + ClientPongRpc(pingId, m_PongClientParams); } - [ClientRpc] - void PongClientRPC(int pingId, ClientRpcParams clientParams = default) + [Rpc(SendTo.SpecifiedInParams)] + void ClientPongRpc(int pingId, RpcParams clientParams = default) { var startTime = m_PingHistoryStartTimes[pingId]; m_PingHistoryStartTimes.Remove(pingId); diff --git a/CHANGELOG.md b/CHANGELOG.md index 12be9fead7..e3c345d808 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) Additional documentation and release notes are available at [Multiplayer Documentation](https://docs-multiplayer.unity3d.com). -## [Unreleased] +## [Unreleased] - yyyy-mm-dd + +### Changed +* Upgraded to Boss Room to Netcode for GameObjects v1.8.1 (#883) + * Upgraded to the newer API for Rpcs, Universal Rpcs + * ClientConnectedState has been modified to account for server/host now populating DisconnectReason before disconnecting a client before shutting down ### Cleanup * Removed NetworkObject from MainMenuState (#881) @@ -14,7 +19,6 @@ Additional documentation and release notes are available at [Multiplayer Documen ### Fixed * Added Null reference check to ClientInputSender to fix null reference for missing ability (#880) - ## [2.4.0] - 2023-12-13 ### Fixed diff --git a/Packages/com.unity.multiplayer.samples.coop/CHANGELOG.md b/Packages/com.unity.multiplayer.samples.coop/CHANGELOG.md index 339f8624ed..d707bac2b0 100644 --- a/Packages/com.unity.multiplayer.samples.coop/CHANGELOG.md +++ b/Packages/com.unity.multiplayer.samples.coop/CHANGELOG.md @@ -1,5 +1,12 @@ # Multiplayer Samples Co-op Changelog +## [unreleased] - yyyy-mm-dd + +### Changed +* Upgraded Utilities package to Netcode for GameObjects v1.8.1 (#883) + * Upgraded to the newer API for Rpcs, Universal Rpcs + * Unity.Multiplayer.Samples.Utilities assembly definition now includes Unity.Collections + ## [1.8.0] - 2023-12-13 ### Changed diff --git a/Packages/com.unity.multiplayer.samples.coop/Utilities/SceneManagement/LoadingProgressManager.cs b/Packages/com.unity.multiplayer.samples.coop/Utilities/SceneManagement/LoadingProgressManager.cs index e92a8d3bcb..2a333c6440 100644 --- a/Packages/com.unity.multiplayer.samples.coop/Utilities/SceneManagement/LoadingProgressManager.cs +++ b/Packages/com.unity.multiplayer.samples.coop/Utilities/SceneManagement/LoadingProgressManager.cs @@ -101,8 +101,8 @@ void Update() } } - [ClientRpc] - void UpdateTrackersClientRpc() + [Rpc(SendTo.ClientsAndHost)] + void ClientUpdateTrackersRpc() { if (!IsHost) { @@ -131,7 +131,7 @@ void AddTracker(ulong clientId) var networkObject = tracker.GetComponent(); networkObject.SpawnWithOwnership(clientId); ProgressTrackers[clientId] = tracker.GetComponent(); - UpdateTrackersClientRpc(); + ClientUpdateTrackersRpc(); } } @@ -144,7 +144,7 @@ void RemoveTracker(ulong clientId) var tracker = ProgressTrackers[clientId]; ProgressTrackers.Remove(clientId); tracker.NetworkObject.Despawn(); - UpdateTrackersClientRpc(); + ClientUpdateTrackersRpc(); } } } diff --git a/Packages/com.unity.multiplayer.samples.coop/Utilities/SceneManagement/SceneLoaderWrapper.cs b/Packages/com.unity.multiplayer.samples.coop/Utilities/SceneManagement/SceneLoaderWrapper.cs index 7e8934e8f2..8104ecb20d 100644 --- a/Packages/com.unity.multiplayer.samples.coop/Utilities/SceneManagement/SceneLoaderWrapper.cs +++ b/Packages/com.unity.multiplayer.samples.coop/Utilities/SceneManagement/SceneLoaderWrapper.cs @@ -1,4 +1,3 @@ -using System; using Unity.Netcode; using UnityEngine; using UnityEngine.SceneManagement; @@ -181,7 +180,7 @@ void OnSceneEvent(SceneEvent sceneEvent) if (NetworkManager.IsServer) { // Send client RPC to make sure the client stops the loading screen after the server handles what it needs to after the client finished synchronizing, for example character spawning done server side should still be hidden by loading screen. - StopLoadingScreenClientRpc(new ClientRpcParams { Send = new ClientRpcSendParams { TargetClientIds = new[] { sceneEvent.ClientId } } }); + ClientStopLoadingScreenRpc(RpcTarget.Group(new[] { sceneEvent.ClientId }, RpcTargetUse.Temp)); } break; } @@ -200,8 +199,8 @@ void UnloadAdditiveScenes() } } - [ClientRpc] - void StopLoadingScreenClientRpc(ClientRpcParams clientRpcParams = default) + [Rpc(SendTo.SpecifiedInParams)] + void ClientStopLoadingScreenRpc(RpcParams clientRpcParams = default) { m_ClientLoadingScreen.StopLoadingScreen(); } diff --git a/Packages/com.unity.multiplayer.samples.coop/Utilities/com.unity.multiplayer.samples.utilities.asmdef b/Packages/com.unity.multiplayer.samples.coop/Utilities/com.unity.multiplayer.samples.utilities.asmdef index 1eb22a2a7a..203c3c9839 100644 --- a/Packages/com.unity.multiplayer.samples.coop/Utilities/com.unity.multiplayer.samples.utilities.asmdef +++ b/Packages/com.unity.multiplayer.samples.coop/Utilities/com.unity.multiplayer.samples.utilities.asmdef @@ -4,7 +4,8 @@ "references": [ "Unity.Netcode.Components", "Unity.Netcode.Runtime", - "Unity.Services.Relay" + "Unity.Services.Relay", + "Unity.Collections" ], "includePlatforms": [], "excludePlatforms": [], @@ -15,4 +16,4 @@ "defineConstraints": [], "versionDefines": [], "noEngineReferences": false -} +} \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.samples.coop/package.json b/Packages/com.unity.multiplayer.samples.coop/package.json index d3c556cb93..789b298e26 100644 --- a/Packages/com.unity.multiplayer.samples.coop/package.json +++ b/Packages/com.unity.multiplayer.samples.coop/package.json @@ -9,7 +9,7 @@ "dependencies": { "com.unity.learn.iet-framework": "3.1.3", "com.unity.multiplayer.tools": "1.1.0", - "com.unity.netcode.gameobjects": "1.7.1", + "com.unity.netcode.gameobjects": "1.8.1", "com.unity.services.relay": "1.0.5" } } \ No newline at end of file diff --git a/Packages/manifest.json b/Packages/manifest.json index c4af97ddfc..309648c17d 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -10,7 +10,7 @@ "com.unity.learn.iet-framework": "3.1.3", "com.unity.memoryprofiler": "1.1.0", "com.unity.multiplayer.tools": "2.0.0-pre.3", - "com.unity.netcode.gameobjects": "1.7.1", + "com.unity.netcode.gameobjects": "1.8.1", "com.unity.performance.profile-analyzer": "1.2.2", "com.unity.postprocessing": "3.2.2", "com.unity.render-pipelines.universal": "14.0.9", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index e2f1af8184..1594b10bf1 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -123,7 +123,7 @@ "dependencies": { "com.unity.learn.iet-framework": "3.1.3", "com.unity.multiplayer.tools": "1.1.0", - "com.unity.netcode.gameobjects": "1.7.1", + "com.unity.netcode.gameobjects": "1.8.1", "com.unity.services.relay": "1.0.5" } }, @@ -143,7 +143,7 @@ "url": "https://packages.unity.com" }, "com.unity.netcode.gameobjects": { - "version": "1.7.1", + "version": "1.8.1", "depth": 0, "source": "registry", "dependencies": { diff --git a/README.md b/README.md index f08210ef5d..48cf55bb12 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@
[![UnityVersion](https://img.shields.io/badge/Unity%20Version:-2022.3%20LTS-57b9d3.svg?logo=unity&color=2196F3)](https://unity.com/releases/editor/whats-new/2022.3.0) -[![NetcodeVersion](https://img.shields.io/badge/Netcode%20Version:-1.7.1-57b9d3.svg?logo=unity&color=2196F3)](https://github.com/Unity-Technologies/com.unity.netcode.gameobjects/releases/tag/ngo%2F1.7.1) +[![NetcodeVersion](https://img.shields.io/badge/Netcode%20Version:-1.8.1-57b9d3.svg?logo=unity&color=2196F3)](https://github.com/Unity-Technologies/com.unity.netcode.gameobjects/releases/tag/ngo%2F1.8.1) [![LatestRelease](https://img.shields.io/badge/Latest%20Github%20Release:-v2.4.0-57b9d3.svg?logo=github&color=brightgreen)](https://github.com/Unity-Technologies/com.unity.multiplayer.samples.coop/releases/tag/v2.4.0)