From 368d7192012d461d68013ad715cd797cd8d96322 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Albin=20Cor=C3=A9n?= <2108U9@gmail.com> Date: Thu, 29 Mar 2018 04:27:13 +0200 Subject: [PATCH] Added Proximity to NetworkedAnimator --- .../Prototyping/NetworkedAnimator.cs | 86 +++++++++++++++++-- 1 file changed, 78 insertions(+), 8 deletions(-) diff --git a/MLAPI/MonoBehaviours/Prototyping/NetworkedAnimator.cs b/MLAPI/MonoBehaviours/Prototyping/NetworkedAnimator.cs index 3e8238f..150b8b1 100644 --- a/MLAPI/MonoBehaviours/Prototyping/NetworkedAnimator.cs +++ b/MLAPI/MonoBehaviours/Prototyping/NetworkedAnimator.cs @@ -1,16 +1,20 @@ -using System.IO; +using System.Collections.Generic; +using System.IO; using UnityEngine; namespace MLAPI.MonoBehaviours.Prototyping { public class NetworkedAnimator : NetworkedBehaviour { + public bool EnableProximity = false; + public float ProximityRange = 50f; + [SerializeField] private Animator _animator; [SerializeField] private uint parameterSendBits; [SerializeField] - private float sendRate = 0.1f; + private readonly float sendRate = 0.1f; private AnimatorControllerParameter[] animatorParameters; private int animationHash; @@ -98,7 +102,18 @@ namespace MLAPI.MonoBehaviours.Prototyping } if(isServer) { - SendToNonLocalClientsTarget("MLAPI_HandleAnimationMessage", "MLAPI_ANIMATION_UPDATE", stream.ToArray()); + if(EnableProximity) + { + List clientsInProximity = new List(); + foreach (KeyValuePair client in NetworkingManager.singleton.connectedClients) + { + if (Vector3.Distance(transform.position, client.Value.PlayerObject.transform.position) <= ProximityRange) + clientsInProximity.Add(client.Key); + } + SendToClientsTarget(clientsInProximity ,"MLAPI_HandleAnimationMessage", "MLAPI_ANIMATION_UPDATE", stream.ToArray()); + } + else + SendToNonLocalClientsTarget("MLAPI_HandleAnimationMessage", "MLAPI_ANIMATION_UPDATE", stream.ToArray()); } else { @@ -156,7 +171,18 @@ namespace MLAPI.MonoBehaviours.Prototyping } if (isServer) { - SendToNonLocalClientsTarget("MLAPI_HandleAnimationParameterMessage", "MLAPI_ANIMATION_UPDATE", stream.ToArray()); + if (EnableProximity) + { + List clientsInProximity = new List(); + foreach (KeyValuePair client in NetworkingManager.singleton.connectedClients) + { + if (Vector3.Distance(transform.position, client.Value.PlayerObject.transform.position) <= ProximityRange) + clientsInProximity.Add(client.Key); + } + SendToClientsTarget(clientsInProximity, "MLAPI_HandleAnimationParameterMessage", "MLAPI_ANIMATION_UPDATE", stream.ToArray()); + } + else + SendToNonLocalClientsTarget("MLAPI_HandleAnimationParameterMessage", "MLAPI_ANIMATION_UPDATE", stream.ToArray()); } else { @@ -196,7 +222,18 @@ namespace MLAPI.MonoBehaviours.Prototyping if(isServer) { - SendToNonLocalClientsTarget("MLAPI_HandleAnimationMessage", "MLAPI_ANIMATION_UPDATE", data); + if (EnableProximity) + { + List clientsInProximity = new List(); + foreach (KeyValuePair client in NetworkingManager.singleton.connectedClients) + { + if (Vector3.Distance(transform.position, client.Value.PlayerObject.transform.position) <= ProximityRange) + clientsInProximity.Add(client.Key); + } + SendToClientsTarget(clientsInProximity, "MLAPI_HandleAnimationMessage", "MLAPI_ANIMATION_UPDATE", data); + } + else + SendToNonLocalClientsTarget("MLAPI_HandleAnimationMessage", "MLAPI_ANIMATION_UPDATE", data); } using(MemoryStream stream = new MemoryStream(data)) { @@ -217,7 +254,18 @@ namespace MLAPI.MonoBehaviours.Prototyping { if (isServer) { - SendToNonLocalClientsTarget("MLAPI_HandleAnimationParameterMessage", "MLAPI_ANIMATION_UPDATE", data); + if (EnableProximity) + { + List clientsInProximity = new List(); + foreach (KeyValuePair client in NetworkingManager.singleton.connectedClients) + { + if (Vector3.Distance(transform.position, client.Value.PlayerObject.transform.position) <= ProximityRange) + clientsInProximity.Add(client.Key); + } + SendToClientsTarget(clientsInProximity, "MLAPI_HandleAnimationParameterMessage", "MLAPI_ANIMATION_UPDATE", data); + } + else + SendToNonLocalClientsTarget("MLAPI_HandleAnimationParameterMessage", "MLAPI_ANIMATION_UPDATE", data); } using (MemoryStream stream = new MemoryStream(data)) { @@ -232,7 +280,18 @@ namespace MLAPI.MonoBehaviours.Prototyping { if (isServer) { - SendToNonLocalClientsTarget("MLAPI_HandleAnimationTriggerMessage", "MLAPI_ANIMATION_UPDATE", data); + if (EnableProximity) + { + List clientsInProximity = new List(); + foreach (KeyValuePair client in NetworkingManager.singleton.connectedClients) + { + if (Vector3.Distance(transform.position, client.Value.PlayerObject.transform.position) <= ProximityRange) + clientsInProximity.Add(client.Key); + } + SendToClientsTarget(clientsInProximity, "MLAPI_HandleAnimationTriggerMessage", "MLAPI_ANIMATION_UPDATE", data); + } + else + SendToNonLocalClientsTarget("MLAPI_HandleAnimationTriggerMessage", "MLAPI_ANIMATION_UPDATE", data); } using (MemoryStream stream = new MemoryStream(data)) { @@ -331,7 +390,18 @@ namespace MLAPI.MonoBehaviours.Prototyping } if (isServer) { - SendToNonLocalClientsTarget("MLAPI_HandleAnimationTriggerMessage", "MLAPI_ANIMATION_UPDATE", stream.ToArray()); + if (EnableProximity) + { + List clientsInProximity = new List(); + foreach (KeyValuePair client in NetworkingManager.singleton.connectedClients) + { + if (Vector3.Distance(transform.position, client.Value.PlayerObject.transform.position) <= ProximityRange) + clientsInProximity.Add(client.Key); + } + SendToClientsTarget(clientsInProximity, "MLAPI_HandleAnimationTriggerMessage", "MLAPI_ANIMATION_UPDATE", stream.ToArray()); + } + else + SendToNonLocalClientsTarget("MLAPI_HandleAnimationTriggerMessage", "MLAPI_ANIMATION_UPDATE", stream.ToArray()); } else {