Example #1
0
        public float GoTo(Vector3 position)
        {
            IsActionLocked = true;
            Timing.KillCoroutines(MovementCoroutines.ToArray());
            Vector3 heading = (position - NPCPlayer.Position);

            heading.y = 0;
            Quaternion lookRot = Quaternion.LookRotation(heading.normalized);
            float      dist    = heading.magnitude;

            NPCPlayer.Rotations = new Vector2(lookRot.eulerAngles.x, lookRot.eulerAngles.y);
            Move(MovementDirection.FORWARD);
            float eta = Plugin.Instance.Config.MovementUpdateFrequency * (dist / (NPCPlayer.CameraTransform.forward / 10 * MovementSpeed).magnitude);

            position.y = NPCPlayer.Position.y;
            MovementCoroutines.Add(Timing.CallDelayed(eta, () =>
            {
                Move(MovementDirection.NONE);
                if (Vector3.Distance(NPCPlayer.Position, position) >= 2f)
                {
                    NPCPlayer.ReferenceHub.playerMovementSync.OverridePosition(position, 0f, true);
                }
                IsActionLocked = false;
            }));
            return(eta);
        }