private Task OnCenterData(MessageContainer obj) { MessageCenterData message = MessageCenterData.Unpack(obj); if (message != null) { CenterData(message.IsCentering, false); } return(Task.CompletedTask); }
/// <summary> /// Centers or un-centers the data to the origin, based on the average position of the samples. /// </summary> /// <param name="isCentering">Indicated whether to center or to reverse.</param> /// <param name="syncWithRemote">Indicates whether the centering should also happen on remote clients.</param> public void CenterData(bool isCentering, bool syncWithRemote = true) { var GlobalOffset = GameObject.FindGameObjectWithTag("GlobalOffset"); if (GlobalOffset != null) { // center or un-center data if (isCentering == true && GlobalOffset.transform.position == Vector3.zero) { Vector3 averagePosition = Vector3.zero; foreach (var studyObject in Services.DataManager().DataSets.Values) { averagePosition += studyObject.AveragePosition; } averagePosition /= Services.DataManager().DataSets.Values.Count; GameObject.FindGameObjectWithTag("GlobalOffset").transform.localPosition -= averagePosition; // send message to the other clients if (syncWithRemote) { var message = new MessageCenterData(isCentering); Services.NetworkManager().SendMessage(message.Pack()); } // send notification event that the data was centered or un-centered DataCenteringEventBroadcast.Invoke(true); } else { GameObject.FindGameObjectWithTag("GlobalOffset").transform.localPosition = Vector3.zero; // send message to the other clients if (syncWithRemote) { var message = new MessageCenterData(isCentering); Services.NetworkManager().SendMessage(message.Pack()); } // send notification event that the data was centered or un-centered DataCenteringEventBroadcast.Invoke(false); } } }