rokojori_action_library/Runtime/VFX/LineVFX/LinePoint/LineVFXPointData.cs

51 lines
1.1 KiB
C#
Raw Normal View History

2026-02-26 14:06:27 +00:00
using Godot;
using System.Collections.Generic;
namespace Rokojori;
public abstract class LineVFXData
{
public abstract int GetUpdateID();
public abstract IEnumerable<LinePointData> GetPointData();
public abstract int GetNumSegments();
public abstract void SetSegmentData( MeshInstance3D mi, int segmentIndex );
public virtual int GetNumPoints()
{
return GetNumSegments() + 1;
}
public abstract Vector3 GetPositionAt( int index );
public Vector3 LerpPositionAt( float normalizedIndex )
{
if ( GetNumPoints() == 0 )
{
return Vector3.Zero;
}
if ( GetNumPoints() == 1 )
{
return GetPositionAt( 0 );
}
var pointIndex = normalizedIndex * GetNumPoints();
if ( pointIndex <= 0 )
{
return GetPositionAt( 0 );
}
if ( pointIndex >= GetNumPoints() - 1 )
{
return GetPositionAt( GetNumPoints() - 1 );
}
var lowerIndex = Mathf.FloorToInt( pointIndex );
var higherIndex = Mathf.CeilToInt( pointIndex );
var p0 = GetPositionAt( lowerIndex );
var p1 = GetPositionAt( higherIndex );
return p0.Lerp( p1, pointIndex - lowerIndex );
}
}