Пример #1
0
        private Task OnCenterData(MessageContainer obj)
        {
            MessageCenterData message = MessageCenterData.Unpack(obj);

            if (message != null)
            {
                CenterData(message.IsCentering, false);
            }

            return(Task.CompletedTask);
        }
Пример #2
0
        /// <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);
                }
            }
        }