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;
|
|
|
|
}
|
|
|
|
}
|
|
} |