Пример #1
0
        public PredictionResult PredictCollision(SaberStateDto saber1, SaberStateDto saber2)
        {
            Vector3 intersectionPoint = Vector3.zero;

            Quaternion initialRotation1 = saber1.Pivot.rotation;
            Quaternion initialRotation2 = saber2.Pivot.rotation;

            Quaternion finalRotation1 = saber1.PivotFinalPositionAnchor.rotation;
            Quaternion finalRotation2 = saber2.PivotFinalPositionAnchor.rotation;

            bool collide = false;

            for (int i = 0; i < _settings.InterpolationSteps; ++i)
            {
                saber1.Pivot.rotation = Quaternion.Slerp(initialRotation1, saber1.PivotFinalPositionAnchor.rotation, (float)i / _settings.InterpolationSteps);
                saber2.Pivot.rotation = Quaternion.Slerp(initialRotation2, saber2.PivotFinalPositionAnchor.rotation, (float)i / _settings.InterpolationSteps);

                if (DoesSabersIntersects(new LineSegment(saber1), new LineSegment(saber2), out Vector3 newIntersectionPoint))
                {
                    intersectionPoint = newIntersectionPoint;
                    collide           = true;
                    finalRotation1    = saber1.Pivot.rotation;
                    finalRotation2    = saber2.Pivot.rotation;
                }
            }

            saber1.Pivot.rotation = initialRotation1;
            saber2.Pivot.rotation = initialRotation2;

            return(new PredictionResult(collide, intersectionPoint, finalRotation1, finalRotation2));
        }
Пример #2
0
 public LineSegment(SaberStateDto playerState)
 {
     StartPoint = playerState.BladeStart.position;
     EndPoint   = playerState.BladeEnd.position;
     Vector     = EndPoint - StartPoint;
 }