using System.Collections; using System.Collections.Generic; using Godot; namespace Rokojori { public class SAT2 { public static void Project( Vector2 normal, List points, Range outputProjectionRange ) { var min = float.MaxValue; var max = - float.MaxValue; for ( var i = 0; i < points.Count; i++ ) { var dot = Math2D.Dot( normal, points[ i ] ); min = Mathf.Min( min, dot ); max = Mathf.Max( max, dot ); } outputProjectionRange.min = min; outputProjectionRange.max = max; } public static bool IsIntersecting( List normalsA, List pointsA, List normalsB, List pointsB ) { var projectionRangeA = new Range( 0, 1 ); var projectionRangeB = new Range( 0, 1 ); for ( var i = 0; i < normalsA.Count; i++ ) { var axis = normalsA[ i ]; Project( axis, pointsA, projectionRangeA ); Project( axis, pointsB, projectionRangeB ); if ( ! projectionRangeA.Overlaps( projectionRangeB ) ) { return false; } } for ( var i = 0; i < normalsB.Count; i++ ) { var axis = normalsB[ i ]; Project( axis, pointsA, projectionRangeA ); Project( axis, pointsB, projectionRangeB ); if ( ! projectionRangeA.Overlaps( projectionRangeB ) ) { return false; } } return true; } } }