FrameSmoothing Camera
This commit is contained in:
		
							parent
							
								
									861ffd1a6d
								
							
						
					
					
						commit
						ab4d9cf473
					
				| 
						 | 
					@ -9,7 +9,7 @@ namespace Rokojori
 | 
				
			||||||
	public partial class FrameSmoothing: Smoothing
 | 
						public partial class FrameSmoothing: Smoothing
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
    [Export( PropertyHint.Range, "0,600")]
 | 
					    [Export( PropertyHint.Range, "0,600")]
 | 
				
			||||||
    public int frames = 10;      
 | 
					    public float frames = 10;      
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    protected override float _ComputeInterpolationAmount( float delta )
 | 
					    protected override float _ComputeInterpolationAmount( float delta )
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
| 
						 | 
					@ -20,11 +20,10 @@ namespace Rokojori
 | 
				
			||||||
        return 1;
 | 
					        return 1;
 | 
				
			||||||
      }      
 | 
					      }      
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      var coefficient = GetCoefficientForFrames( frames );
 | 
					      var coefficient = GetLerpedCoefficientForFrames( frames );
 | 
				
			||||||
      return 1f - Mathf.Exp( -coefficient * delta );
 | 
					      return 1f - Mathf.Exp( -coefficient * delta );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
    public static float ComputeCoefficient( float delta, float frames )
 | 
					    public static float ComputeCoefficient( float delta, float frames )
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      int floored = Mathf.FloorToInt( frames );
 | 
					      int floored = Mathf.FloorToInt( frames );
 | 
				
			||||||
| 
						 | 
					@ -48,6 +47,16 @@ namespace Rokojori
 | 
				
			||||||
      return 1f - Mathf.Exp( -coefficient * delta );
 | 
					      return 1f - Mathf.Exp( -coefficient * delta );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static float GetLerpedCoefficientForFrames( float frames )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      int floored = Mathf.FloorToInt( frames );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      float low  = GetCoefficientForFrames( floored );
 | 
				
			||||||
 | 
					      float high = GetCoefficientForFrames( floored + 1 );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      return Mathf.Lerp( low, high, frames - floored ); 
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static float GetCoefficientForFrames( int frames )
 | 
					    public static float GetCoefficientForFrames( int frames )
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      return FrameSmoothingTable.Get( frames );
 | 
					      return FrameSmoothingTable.Get( frames );
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,6 +4,8 @@ using Godot;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Rokojori
 | 
					namespace Rokojori
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					  [Tool]
 | 
				
			||||||
 | 
					  [GlobalClass]
 | 
				
			||||||
	public partial class Smoothing: Resource
 | 
						public partial class Smoothing: Resource
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
    float _currentFloat = 0;
 | 
					    float _currentFloat = 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -42,6 +42,9 @@ namespace Rokojori
 | 
				
			||||||
    public float zoomSmoothingCoefficient = 0.1f;
 | 
					    public float zoomSmoothingCoefficient = 0.1f;
 | 
				
			||||||
    Smoother smoother = new Smoother();
 | 
					    Smoother smoother = new Smoother();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [Export( PropertyHint.Range, "0,600")]
 | 
				
			||||||
 | 
					    public Smoothing zoomSmoothing = new Smoothing();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public Vector3 moveDirection = Vector3.Zero;
 | 
					    public Vector3 moveDirection = Vector3.Zero;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    [Export]
 | 
					    [Export]
 | 
				
			||||||
| 
						 | 
					@ -244,7 +247,11 @@ namespace Rokojori
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void Apply( float delta )
 | 
					    void Apply( float delta )
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      _smoothDistance = smoother.SmoothWithCoefficient( _smoothDistance, distance, zoomSmoothingCoefficient, delta );
 | 
					      // _smoothDistance = smoother.SmoothWithCoefficient( _smoothDistance, distance, zoomSmoothingCoefficient, delta );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // _smoothDistance = FrameSmoothing.ComputeCoefficient
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      _smoothDistance = Smoothing.Apply( zoomSmoothing, distance, delta );
 | 
				
			||||||
      GlobalRotation = new Vector3( Mathf.DegToRad( pitch ), Mathf.DegToRad( yaw ), 0 );
 | 
					      GlobalRotation = new Vector3( Mathf.DegToRad( pitch ), Mathf.DegToRad( yaw ), 0 );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      var forward = Math3D.GetGlobalForward( this ) * _smoothDistance;
 | 
					      var forward = Math3D.GetGlobalForward( this ) * _smoothDistance;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue