Exemplo n.º 1
0
        /// <summary>
        /// Moves the camera thru paths in straight lines from point to point.
        /// </summary>
        public void InterpolateThruWayPoints(Vector3 targetPosition, Vector3[] waypoints, bool useSmoothStep, GameTime gameTime)
        {
            _durationElapsed += (float)gameTime.ElapsedGameTime.TotalSeconds;
            if (_durationElapsed >= WayPointCycleDurationInTotalSeconds)
            {
                _durationElapsed -= WayPointCycleDurationInTotalSeconds;
            }

            var   interpolation = _durationElapsed / WayPointCycleDurationInTotalSeconds;
            float coeff         = 1f / (float)waypoints.Length;
            int   index         = (int)(interpolation / coeff);
            int   index2        = index + 1;

            if (index2 >= waypoints.Length)
            {
                index2 = 0;
            }
            float adjustedInterpolator = (interpolation - (coeff * index)) / coeff;

            if (useSmoothStep)
            {
                TransformCamera(Vector3.SmoothStep(waypoints[index], waypoints[index2], adjustedInterpolator), targetPosition, _camUp);
            }
            else
            {
                TransformCamera(Vector3.Lerp(waypoints[index], waypoints[index2], adjustedInterpolator), targetPosition, _camUp);
            }
        }