70 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			70 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C#
		
	
	
	
| 
								 | 
							
								using System.Collections;
							 | 
						||
| 
								 | 
							
								using System.Collections.Generic;
							 | 
						||
| 
								 | 
							
								using Godot;
							 | 
						||
| 
								 | 
							
								using System;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace Rokojori
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  [Tool]
							 | 
						||
| 
								 | 
							
								  [GlobalClass]
							 | 
						||
| 
								 | 
							
								  public partial class DiscardSpline:Discarder
							 | 
						||
| 
								 | 
							
								  {    
							 | 
						||
| 
								 | 
							
								    [Export]
							 | 
						||
| 
								 | 
							
								    public Spline spline;
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    [Export]
							 | 
						||
| 
								 | 
							
								    public float size;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    [Export]
							 | 
						||
| 
								 | 
							
								    public bool xzOnly = false;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    [Export]
							 | 
						||
| 
								 | 
							
								    public bool asFilledXZPath = false;
							 | 
						||
| 
								 | 
							
								   
							 | 
						||
| 
								 | 
							
								    public override bool IsInside( Vector3 position )
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      if ( asFilledXZPath )
							 | 
						||
| 
								 | 
							
								      {        
							 | 
						||
| 
								 | 
							
								        var bounds = spline.GetBounds().AsXZBox2();
							 | 
						||
| 
								 | 
							
								        bounds.GrowRelativeToSize( 1/3f );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        var p2 = Math2D.XZ( position ); 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ( bounds.ContainsPoint( p2 ) )
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								          //var path = spline.GetXZPath2();
							 | 
						||
| 
								 | 
							
								          var cg = spline.GetConvex2Group();
							 | 
						||
| 
								 | 
							
								          var insideGroup = cg.ContainsPoint( p2 );
							 | 
						||
| 
								 | 
							
								         // var insidePath = insideGroup || path.PointInPath( p2, fastButUnreliableFilledXZPathChecks, false );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								          if ( insideGroup )
							 | 
						||
| 
								 | 
							
								          {
							 | 
						||
| 
								 | 
							
								            return true;
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        }        
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      if ( size <= 0 )
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        return false;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var curve = xzOnly ? spline.GetCurveXZ() : spline.GetCurve();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var testPosition = position;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      if ( xzOnly )
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        testPosition.Y = 0;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var distance = curve.GetDistanceTo( testPosition );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      return distance < size;
							 | 
						||
| 
								 | 
							
								      
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								   
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 |