11using MLAPI . Data ;
22using System . Collections . Generic ;
33using System . IO ;
4+ using System . Linq ;
45using MLAPI . Logging ;
56using MLAPI . Serialization ;
67using 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