Skip to content

Commit 0f08318

Browse files
committed
Reworked NetworkedAnimator
1 parent f0c0616 commit 0f08318

File tree

1 file changed

+75
-76
lines changed

1 file changed

+75
-76
lines changed

MLAPI/MonoBehaviours/Prototyping/NetworkedAnimator.cs

+75-76
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,36 @@
1-
using System;
2-
using System.IO;
1+
using System.IO;
32
using UnityEngine;
43

54
namespace MLAPI
65
{
7-
[DisallowMultipleComponent]
8-
[RequireComponent(typeof(Animator))]
96
public class NetworkedAnimator : NetworkedBehaviour
107
{
11-
// configuration
12-
[SerializeField] Animator m_Animator;
13-
[SerializeField] uint m_ParameterSendBits;
14-
[SerializeField] float m_SendRate = 0.1f;
8+
[SerializeField]
9+
private Animator _animator;
10+
[SerializeField]
11+
private uint parameterSendBits;
12+
[SerializeField]
13+
private float sendRate = 0.1f;
14+
private AnimatorControllerParameter[] animatorParameters;
15+
16+
private int animationHash;
17+
private int transitionHash;
18+
private float sendTimer;
19+
20+
// tracking - these should probably move to a Preview component. -- Comment from HLAPI. Needs clarification
21+
public string param0;
22+
public string param1;
23+
public string param2;
24+
public string param3;
25+
public string param4;
26+
public string param5;
1527

16-
AnimatorControllerParameter[] m_AnimatorParameters;
17-
18-
// properties
1928
public Animator animator
2029
{
21-
get { return m_Animator; }
30+
get { return _animator; }
2231
set
2332
{
24-
m_Animator = value;
33+
_animator = value;
2534
ResetParameterOptions();
2635
}
2736
}
@@ -30,32 +39,20 @@ public void SetParameterAutoSend(int index, bool value)
3039
{
3140
if (value)
3241
{
33-
m_ParameterSendBits |= (uint)(1 << index);
42+
parameterSendBits |= (uint)(1 << index);
3443
}
3544
else
3645
{
37-
m_ParameterSendBits &= (uint)(~(1 << index));
46+
parameterSendBits &= (uint)(~(1 << index));
3847
}
3948
}
4049

4150
public bool GetParameterAutoSend(int index)
4251
{
43-
return (m_ParameterSendBits & (uint)(1 << index)) != 0;
52+
return (parameterSendBits & (uint)(1 << index)) != 0;
4453
}
4554

46-
int m_AnimationHash;
47-
int m_TransitionHash;
48-
float m_SendTimer;
49-
50-
// tracking - these should probably move to a Preview component.
51-
public string param0;
52-
public string param1;
53-
public string param2;
54-
public string param3;
55-
public string param4;
56-
public string param5;
57-
58-
bool sendMessagesAllowed
55+
private bool sendMessagesAllowed
5956
{
6057
get
6158
{
@@ -73,23 +70,22 @@ public override void NetworkStart()
7370
public void ResetParameterOptions()
7471
{
7572
Debug.Log("ResetParameterOptions");
76-
m_ParameterSendBits = 0;
77-
m_AnimatorParameters = null;
73+
parameterSendBits = 0;
74+
animatorParameters = null;
7875
}
7976

80-
void FixedUpdate()
77+
private void FixedUpdate()
8178
{
8279
if (!sendMessagesAllowed)
8380
return;
8481

8582
CheckSendRate();
8683

87-
int stateHash;
88-
float normalizedTime;
89-
if (!CheckAnimStateChanged(out stateHash, out normalizedTime))
84+
if (!CheckAnimStateChanged(out int stateHash, out float normalizedTime))
9085
{
9186
return;
9287
}
88+
9389
using(MemoryStream stream = new MemoryStream())
9490
{
9591
using (BinaryWriter writer = new BinaryWriter(stream))
@@ -109,46 +105,46 @@ void FixedUpdate()
109105
}
110106
}
111107

112-
bool CheckAnimStateChanged(out int stateHash, out float normalizedTime)
108+
private bool CheckAnimStateChanged(out int stateHash, out float normalizedTime)
113109
{
114110
stateHash = 0;
115111
normalizedTime = 0;
116112

117-
if (m_Animator.IsInTransition(0))
113+
if (animator.IsInTransition(0))
118114
{
119-
AnimatorTransitionInfo tt = m_Animator.GetAnimatorTransitionInfo(0);
120-
if (tt.fullPathHash != m_TransitionHash)
115+
AnimatorTransitionInfo animationTransitionInfo = animator.GetAnimatorTransitionInfo(0);
116+
if (animationTransitionInfo.fullPathHash != transitionHash)
121117
{
122118
// first time in this transition
123-
m_TransitionHash = tt.fullPathHash;
124-
m_AnimationHash = 0;
119+
transitionHash = animationTransitionInfo.fullPathHash;
120+
animationHash = 0;
125121
return true;
126122
}
127123
return false;
128124
}
129125

130-
AnimatorStateInfo st = m_Animator.GetCurrentAnimatorStateInfo(0);
131-
if (st.fullPathHash != m_AnimationHash)
126+
AnimatorStateInfo animationSateInfo = animator.GetCurrentAnimatorStateInfo(0);
127+
if (animationSateInfo.fullPathHash != animationHash)
132128
{
133129
// first time in this animation state
134-
if (m_AnimationHash != 0)
130+
if (animationHash != 0)
135131
{
136132
// came from another animation directly - from Play()
137-
stateHash = st.fullPathHash;
138-
normalizedTime = st.normalizedTime;
133+
stateHash = animationSateInfo.fullPathHash;
134+
normalizedTime = animationSateInfo.normalizedTime;
139135
}
140-
m_TransitionHash = 0;
141-
m_AnimationHash = st.fullPathHash;
136+
transitionHash = 0;
137+
animationHash = animationSateInfo.fullPathHash;
142138
return true;
143139
}
144140
return false;
145141
}
146142

147-
void CheckSendRate()
143+
private void CheckSendRate()
148144
{
149-
if (sendMessagesAllowed && m_SendRate != 0 && m_SendTimer < Time.time)
145+
if (sendMessagesAllowed && sendRate != 0 && sendTimer < Time.time)
150146
{
151-
m_SendTimer = Time.time + m_SendRate;
147+
sendTimer = Time.time + sendRate;
152148

153149
using(MemoryStream stream = new MemoryStream())
154150
{
@@ -168,7 +164,7 @@ void CheckSendRate()
168164
}
169165
}
170166

171-
void SetSendTrackingParam(string p, int i)
167+
private void SetSendTrackingParam(string p, int i)
172168
{
173169
p = "Sent Param: " + p;
174170
if (i == 0) param0 = p;
@@ -179,7 +175,7 @@ void SetSendTrackingParam(string p, int i)
179175
if (i == 5) param5 = p;
180176
}
181177

182-
void SetRecvTrackingParam(string p, int i)
178+
private void SetRecvTrackingParam(string p, int i)
183179
{
184180
p = "Recv Param: " + p;
185181
if (i == 0) param0 = p;
@@ -190,13 +186,12 @@ void SetRecvTrackingParam(string p, int i)
190186
if (i == 5) param5 = p;
191187
}
192188

193-
internal void HandleAnimMsg(int clientId, byte[] data)
189+
private void HandleAnimMsg(int clientId, byte[] data)
194190
{
195191
// usually transitions will be triggered by parameters, if not, play anims directly.
196192
// NOTE: this plays "animations", not transitions, so any transitions will be skipped.
197193
// NOTE: there is no API to play a transition(?)
198194

199-
//isServer AND the message is not from ourselves. This prevents a stack overflow. Infinite call to itself.
200195
if(isServer)
201196
{
202197
SendToNonLocalClientsTarget("MLAPI_HandleAnimationMessage", "MLAPI_ANIMATION_UPDATE", data, true);
@@ -209,14 +204,14 @@ internal void HandleAnimMsg(int clientId, byte[] data)
209204
float normalizedTime = reader.ReadSingle();
210205
if(stateHash != 0)
211206
{
212-
m_Animator.Play(stateHash, 0, normalizedTime);
207+
animator.Play(stateHash, 0, normalizedTime);
213208
}
214209
ReadParameters(reader, false);
215210
}
216211
}
217212
}
218213

219-
internal void HandleAnimParamsMsg(int clientId, byte[] data)
214+
private void HandleAnimParamsMsg(int clientId, byte[] data)
220215
{
221216
if (isServer)
222217
{
@@ -231,7 +226,7 @@ internal void HandleAnimParamsMsg(int clientId, byte[] data)
231226
}
232227
}
233228

234-
internal void HandleAnimTriggerMsg(int clientId, byte[] data)
229+
private void HandleAnimTriggerMsg(int clientId, byte[] data)
235230
{
236231
if (isServer)
237232
{
@@ -241,72 +236,76 @@ internal void HandleAnimTriggerMsg(int clientId, byte[] data)
241236
{
242237
using(BinaryReader reader = new BinaryReader(stream))
243238
{
244-
m_Animator.SetTrigger(reader.ReadInt32());
239+
animator.SetTrigger(reader.ReadInt32());
245240
}
246241
}
247242
}
248243

249-
void WriteParameters(BinaryWriter writer, bool autoSend)
244+
private void WriteParameters(BinaryWriter writer, bool autoSend)
250245
{
251-
if (m_AnimatorParameters == null) m_AnimatorParameters = m_Animator.parameters;
252-
for (int i = 0; i < m_AnimatorParameters.Length; i++)
246+
if (animatorParameters == null)
247+
animatorParameters = animator.parameters;
248+
249+
for (int i = 0; i < animatorParameters.Length; i++)
253250
{
254251
if (autoSend && !GetParameterAutoSend(i))
255252
continue;
256253

257-
AnimatorControllerParameter par = m_AnimatorParameters[i];
254+
AnimatorControllerParameter par = animatorParameters[i];
258255
if (par.type == AnimatorControllerParameterType.Int)
259256
{
260-
writer.Write((uint)m_Animator.GetInteger(par.nameHash));
257+
writer.Write((uint)animator.GetInteger(par.nameHash));
261258

262-
SetSendTrackingParam(par.name + ":" + m_Animator.GetInteger(par.nameHash), i);
259+
SetSendTrackingParam(par.name + ":" + animator.GetInteger(par.nameHash), i);
263260
}
264261

265262
if (par.type == AnimatorControllerParameterType.Float)
266263
{
267-
writer.Write(m_Animator.GetFloat(par.nameHash));
264+
writer.Write(animator.GetFloat(par.nameHash));
268265

269-
SetSendTrackingParam(par.name + ":" + m_Animator.GetFloat(par.nameHash), i);
266+
SetSendTrackingParam(par.name + ":" + animator.GetFloat(par.nameHash), i);
270267
}
271268

272269
if (par.type == AnimatorControllerParameterType.Bool)
273270
{
274-
writer.Write(m_Animator.GetBool(par.nameHash));
271+
writer.Write(animator.GetBool(par.nameHash));
275272

276-
SetSendTrackingParam(par.name + ":" + m_Animator.GetBool(par.nameHash), i);
273+
SetSendTrackingParam(par.name + ":" + animator.GetBool(par.nameHash), i);
277274
}
278275
}
279276
}
280277

281-
void ReadParameters(BinaryReader reader, bool autoSend)
278+
private void ReadParameters(BinaryReader reader, bool autoSend)
282279
{
283-
if (m_AnimatorParameters == null) m_AnimatorParameters = m_Animator.parameters;
284-
for (int i = 0; i < m_AnimatorParameters.Length; i++)
280+
if (animatorParameters == null)
281+
animatorParameters = animator.parameters;
282+
283+
for (int i = 0; i < animatorParameters.Length; i++)
285284
{
286285
if (autoSend && !GetParameterAutoSend(i))
287286
continue;
288287

289-
AnimatorControllerParameter par = m_AnimatorParameters[i];
288+
AnimatorControllerParameter par = animatorParameters[i];
290289
if (par.type == AnimatorControllerParameterType.Int)
291290
{
292291
int newValue = (int)reader.ReadUInt32();
293-
m_Animator.SetInteger(par.nameHash, newValue);
292+
animator.SetInteger(par.nameHash, newValue);
294293

295294
SetRecvTrackingParam(par.name + ":" + newValue, i);
296295
}
297296

298297
if (par.type == AnimatorControllerParameterType.Float)
299298
{
300299
float newFloatValue = reader.ReadSingle();
301-
m_Animator.SetFloat(par.nameHash, newFloatValue);
300+
animator.SetFloat(par.nameHash, newFloatValue);
302301

303302
SetRecvTrackingParam(par.name + ":" + newFloatValue, i);
304303
}
305304

306305
if (par.type == AnimatorControllerParameterType.Bool)
307306
{
308307
bool newBoolValue = reader.ReadBoolean();
309-
m_Animator.SetBool(par.nameHash, newBoolValue);
308+
animator.SetBool(par.nameHash, newBoolValue);
310309

311310
SetRecvTrackingParam(par.name + ":" + newBoolValue, i);
312311
}

0 commit comments

Comments
 (0)