using System.Collections;
using System.Collections.Generic;
using Godot;
using System;



namespace Rokojori
{
  [Tool]
  [GlobalClass]
  public partial class LODMultiMeshInstance3D:MultiMeshInstance3D
  {
    [Export]
    public float cullDistance = 200;

    [Export]
    public float cullRange = 100;

    [Export]
    public Curve cullCurve = MathX.Curve( 0, 1 );

    public override void _Process( double delta )
    {
      var camera = GetViewport().GetCamera3D();

#if TOOLS 

      if ( Engine.IsEditorHint() )
      {
        camera = EditorInterface.Singleton.GetEditorViewport3D().GetCamera3D();
      }
       
#endif

      var distance = ( camera.GlobalPosition - GlobalPosition ).Length();

      var cullAmount = MathX.NormalizeClamped( distance, cullDistance - cullRange, cullDistance );
      cullAmount = cullCurve == null ? cullAmount : cullCurve.Sample( cullAmount );

      Multimesh.VisibleInstanceCount = Mathf.RoundToInt( Multimesh.InstanceCount  * ( 1.0 - cullAmount ) );

    }
  }
}