Skip to content

Commit b437c09

Browse files
committed
Updated Prototype components to new messaging
1 parent 002948a commit b437c09

File tree

4 files changed

+180
-186
lines changed

4 files changed

+180
-186
lines changed

MLAPI/Data/AttributeMessageMode.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,12 @@ public enum AttributeMessageMode
1212
WovenFourByte,
1313
WovenEightByte
1414
}
15-
15+
#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member
16+
}
17+
18+
namespace MLAPI
19+
{
20+
#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
1621
public delegate void RpcDelegate(uint clientId, Stream stream);
1722

1823
public class ReflectionMehtod

MLAPI/MonoBehaviours/Prototyping/NetworkedAnimator.cs

Lines changed: 83 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using MLAPI.Data;
22
using System.Collections.Generic;
33
using System.IO;
4+
using System.Linq;
45
using MLAPI.Logging;
56
using MLAPI.Serialization;
67
using UnityEngine;
@@ -91,16 +92,6 @@ private bool sendMessagesAllowed
9192
}
9293
}
9394

94-
/// <summary>
95-
/// Registers message handlers
96-
/// </summary>
97-
public override void NetworkStart()
98-
{
99-
//RegisterMessageHandler("MLAPI_HandleAnimationMessage", HandleAnimMsg);
100-
//RegisterMessageHandler("MLAPI_HandleAnimationParameterMessage", HandleAnimParamsMsg);
101-
//RegisterMessageHandler("MLAPI_HandleAnimationTriggerMessage", HandleAnimTriggerMsg);
102-
}
103-
10495
/// <summary>
10596
/// TODO
10697
/// </summary>
@@ -127,14 +118,13 @@ private void FixedUpdate()
127118
return;
128119
}
129120

130-
using(MemoryStream stream = new MemoryStream())
121+
using (PooledBitStream stream = PooledBitStream.Get())
131122
{
132-
using (BinaryWriter writer = new BinaryWriter(stream))
133-
{
134-
writer.Write(stateHash);
135-
writer.Write(normalizedTime);
136-
WriteParameters(writer, false);
137-
}
123+
BitWriter writer = new BitWriter(stream);
124+
writer.WriteInt32Packed(stateHash);
125+
writer.WriteSinglePacked(normalizedTime);
126+
WriteParameters(stream, false);
127+
138128
if(isServer)
139129
{
140130
if (EnableProximity)
@@ -145,15 +135,18 @@ private void FixedUpdate()
145135
if (Vector3.Distance(transform.position, client.Value.PlayerObject.transform.position) <= ProximityRange)
146136
clientsInProximity.Add(client.Key);
147137
}
148-
//SendToClientsTarget(clientsInProximity ,"MLAPI_HandleAnimationMessage", "MLAPI_ANIMATION_UPDATE", stream.ToArray());
138+
InvokeClientRpc(HandleAnimMsg, clientsInProximity, stream);
149139
}
150140
else
151-
new System.Exception();
152-
//SendToNonLocalClientsTarget("MLAPI_HandleAnimationMessage", "MLAPI_ANIMATION_UPDATE", stream.ToArray());
141+
{
142+
List<uint> clientIds = NetworkingManager.singleton.ConnectedClientsList.Select(x => x.ClientId).ToList(); //BAD
143+
clientIds.Remove(OwnerClientId);
144+
InvokeClientRpc(HandleAnimMsg, clientIds, stream);
145+
}
153146
}
154147
else
155148
{
156-
//SendToServerTarget("MLAPI_HandleAnimationMessage", "MLAPI_ANIMATION_UPDATE", stream.ToArray());
149+
InvokeServerRpc(HandleAnimMsg, stream);
157150
}
158151
}
159152
}
@@ -199,12 +192,10 @@ private void CheckSendRate()
199192
{
200193
sendTimer = NetworkingManager.singleton.NetworkTime + sendRate;
201194

202-
using(MemoryStream stream = new MemoryStream())
195+
using (PooledBitStream stream = PooledBitStream.Get())
203196
{
204-
using(BinaryWriter writer = new BinaryWriter(stream))
205-
{
206-
WriteParameters(writer, true);
207-
}
197+
WriteParameters(stream, true);
198+
208199
if (isServer)
209200
{
210201
if (EnableProximity)
@@ -215,15 +206,18 @@ private void CheckSendRate()
215206
if (Vector3.Distance(transform.position, client.Value.PlayerObject.transform.position) <= ProximityRange)
216207
clientsInProximity.Add(client.Key);
217208
}
218-
//SendToClientsTarget(clientsInProximity, "MLAPI_HandleAnimationParameterMessage", "MLAPI_ANIMATION_UPDATE", stream.ToArray());
209+
InvokeClientRpc(HandleAnimParamsMsg, clientsInProximity, stream);
219210
}
220211
else
221-
new System.Exception();
222-
//SendToNonLocalClientsTarget("MLAPI_HandleAnimationParameterMessage", "MLAPI_ANIMATION_UPDATE", stream.ToArray());
212+
{
213+
List<uint> clientIds = NetworkingManager.singleton.ConnectedClientsList.Select(x => x.ClientId).ToList(); //BAD
214+
clientIds.Remove(OwnerClientId);
215+
InvokeClientRpc(HandleAnimParamsMsg, clientIds, stream);
216+
}
223217
}
224218
else
225219
{
226-
//SendToServerTarget("MLAPI_HandleAnimationParameterMessage", "MLAPI_ANIMATION_UPDATE", stream.ToArray());
220+
InvokeServerRpc(HandleAnimParamsMsg, stream);
227221
}
228222
}
229223
}
@@ -251,13 +245,13 @@ private void SetRecvTrackingParam(string p, int i)
251245
if (i == 5) param5 = p;
252246
}
253247

254-
private void HandleAnimMsg(uint clientId, BitReader reader)
248+
[ClientRPC]
249+
[ServerRPC]
250+
private void HandleAnimMsg(uint clientId, Stream stream)
255251
{
256252
// usually transitions will be triggered by parameters, if not, play anims directly.
257253
// NOTE: this plays "animations", not transitions, so any transitions will be skipped.
258254
// NOTE: there is no API to play a transition(?)
259-
byte[] data = reader.ReadByteArray();
260-
261255
if(isServer)
262256
{
263257
if (EnableProximity)
@@ -268,30 +262,30 @@ private void HandleAnimMsg(uint clientId, BitReader reader)
268262
if (Vector3.Distance(transform.position, client.Value.PlayerObject.transform.position) <= ProximityRange)
269263
clientsInProximity.Add(client.Key);
270264
}
271-
//SendToClientsTarget(clientsInProximity, "MLAPI_HandleAnimationMessage", "MLAPI_ANIMATION_UPDATE", data);
265+
InvokeClientRpc(HandleAnimMsg, clientsInProximity, stream);
272266
}
273267
else
274-
new System.Exception();
275-
//SendToNonLocalClientsTarget("MLAPI_HandleAnimationMessage", "MLAPI_ANIMATION_UPDATE", data);
276-
}
277-
using (MemoryStream stream = new MemoryStream(data))
278-
{
279-
using (BinaryReader bReader = new BinaryReader(stream))
280268
{
281-
int stateHash = bReader.ReadInt32();
282-
float normalizedTime = bReader.ReadSingle();
283-
if(stateHash != 0)
284-
{
285-
animator.Play(stateHash, 0, normalizedTime);
286-
}
287-
ReadParameters(bReader, false);
269+
List<uint> clientIds = NetworkingManager.singleton.ConnectedClientsList.Select(x => x.ClientId).ToList(); //BAD
270+
clientIds.Remove(OwnerClientId);
271+
InvokeClientRpc(HandleAnimMsg, clientIds, stream);
288272
}
289273
}
274+
275+
BitReader reader = new BitReader(stream);
276+
int stateHash = reader.ReadInt32Packed();
277+
float normalizedTime = reader.ReadSinglePacked();
278+
if(stateHash != 0)
279+
{
280+
animator.Play(stateHash, 0, normalizedTime);
281+
}
282+
ReadParameters(stream, false);
290283
}
291-
292-
private void HandleAnimParamsMsg(uint clientId, BitReader reader)
284+
285+
[ClientRPC]
286+
[ServerRPC]
287+
private void HandleAnimParamsMsg(uint clientId, Stream stream)
293288
{
294-
byte[] data = reader.ReadByteArray();
295289
if (isServer)
296290
{
297291
if (EnableProximity)
@@ -302,24 +296,23 @@ private void HandleAnimParamsMsg(uint clientId, BitReader reader)
302296
if (Vector3.Distance(transform.position, client.Value.PlayerObject.transform.position) <= ProximityRange)
303297
clientsInProximity.Add(client.Key);
304298
}
305-
//SendToClientsTarget(clientsInProximity, "MLAPI_HandleAnimationParameterMessage", "MLAPI_ANIMATION_UPDATE", data);
299+
InvokeClientRpc(HandleAnimParamsMsg, clientsInProximity, stream);
306300
}
307301
else
308-
new System.Exception();
309-
//SendToNonLocalClientsTarget("MLAPI_HandleAnimationParameterMessage", "MLAPI_ANIMATION_UPDATE", data);
310-
}
311-
using (MemoryStream stream = new MemoryStream(data))
312-
{
313-
using (BinaryReader bReader = new BinaryReader(stream))
314302
{
315-
ReadParameters(bReader, true);
303+
List<uint> clientIds = NetworkingManager.singleton.ConnectedClientsList.Select(x => x.ClientId).ToList(); //BAD
304+
clientIds.Remove(OwnerClientId);
305+
InvokeClientRpc(HandleAnimParamsMsg, clientIds, stream);
316306
}
317307
}
308+
309+
ReadParameters(stream, true);
318310
}
319311

320-
private void HandleAnimTriggerMsg(uint clientId, BitReader reader)
312+
[ClientRPC]
313+
[ServerRPC]
314+
private void HandleAnimTriggerMsg(uint clientId, Stream stream)
321315
{
322-
byte[] data = reader.ReadByteArray();
323316
if (isServer)
324317
{
325318
if (EnableProximity)
@@ -330,23 +323,24 @@ private void HandleAnimTriggerMsg(uint clientId, BitReader reader)
330323
if (Vector3.Distance(transform.position, client.Value.PlayerObject.transform.position) <= ProximityRange)
331324
clientsInProximity.Add(client.Key);
332325
}
333-
//SendToClientsTarget(clientsInProximity, "MLAPI_HandleAnimationTriggerMessage", "MLAPI_ANIMATION_UPDATE", data);
326+
InvokeClientRpc(HandleAnimTriggerMsg, clientsInProximity, stream);
334327
}
335328
else
336-
new System.Exception();
337-
//SendToNonLocalClientsTarget("MLAPI_HandleAnimationTriggerMessage", "MLAPI_ANIMATION_UPDATE", data);
338-
}
339-
using (MemoryStream stream = new MemoryStream(data))
340-
{
341-
using (BinaryReader bReader = new BinaryReader(stream))
342329
{
343-
animator.SetTrigger(bReader.ReadInt32());
330+
List<uint> clientIds = NetworkingManager.singleton.ConnectedClientsList.Select(x => x.ClientId).ToList(); //BAD
331+
clientIds.Remove(OwnerClientId);
332+
InvokeClientRpc(HandleAnimTriggerMsg, clientIds, stream);
344333
}
345334
}
335+
336+
BitReader reader = new BitReader(stream);
337+
animator.SetTrigger(reader.ReadInt32Packed());
346338
}
347339

348-
private void WriteParameters(BinaryWriter writer, bool autoSend)
340+
private void WriteParameters(Stream stream, bool autoSend)
349341
{
342+
BitWriter writer = new BitWriter(stream);
343+
350344
if (animatorParameters == null)
351345
animatorParameters = animator.parameters;
352346

@@ -358,29 +352,31 @@ private void WriteParameters(BinaryWriter writer, bool autoSend)
358352
AnimatorControllerParameter par = animatorParameters[i];
359353
if (par.type == AnimatorControllerParameterType.Int)
360354
{
361-
writer.Write((uint)animator.GetInteger(par.nameHash));
355+
writer.WriteUInt32Packed((uint)animator.GetInteger(par.nameHash));
362356

363357
SetSendTrackingParam(par.name + ":" + animator.GetInteger(par.nameHash), i);
364358
}
365359

366360
if (par.type == AnimatorControllerParameterType.Float)
367361
{
368-
writer.Write(animator.GetFloat(par.nameHash));
362+
writer.WriteSinglePacked(animator.GetFloat(par.nameHash));
369363

370364
SetSendTrackingParam(par.name + ":" + animator.GetFloat(par.nameHash), i);
371365
}
372366

373367
if (par.type == AnimatorControllerParameterType.Bool)
374368
{
375-
writer.Write(animator.GetBool(par.nameHash));
369+
writer.WriteBool(animator.GetBool(par.nameHash));
376370

377371
SetSendTrackingParam(par.name + ":" + animator.GetBool(par.nameHash), i);
378372
}
379373
}
380374
}
381375

382-
private void ReadParameters(BinaryReader reader, bool autoSend)
376+
private void ReadParameters(Stream stream, bool autoSend)
383377
{
378+
BitReader reader = new BitReader(stream);
379+
384380
if (animatorParameters == null)
385381
animatorParameters = animator.parameters;
386382

@@ -392,23 +388,23 @@ private void ReadParameters(BinaryReader reader, bool autoSend)
392388
AnimatorControllerParameter par = animatorParameters[i];
393389
if (par.type == AnimatorControllerParameterType.Int)
394390
{
395-
int newValue = (int)reader.ReadUInt32();
391+
int newValue = (int)reader.ReadUInt32Packed();
396392
animator.SetInteger(par.nameHash, newValue);
397393

398394
SetRecvTrackingParam(par.name + ":" + newValue, i);
399395
}
400396

401397
if (par.type == AnimatorControllerParameterType.Float)
402398
{
403-
float newFloatValue = reader.ReadSingle();
399+
float newFloatValue = reader.ReadSinglePacked();
404400
animator.SetFloat(par.nameHash, newFloatValue);
405401

406402
SetRecvTrackingParam(par.name + ":" + newFloatValue, i);
407403
}
408404

409405
if (par.type == AnimatorControllerParameterType.Bool)
410406
{
411-
bool newBoolValue = reader.ReadBoolean();
407+
bool newBoolValue = reader.ReadBool();
412408
animator.SetBool(par.nameHash, newBoolValue);
413409

414410
SetRecvTrackingParam(par.name + ":" + newBoolValue, i);
@@ -433,12 +429,11 @@ public void SetTrigger(int hash)
433429
{
434430
if (isLocalPlayer || isOwner)
435431
{
436-
using (MemoryStream stream = new MemoryStream())
432+
using (PooledBitStream stream = PooledBitStream.Get())
437433
{
438-
using (BinaryWriter writer = new BinaryWriter(stream))
439-
{
440-
writer.Write(hash);
441-
}
434+
BitWriter writer = new BitWriter(stream);
435+
writer.WriteInt32Packed(hash);
436+
442437
if (isServer)
443438
{
444439
if (EnableProximity)
@@ -449,15 +444,18 @@ public void SetTrigger(int hash)
449444
if (Vector3.Distance(transform.position, client.Value.PlayerObject.transform.position) <= ProximityRange)
450445
clientsInProximity.Add(client.Key);
451446
}
452-
//SendToClientsTarget(clientsInProximity, "MLAPI_HandleAnimationTriggerMessage", "MLAPI_ANIMATION_UPDATE", stream.ToArray());
447+
InvokeClientRpc(HandleAnimTriggerMsg, clientsInProximity, stream);
453448
}
454449
else
455-
new System.Exception();
456-
//SendToNonLocalClientsTarget("MLAPI_HandleAnimationTriggerMessage", "MLAPI_ANIMATION_UPDATE", stream.ToArray());
450+
{
451+
List<uint> clientIds = NetworkingManager.singleton.ConnectedClientsList.Select(x => x.ClientId).ToList(); //BAD
452+
clientIds.Remove(OwnerClientId);
453+
InvokeClientRpc(HandleAnimTriggerMsg, clientIds, stream);
454+
}
457455
}
458456
else
459457
{
460-
//SendToServerTarget("MLAPI_HandleAnimationTriggerMessage", "MLAPI_ANIMATION_UPDATE", stream.ToArray());
458+
InvokeServerRpc(HandleAnimTriggerMsg, stream);
461459
}
462460
}
463461
}

0 commit comments

Comments
 (0)