rj-action-library/Runtime/Animation/Wipe/TextureWipeEffect.cs

94 lines
3.0 KiB
C#

using System.Collections;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Text;
using Godot;
namespace Rokojori
{
[Tool]
[GlobalClass]
public partial class TextureWipeEffect:WipeEffect
{
[ExportGroup("Texture")]
[Export]
public Texture2D texture;
[Export]
public Gradient tint;
[ExportGroup("Texture Transform")]
[Export]
public Curve rotation = MathX.Curve( 0, 0 );
[Export]
public Curve scale = MathX.Curve( 1, 1 );
[Export]
public Curve translationX = MathX.Curve( 0, 0 );
[Export]
public Curve translationY = MathX.Curve( 0, 0 );
[ExportGroup("Texture Transform Centers")]
[Export]
public Vector2 rotationCenter = new Vector2( 0.5f, 0.5f );
[Export]
public Vector2 scaleCenter = new Vector2( 0.5f, 0.5f );
public static readonly Texture2DPropertyName _wipeTextureProperty = Texture2DPropertyName.Create( "wipeTexture" );
public static readonly Vector2PropertyName _outputViewSizeProperty = Vector2PropertyName.Create( "outputViewSize" );
public static readonly Vector2PropertyName _wipeTextureSizeProperty = Vector2PropertyName.Create( "wipeTextureSize" );
public static readonly Vector2PropertyName _uvRotationCenterProperty = Vector2PropertyName.Create( "uvRotationCenter" );
public static readonly Vector2PropertyName _uvScaleCenterPropery = Vector2PropertyName.Create( "uvScaleCenter" );
public static readonly ColorPropertyName _wipeTextureTintProperty = ColorPropertyName.Create( "wipeTextureTint" );
public static readonly FloatPropertyName _uvRotationProperty = FloatPropertyName.Create( "uvRotation" );
public static readonly FloatPropertyName _uvScaleProperty = FloatPropertyName.Create( "uvScale" );
public static readonly Vector2PropertyName _uvTranslationProperty = Vector2PropertyName.Create( "uvTranslation" );
public override void Assign( ColorRect colorRect )
{
if ( colorRect == null )
{
return;
}
var material = GetMaterial( colorRect );
if ( texture != null )
{
_wipeTextureProperty.Set( material, texture );
_wipeTextureSizeProperty.Set( material, texture.GetSize() );
_uvRotationCenterProperty.Set( material, rotationCenter );
_uvScaleCenterPropery.Set( material, scaleCenter );
}
_outputViewSizeProperty.Set( material, colorRect.GetViewportRect().Size );
}
public override void SetWipeState( float state, ColorRect target )
{
if ( target == null )
{
return;
}
var material = GetMaterial( target );
_wipeTextureTintProperty.Set( material, tint.Sample( state ) );
_uvRotationProperty.Set( material, rotation.Sample( state ) );
_uvScaleProperty.Set( material, rotation.Sample( state ) );
_uvTranslationProperty.Set( material, new Vector2( translationX.Sample( state ), translationY.Sample( state ) ) );
}
}
}