diff --git a/com.unity.netcode.gameobjects/Runtime/Components/NetworkAnimator.cs b/com.unity.netcode.gameobjects/Runtime/Components/NetworkAnimator.cs
index 7d82872890..c77990b350 100644
--- a/com.unity.netcode.gameobjects/Runtime/Components/NetworkAnimator.cs
+++ b/com.unity.netcode.gameobjects/Runtime/Components/NetworkAnimator.cs
@@ -14,8 +14,8 @@ namespace Unity.Netcode.Components
{
internal class NetworkAnimatorStateChangeHandler : INetworkUpdateSystem
{
- private NetworkAnimator m_NetworkAnimator;
- private bool m_IsServer;
+ private readonly NetworkAnimator m_NetworkAnimator;
+ private readonly bool m_IsServer;
///
/// This removes sending RPCs from within RPCs when the
@@ -132,14 +132,14 @@ private struct AnimationUpdate
public NetworkAnimator.AnimationMessage AnimationMessage;
}
- private List m_SendAnimationUpdates = new List();
+ private readonly List m_SendAnimationUpdates = new List();
///
/// Invoked when a server needs to forwarding an update to the animation state
///
internal void SendAnimationUpdate(NetworkAnimator.AnimationMessage animationMessage, RpcParams rpcParams = default)
{
- m_SendAnimationUpdates.Add(new AnimationUpdate() { RpcParams = rpcParams, AnimationMessage = animationMessage });
+ m_SendAnimationUpdates.Add(new AnimationUpdate { RpcParams = rpcParams, AnimationMessage = animationMessage });
}
private struct ParameterUpdate
@@ -148,17 +148,17 @@ private struct ParameterUpdate
public NetworkAnimator.ParametersUpdateMessage ParametersUpdateMessage;
}
- private List m_SendParameterUpdates = new List();
+ private readonly List m_SendParameterUpdates = new List();
///
/// Invoked when a server needs to forwarding an update to the parameter state
///
internal void SendParameterUpdate(NetworkAnimator.ParametersUpdateMessage parametersUpdateMessage, RpcParams rpcParams = default)
{
- m_SendParameterUpdates.Add(new ParameterUpdate() { RpcParams = rpcParams, ParametersUpdateMessage = parametersUpdateMessage });
+ m_SendParameterUpdates.Add(new ParameterUpdate { RpcParams = rpcParams, ParametersUpdateMessage = parametersUpdateMessage });
}
- private List m_ProcessParameterUpdates = new List();
+ private readonly List m_ProcessParameterUpdates = new List();
internal void ProcessParameterUpdate(NetworkAnimator.ParametersUpdateMessage parametersUpdateMessage)
{
m_ProcessParameterUpdates.Add(parametersUpdateMessage);
@@ -171,31 +171,31 @@ private struct TriggerUpdate
public NetworkAnimator.AnimationTriggerMessage AnimationTriggerMessage;
}
- private List m_SendTriggerUpdates = new List();
+ private readonly List m_SendTriggerUpdates = new List();
///
/// Invoked when a server needs to forward an update to a Trigger state
///
internal void QueueTriggerUpdateToClient(NetworkAnimator.AnimationTriggerMessage animationTriggerMessage, RpcParams clientRpcParams = default)
{
- m_SendTriggerUpdates.Add(new TriggerUpdate() { RpcParams = clientRpcParams, AnimationTriggerMessage = animationTriggerMessage });
+ m_SendTriggerUpdates.Add(new TriggerUpdate { RpcParams = clientRpcParams, AnimationTriggerMessage = animationTriggerMessage });
}
internal void QueueTriggerUpdateToServer(NetworkAnimator.AnimationTriggerMessage animationTriggerMessage)
{
- m_SendTriggerUpdates.Add(new TriggerUpdate() { AnimationTriggerMessage = animationTriggerMessage, SendToServer = true });
+ m_SendTriggerUpdates.Add(new TriggerUpdate { AnimationTriggerMessage = animationTriggerMessage, SendToServer = true });
}
internal void DeregisterUpdate()
{
- NetworkUpdateLoop.UnregisterNetworkUpdate(this, NetworkUpdateStage.PreUpdate);
+ this.UnregisterNetworkUpdate(NetworkUpdateStage.PreUpdate);
}
internal NetworkAnimatorStateChangeHandler(NetworkAnimator networkAnimator)
{
m_NetworkAnimator = networkAnimator;
m_IsServer = networkAnimator.LocalNetworkManager.IsServer;
- NetworkUpdateLoop.RegisterNetworkUpdate(this, NetworkUpdateStage.PreUpdate);
+ this.RegisterNetworkUpdate(NetworkUpdateStage.PreUpdate);
}
}
@@ -213,7 +213,7 @@ public class NetworkAnimator : NetworkBehaviour, ISerializationCallbackReceiver
#endif
[Serializable]
- internal class TransitionStateinfo
+ internal class TransitionStateInfo
{
public bool IsCrossFadeExit;
public int Layer;
@@ -260,11 +260,8 @@ public enum AuthorityModes
///
public Animator Animator
{
- get { return m_Animator; }
- set
- {
- m_Animator = value;
- }
+ get => m_Animator;
+ set => m_Animator = value;
}
///
@@ -272,11 +269,11 @@ public Animator Animator
///
[HideInInspector]
[SerializeField]
- internal List TransitionStateInfoList;
+ internal List TransitionStateInfoList;
// Used to get the associated transition information required to synchronize late joining clients with transitions
// [Layer][DestinationState][TransitionStateInfo]
- private Dictionary> m_DestinationStateToTransitioninfo = new Dictionary>();
+ private readonly Dictionary> m_DestinationStateToTransitionInfo = new Dictionary>();
// Named differently to avoid serialization conflicts with NetworkBehaviour
internal NetworkManager LocalNetworkManager;
@@ -284,21 +281,15 @@ public Animator Animator
internal bool DistributedAuthorityMode;
///
- /// Builds the m_DestinationStateToTransitioninfo lookup table
+ /// Builds the lookup table
///
private void BuildDestinationToTransitionInfoTable()
{
foreach (var entry in TransitionStateInfoList)
{
- if (!m_DestinationStateToTransitioninfo.ContainsKey(entry.Layer))
- {
- m_DestinationStateToTransitioninfo.Add(entry.Layer, new Dictionary());
- }
- var destinationStateTransitionInfo = m_DestinationStateToTransitioninfo[entry.Layer];
- if (!destinationStateTransitionInfo.ContainsKey(entry.DestinationState))
- {
- destinationStateTransitionInfo.Add(entry.DestinationState, entry);
- }
+ m_DestinationStateToTransitionInfo.TryAdd(entry.Layer, new Dictionary());
+ var destinationStateTransitionInfo = m_DestinationStateToTransitionInfo[entry.Layer];
+ destinationStateTransitionInfo.TryAdd(entry.DestinationState, entry);
}
}
@@ -323,14 +314,14 @@ internal class AnimatorParametersListContainer
[SerializeField]
internal AnimatorParametersListContainer AnimatorParameterEntries;
- internal Dictionary AnimatorParameterEntryTable = new Dictionary();
+ private readonly Dictionary m_AnimatorParameterEntryTable = new Dictionary();
#if UNITY_EDITOR
[HideInInspector]
[SerializeField]
internal bool AnimatorParametersExpanded;
- internal Dictionary ParameterToNameLookup = new Dictionary();
+ private readonly Dictionary m_ParameterToNameLookup = new Dictionary();
private void ParseStateMachineStates(int layerIndex, ref AnimatorController animatorController, ref AnimatorStateMachine stateMachine)
{
@@ -371,7 +362,7 @@ private void ParseStateMachineStates(int layerIndex, ref AnimatorController anim
}
else if (transition.destinationState != null)
{
- var transitionInfo = new TransitionStateinfo()
+ var transitionInfo = new TransitionStateInfo()
{
Layer = layerIndex,
OriginatingState = animatorState.nameHash,
@@ -408,7 +399,7 @@ private void BuildTransitionStateInfoList()
return;
}
- TransitionStateInfoList = new List();
+ TransitionStateInfoList = new List();
var animControllerType = m_Animator.runtimeAnimatorController.GetType();
var animatorController = (AnimatorController)null;
@@ -433,7 +424,7 @@ private void BuildTransitionStateInfoList()
}
}
- internal void ProcessParameterEntries()
+ private void ProcessParameterEntries()
{
if (!Animator)
{
@@ -462,18 +453,18 @@ internal void ProcessParameterEntries()
var parameters = animatorController.parameters;
var parametersToRemove = new List();
- ParameterToNameLookup.Clear();
+ m_ParameterToNameLookup.Clear();
foreach (var parameter in parameters)
{
- ParameterToNameLookup.Add(parameter.nameHash, parameter);
+ m_ParameterToNameLookup.Add(parameter.nameHash, parameter);
}
// Rebuild the parameter entry table for the inspector view
- AnimatorParameterEntryTable.Clear();
+ m_AnimatorParameterEntryTable.Clear();
foreach (var parameterEntry in AnimatorParameterEntries.ParameterEntries)
{
// Check for removed parameters.
- if (!ParameterToNameLookup.ContainsKey(parameterEntry.NameHash))
+ if (!m_ParameterToNameLookup.ContainsKey(parameterEntry.NameHash))
{
parametersToRemove.Add(parameterEntry);
// Skip this removed entry
@@ -481,12 +472,9 @@ internal void ProcessParameterEntries()
}
// Build the list of known parameters
- if (!AnimatorParameterEntryTable.ContainsKey(parameterEntry.NameHash))
- {
- AnimatorParameterEntryTable.Add(parameterEntry.NameHash, parameterEntry);
- }
+ m_AnimatorParameterEntryTable.TryAdd(parameterEntry.NameHash, parameterEntry);
- var parameter = ParameterToNameLookup[parameterEntry.NameHash];
+ var parameter = m_ParameterToNameLookup[parameterEntry.NameHash];
parameterEntry.name = parameter.name;
parameterEntry.ParameterType = parameter.type;
}
@@ -498,9 +486,9 @@ internal void ProcessParameterEntries()
}
// Update any newly added parameters
- foreach (var parameterLookUp in ParameterToNameLookup)
+ foreach (var parameterLookUp in m_ParameterToNameLookup)
{
- if (!AnimatorParameterEntryTable.ContainsKey(parameterLookUp.Value.nameHash))
+ if (!m_AnimatorParameterEntryTable.ContainsKey(parameterLookUp.Value.nameHash))
{
var animatorParameterEntry = new AnimatorParameterEntry()
{
@@ -510,7 +498,7 @@ internal void ProcessParameterEntries()
Synchronize = true,
};
AnimatorParameterEntries.ParameterEntries.Add(animatorParameterEntry);
- AnimatorParameterEntryTable.Add(parameterLookUp.Value.nameHash, animatorParameterEntry);
+ m_AnimatorParameterEntryTable.Add(parameterLookUp.Value.nameHash, animatorParameterEntry);
}
}
}
@@ -602,7 +590,7 @@ public void NetworkSerialize(BufferSerializer serializer) where T : IReade
serializer.SerializeValue(ref NormalizedTime);
serializer.SerializeValue(ref Weight);
- // Cross fading includes the duration of the cross fade.
+ // Cross-fading includes the duration of the cross-fade.
if (CrossFade)
{
serializer.SerializeValue(ref Duration);
@@ -680,7 +668,6 @@ public void NetworkSerialize(BufferSerializer serializer) where T : IReade
/// Determines whether the is or based on the field.
/// Optionally, you can still derive from and override the method.
///
- /// or
public bool IsServerAuthoritative()
{
return OnIsServerAuthoritative();
@@ -788,7 +775,7 @@ protected virtual void Awake()
foreach (var parameterEntry in AnimatorParameterEntries.ParameterEntries)
{
- AnimatorParameterEntryTable.TryAdd(parameterEntry.NameHash, parameterEntry);
+ m_AnimatorParameterEntryTable.TryAdd(parameterEntry.NameHash, parameterEntry);
}
int layers = m_Animator.layerCount;
@@ -814,10 +801,7 @@ protected virtual void Awake()
// AnimationMessage.
m_AnimationMessage.AnimationStates.Add(new AnimationState());
float layerWeightNow = m_Animator.GetLayerWeight(layer);
- if (layerWeightNow != m_LayerWeights[layer])
- {
- m_LayerWeights[layer] = layerWeightNow;
- }
+ m_LayerWeights[layer] = layerWeightNow;
}
// The total initialization size calculated for the m_ParameterWriter write buffer.
@@ -835,9 +819,9 @@ protected virtual void Awake()
{
var parameter = parameters[i];
var synchronizeParameter = true;
- if (AnimatorParameterEntryTable.ContainsKey(parameter.nameHash))
+ if (m_AnimatorParameterEntryTable.TryGetValue(parameter.nameHash, out var entry))
{
- synchronizeParameter = AnimatorParameterEntryTable[parameter.nameHash].Synchronize;
+ synchronizeParameter = entry.Synchronize;
}
var cacheParam = new AnimatorParamCache
@@ -863,8 +847,6 @@ protected virtual void Awake()
var valueBool = m_Animator.GetBool(cacheParam.Hash);
UnsafeUtility.WriteArrayElement(cacheParam.Value, 0, valueBool);
break;
- default:
- break;
}
}
@@ -986,12 +968,12 @@ private void WriteSynchronizationData(ref BufferSerializer serializer) whe
var normalizedTime = synchronizationStateInfo.normalizedTime;
var isInTransition = m_Animator.IsInTransition(layer);
- // Grab one of the available AnimationState entries so we can fill it with the current
+ // Grab one of the available AnimationState entries, so we can fill it with the current
// layer's animation state.
var animationState = m_AnimationMessage.AnimationStates[layer];
// Synchronizing transitions with trigger conditions for late joining clients is now
- // handled by cross fading between the late joining client's current layer's AnimationState
+ // handled by cross-fading between the late joining client's current layer's AnimationState
// and the transition's destination AnimationState.
if (isInTransition)
{
@@ -1014,14 +996,14 @@ private void WriteSynchronizationData(ref BufferSerializer serializer) whe
stateHash = nextState.fullPathHash;
// Use the destination state to transition info lookup table to see if this is a transition we can
- // synchronize using cross fading
- if (m_DestinationStateToTransitioninfo.ContainsKey(layer))
+ // synchronize using cross-fading
+ if (m_DestinationStateToTransitionInfo.ContainsKey(layer))
{
- if (m_DestinationStateToTransitioninfo[layer].ContainsKey(nextState.shortNameHash))
+ if (m_DestinationStateToTransitionInfo[layer].ContainsKey(nextState.shortNameHash))
{
- var destinationInfo = m_DestinationStateToTransitioninfo[layer][nextState.shortNameHash];
+ var destinationInfo = m_DestinationStateToTransitionInfo[layer][nextState.shortNameHash];
stateHash = destinationInfo.OriginatingState;
- // Set the destination state to cross fade to from the originating state
+ // Set the destination state to cross-fade to from the originating state
animationState.DestinationStateHash = destinationInfo.DestinationState;
}
}
@@ -1070,7 +1052,7 @@ protected override void OnSynchronize(ref BufferSerializer serializer)
///
/// Checks for animation state changes in:
/// -Layer weights
- /// -Cross fades
+ /// -Cross-fades
/// -Transitions
/// -Layer AnimationStates
///
@@ -1104,7 +1086,7 @@ private void CheckForStateChange(int layer)
{
m_TransitionHash[layer] = nt.fullPathHash;
m_AnimationHash[layer] = 0;
- // Next state is the destination state for cross fade
+ // Next state is the destination state for cross-fade
animState.DestinationStateHash = nt.fullPathHash;
animState.CrossFade = true;
animState.Transition = true;
@@ -1117,8 +1099,8 @@ private void CheckForStateChange(int layer)
// current layer (i.e. transitioning into a state from another layer) =or= we do contain the layer and the layer contains state to transition to is contained within our pre-built destination
// state then we can handle this transition as a non-cross fade state transition between layers.
// Otherwise, if we don't enter into this then this is a "trigger transition to some state that is now being transitioned back to the Idle state via trigger" or "Dual Triggers" IDLE<-->State.
- else if (!tt.anyState && tt.fullPathHash != m_TransitionHash[layer] && (!m_DestinationStateToTransitioninfo.ContainsKey(layer) ||
- (m_DestinationStateToTransitioninfo.ContainsKey(layer) && m_DestinationStateToTransitioninfo[layer].ContainsKey(nt.fullPathHash))))
+ else if (!tt.anyState && tt.fullPathHash != m_TransitionHash[layer] && (!m_DestinationStateToTransitionInfo.ContainsKey(layer) ||
+ (m_DestinationStateToTransitionInfo.ContainsKey(layer) && m_DestinationStateToTransitionInfo[layer].ContainsKey(nt.fullPathHash))))
{
// first time in this transition for this layer
m_TransitionHash[layer] = tt.fullPathHash;
@@ -1128,7 +1110,7 @@ private void CheckForStateChange(int layer)
animState.CrossFade = false;
animState.Transition = true;
animState.NormalizedTime = tt.normalizedTime;
- if (m_DestinationStateToTransitioninfo.ContainsKey(layer) && m_DestinationStateToTransitioninfo[layer].ContainsKey(nt.fullPathHash))
+ if (m_DestinationStateToTransitionInfo.ContainsKey(layer) && m_DestinationStateToTransitionInfo[layer].ContainsKey(nt.fullPathHash))
{
animState.DestinationStateHash = nt.fullPathHash;
}
@@ -1189,9 +1171,6 @@ internal void CheckForAnimatorChanges()
// This sends updates only if a layer's state has changed
for (int layer = 0; layer < m_Animator.layerCount; layer++)
{
- AnimatorStateInfo st = m_Animator.GetCurrentAnimatorStateInfo(layer);
- var totalSpeed = st.speed * st.speedMultiplier;
- var adjustedNormalizedMaxTime = totalSpeed > 0.0f ? 1.0f / totalSpeed : 0.0f;
CheckForStateChange(layer);
}
@@ -1337,8 +1316,8 @@ private unsafe bool CheckParametersChanged()
}
///
- /// Writes all of the Animator's parameters
- /// This uses the m_ParametersToUpdate list to write out only
+ /// Writes all the Animator's parameters
+ /// This uses the list to write out only
/// the parameters that have changed
///
private unsafe void WriteParameters(ref FastBufferWriter writer)
@@ -1368,7 +1347,7 @@ private unsafe void WriteParameters(ref FastBufferWriter writer)
BytePacker.WriteValuePacked(writer, (uint)valueInt);
}
}
- else // Note: Triggers are treated like boolean values
+ else
if (cacheValue.Type == AnimationParamEnumWrapper.AnimatorControllerParameterBool)
{
var valueBool = m_Animator.GetBool(hash);
@@ -1453,7 +1432,7 @@ internal unsafe void UpdateParameters(ref ParametersUpdateMessage parametersUpda
///
/// Applies the AnimationState state to the Animator
///
- internal void UpdateAnimationState(AnimationState animationState)
+ private void UpdateAnimationState(AnimationState animationState)
{
// Handle updating layer weights first.
if (animationState.Layer < m_LayerWeights.Length)
@@ -1477,18 +1456,18 @@ internal void UpdateAnimationState(AnimationState animationState)
{
// We should have all valid entries for any animation state transition update
// Verify the AnimationState's assigned Layer exists
- if (m_DestinationStateToTransitioninfo.ContainsKey(animationState.Layer))
+ if (m_DestinationStateToTransitionInfo.ContainsKey(animationState.Layer))
{
// Verify the inner-table has the destination AnimationState name hash
- if (m_DestinationStateToTransitioninfo[animationState.Layer].ContainsKey(animationState.DestinationStateHash))
+ if (m_DestinationStateToTransitionInfo[animationState.Layer].ContainsKey(animationState.DestinationStateHash))
{
- // Make sure we are on the originating/starting state we are going to cross fade into
+ // Make sure we are on the originating/starting state we are going to cross-fade into
if (currentState.shortNameHash == animationState.StateHash)
{
// Get the transition state information
- var transitionStateInfo = m_DestinationStateToTransitioninfo[animationState.Layer][animationState.DestinationStateHash];
+ var transitionStateInfo = m_DestinationStateToTransitionInfo[animationState.Layer][animationState.DestinationStateHash];
- // Cross fade from the current to the destination state for the transitions duration while starting at the server's current normalized time of the transition
+ // Cross-fade from the current to the destination state for the transitions duration while starting at the server's current normalized time of the transition
m_Animator.CrossFade(transitionStateInfo.DestinationState, transitionStateInfo.TransitionDuration, transitionStateInfo.Layer, 0.0f, animationState.NormalizedTime);
}
else if (LocalNetworkManager.LogLevel == LogLevel.Developer)
@@ -1526,7 +1505,7 @@ internal void UpdateAnimationState(AnimationState animationState)
/// The server sets its local parameters and then forwards the message to the remaining clients
///
[Rpc(SendTo.Server, AllowTargetOverride = true, InvokePermission = RpcInvokePermission.Owner)]
- private unsafe void SendServerParametersUpdateRpc(ParametersUpdateMessage parametersUpdate, RpcParams rpcParams = default)
+ private void SendServerParametersUpdateRpc(ParametersUpdateMessage parametersUpdate, RpcParams rpcParams = default)
{
if (IsServerAuthoritative())
{
@@ -1708,9 +1687,6 @@ internal void SendServerAnimTriggerRpc(AnimationTriggerMessage animationTriggerM
}
}
- ///
- /// See above
- ///
private void InternalSetTrigger(int hash, bool isSet = true)
{
m_Animator.SetBool(hash, isSet);
@@ -1721,6 +1697,7 @@ private void InternalSetTrigger(int hash, bool isSet = true)
/// to forward a trigger to a client
///
/// the payload containing the trigger data to apply
+ ///
[Rpc(SendTo.NotAuthority, AllowTargetOverride = true, InvokePermission = RpcInvokePermission.Owner)]
internal void SendAnimTriggerRpc(AnimationTriggerMessage animationTriggerMessage, RpcParams rpcParams = default)
{
@@ -1732,7 +1709,7 @@ internal void SendAnimTriggerRpc(AnimationTriggerMessage animationTriggerMessage
/// a trigger to a client
///
/// the payload containing the trigger data to apply
- /// unused
+ /// unused
[Rpc(SendTo.NotServer, AllowTargetOverride = true)]
internal void SendClientAnimTriggerRpc(AnimationTriggerMessage animationTriggerMessage, RpcParams rpcParams = default)
{
@@ -1775,13 +1752,11 @@ public void SetTrigger(int hash, bool setTrigger = true)
{
if (IsServer)
{
- /// as to why we queue
m_NetworkAnimatorStateChangeHandler.QueueTriggerUpdateToClient(animTriggerMessage);
InternalSetTrigger(hash, setTrigger);
}
else
{
- /// as to why we queue
m_NetworkAnimatorStateChangeHandler.QueueTriggerUpdateToServer(animTriggerMessage);
if (!IsServerAuthoritative())
{