118 lines
2.1 KiB
C#
118 lines
2.1 KiB
C#
using Godot;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Rokojori
|
|
{
|
|
public class Distance
|
|
{
|
|
|
|
/*
|
|
|
|
P = Point
|
|
S = Sphere
|
|
L = Line
|
|
C = Capsule
|
|
|
|
|
|
P S L C
|
|
P y y y y
|
|
S y y y
|
|
L y y
|
|
C y
|
|
|
|
*/
|
|
|
|
public static float Of( Vector3 a, Vector3 b )
|
|
{
|
|
return ( a - b ).Length();
|
|
}
|
|
|
|
public static float Of( Vector3 a, Sphere b )
|
|
{
|
|
return b.DistanceToPoint( a );
|
|
}
|
|
|
|
public static float Of( Sphere a, Vector3 b )
|
|
{
|
|
return Of( b, a );
|
|
}
|
|
|
|
public static float Of( Vector3 a, Line3 b )
|
|
{
|
|
return b.DistanceToPoint( a );
|
|
}
|
|
|
|
public static float Of( Line3 b, Vector3 a )
|
|
{
|
|
return Of( a, b );
|
|
}
|
|
|
|
public static float Of( Vector3 a, Capsule3 b )
|
|
{
|
|
return b.DistanceToPoint( a );
|
|
}
|
|
|
|
public static float Of( Capsule3 a, Vector3 b )
|
|
{
|
|
return Of( b, a );
|
|
}
|
|
|
|
public static float Of( Sphere a, Sphere b )
|
|
{
|
|
return a.DistanceToSphere( b );
|
|
}
|
|
|
|
public static float Of( Sphere a, Line3 b )
|
|
{
|
|
var centerDistance = Of( a.center, b );
|
|
return Mathf.Max( centerDistance - a.radius, 0 );
|
|
}
|
|
|
|
public static float Of( Line3 a, Sphere b )
|
|
{
|
|
return Of( b, a );
|
|
}
|
|
|
|
public static float Of( Sphere a, Capsule3 b )
|
|
{
|
|
var centerDistance = Of( a.center, b );
|
|
return Mathf.Max( centerDistance - a.radius, 0 );
|
|
}
|
|
|
|
public static float Of( Capsule3 a, Sphere b )
|
|
{
|
|
return Of( b, a );
|
|
}
|
|
|
|
public static float Of( Line3 a, Line3 b )
|
|
{
|
|
return a.DistanceToLine( b );
|
|
}
|
|
|
|
public static float Of( Line3 a, Capsule3 b )
|
|
{
|
|
var lineDistance = Of( a, b.centerLine );
|
|
return Mathf.Max( 0, lineDistance - b.radius );
|
|
}
|
|
|
|
public static float Of( Capsule3 a, Line3 b )
|
|
{
|
|
return Of( b, a );
|
|
}
|
|
|
|
public static float Of( Capsule3 a, Capsule3 b )
|
|
{
|
|
var lineDistance = Of( a.centerLine, b.centerLine );
|
|
return Mathf.Max( 0, lineDistance - ( a.radius + b.radius ) );
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|