94 lines
3.0 KiB
C#
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 ) ) );
|
|
|
|
}
|
|
|
|
}
|
|
} |