Skip to content

Commit

Permalink
feat: Network Animator can reset triggers (#1420)
Browse files Browse the repository at this point in the history
  • Loading branch information
MrGadget authored and paulpach committed Jan 11, 2020
1 parent 7d472f2 commit dffdf02
Showing 1 changed file with 54 additions and 1 deletion.
55 changes: 54 additions & 1 deletion Assets/Mirror/Components/NetworkAnimator.cs
Expand Up @@ -199,6 +199,11 @@ void HandleAnimTriggerMsg(int hash)
animator.SetTrigger(hash);
}

void HandleAnimResetTriggerMsg(int hash)
{
animator.ResetTrigger(hash);
}

ulong NextDirtyBits()
{
ulong dirtyBits = 0;
Expand Down Expand Up @@ -358,6 +363,16 @@ public void SetTrigger(string triggerName)
SetTrigger(Animator.StringToHash(triggerName));
}

/// <summary>
/// Causes an animation trigger to be reset for a networked object.
/// <para>If local authority is set, and this is called from the client, then the trigger will be reset on the server and all clients. If not, then this is called on the server, and the trigger will be reset on all clients.</para>
/// </summary>
/// <param name="triggerName">Name of trigger.</param>
public void ResetTrigger(string triggerName)
{
ResetTrigger(Animator.StringToHash(triggerName));
}

/// <summary>
/// Causes an animation trigger to be invoked for a networked object.
/// </summary>
Expand All @@ -379,7 +394,29 @@ public void SetTrigger(int hash)
}
}

/// <summary>
/// Causes an animation trigger to be reset for a networked object.
/// </summary>
/// <param name="hash">Hash id of trigger (from the Animator).</param>
public void ResetTrigger(int hash)
{
if (hasAuthority && clientAuthority)
{
if (ClientScene.readyConnection != null)
{
CmdOnAnimationResetTriggerServerMessage(hash);
}
return;
}

if (isServer && !clientAuthority)
{
RpcOnAnimationResetTriggerClientMessage(hash);
}
}

#region server message handlers

[Command]
void CmdOnAnimationServerMessage(int stateHash, float normalizedTime, int layerId, byte[] parameters)
{
Expand All @@ -405,9 +442,19 @@ void CmdOnAnimationTriggerServerMessage(int hash)
HandleAnimTriggerMsg(hash);
RpcOnAnimationTriggerClientMessage(hash);
}

[Command]
void CmdOnAnimationResetTriggerServerMessage(int hash)
{
// handle and broadcast
HandleAnimResetTriggerMsg(hash);
RpcOnAnimationResetTriggerClientMessage(hash);
}

#endregion

#region client message handlers

[ClientRpc]
void RpcOnAnimationClientMessage(int stateHash, float normalizedTime, int layerId, byte[] parameters)
{
Expand All @@ -420,12 +467,18 @@ void RpcOnAnimationParametersClientMessage(byte[] parameters)
HandleAnimParamsMsg(new NetworkReader(parameters));
}

// server sends this to one client
[ClientRpc]
void RpcOnAnimationTriggerClientMessage(int hash)
{
HandleAnimTriggerMsg(hash);
}

[ClientRpc]
void RpcOnAnimationResetTriggerClientMessage(int hash)
{
HandleAnimResetTriggerMsg(hash);
}

#endregion
}
}

0 comments on commit dffdf02

Please sign in to comment.