예제 #1
0
        /// <summary>
        /// If we have moved greated than 1m from our last position, inform the network
        /// TODO: move to avatar handler
        /// </summary>
        /// <param name="AP"></param>
        void CheckNetworkUpdating(Vector3d AP)
        {
            double dist = Vector3d.Distance(PreviousPosition, MScene.Camera.transform.Position);
            double td   = Math.Abs(Vector3d.Distance(PreviousTarget, MScene.Camera.Focus.transform.Position));

            if (((dist > 0.25) || (td > 1)) &&
                (Throttle > MaxNetworkThrottle))
            {
                Throttle         = 0;
                PreviousPosition = MScene.Camera.transform.Position;
                PreviousTarget   = MScene.Camera.Focus.transform.Position;
                if (Globals.Network.Connected == true)
                {
                    MMessageBus.MoveAvatarRequest(this, Globals.UserAccount.UserID, AP, Globals.Avatar.GetRotation());
                }
                else
                {
                    //TODO: follow this event down the rabbit hole and optimize out where possible
                    MMessageBus.AvatarMoved(this, Globals.UserAccount.UserID, AP, Globals.Avatar.GetRotation());
                    //Console.WriteLine("Avatar " + Globals.Avatar.GetRotation());
                }
            }
        }