110 lines
3.4 KiB
C#
110 lines
3.4 KiB
C#
|
|
using Godot;
|
||
|
|
using System.Collections.Generic;
|
||
|
|
|
||
|
|
using Rokojori.Extensions;
|
||
|
|
namespace Rokojori;
|
||
|
|
|
||
|
|
[Tool]
|
||
|
|
[GlobalClass ]
|
||
|
|
public partial class EmberVFXData:ParticleVFXData
|
||
|
|
{
|
||
|
|
public static readonly CachedResource<ParticleProcessMaterial> EmberExplodeMaterial = new CachedResource<ParticleProcessMaterial>(
|
||
|
|
"res://addons/rokojori_action_library/Runtime/VFX/ParticleVFX/Shared/ProcessMaterials/Ember-Explode.material"
|
||
|
|
);
|
||
|
|
|
||
|
|
public static readonly CachedResource<ShaderMaterial> EmberCircleMaterial = new CachedResource<ShaderMaterial>(
|
||
|
|
"res://addons/rokojori_action_library/Runtime/VFX/ParticleVFX/Embers/Ember Circle.material"
|
||
|
|
);
|
||
|
|
|
||
|
|
public static readonly CachedResource<QuadMesh> QuadMesh = new CachedResource<QuadMesh>(
|
||
|
|
"res://addons/rokojori_action_library/Runtime/VFX/ParticleVFX/Shared/Passes/Quad Draw Pass.tres"
|
||
|
|
);
|
||
|
|
|
||
|
|
public static readonly CachedResource<Gradient> GradientDefault = new CachedResource<Gradient>(
|
||
|
|
" res://addons/rokojori_action_library/Runtime/VFX/ParticleVFX/Shared/Gradient-Default.tres"
|
||
|
|
);
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
public EmberVFXPreset preset;
|
||
|
|
public GpuParticles3D particles;
|
||
|
|
public PlayParticles playParticles;
|
||
|
|
public ParticleProcessMaterial processMaterial;
|
||
|
|
public Material material;
|
||
|
|
|
||
|
|
public void Assign( ParticleVFX vfx )
|
||
|
|
{
|
||
|
|
vfx._SetParticlesVFXData( this );
|
||
|
|
|
||
|
|
particles = vfx.GetOrCreateChild<GpuParticles3D>();
|
||
|
|
particles.DrawPass1 = QuadMesh.Get();
|
||
|
|
|
||
|
|
playParticles = vfx.GetOrCreateChild<PlayParticles>();
|
||
|
|
playParticles.particles3D = particles;
|
||
|
|
playParticles.usePooling = preset.usePooling;
|
||
|
|
|
||
|
|
processMaterial = EmberExplodeMaterial.GetDuplicate();
|
||
|
|
material = EmberCircleMaterial.GetDuplicate();
|
||
|
|
|
||
|
|
RJLog.Log( material, EmberCircleMaterial.GetDuplicate() );
|
||
|
|
|
||
|
|
particles.ProcessMaterial = processMaterial;
|
||
|
|
particles.MaterialOverride = material;
|
||
|
|
|
||
|
|
UpdateSettings( vfx );
|
||
|
|
}
|
||
|
|
|
||
|
|
public void Play( ParticleVFX vfx )
|
||
|
|
{
|
||
|
|
playParticles.Trigger();
|
||
|
|
}
|
||
|
|
|
||
|
|
public static FloatPropertyName meshScale = FloatPropertyName.Create( "meshScale" );
|
||
|
|
|
||
|
|
public void UpdateSettings( ParticleVFX vfx )
|
||
|
|
{
|
||
|
|
if ( preset == null || processMaterial == null )
|
||
|
|
{
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
UpdateCoreSettings( preset, particles );
|
||
|
|
|
||
|
|
processMaterial.Color = preset.color * preset.colorIntensity;
|
||
|
|
|
||
|
|
|
||
|
|
var rampTexture = processMaterial.ColorRamp as GradientTexture1D;
|
||
|
|
|
||
|
|
if ( rampTexture == null )
|
||
|
|
{
|
||
|
|
rampTexture = new GradientTexture1D();
|
||
|
|
processMaterial.ColorRamp = rampTexture;
|
||
|
|
}
|
||
|
|
|
||
|
|
rampTexture.Gradient = preset.gradient ?? GradientDefault.Get();
|
||
|
|
|
||
|
|
|
||
|
|
preset.movement?.UpdateSettings( processMaterial, vfx );
|
||
|
|
preset.volume?.UpdateSettings( processMaterial, vfx );
|
||
|
|
|
||
|
|
meshScale.Set( material, preset.meshScale );
|
||
|
|
|
||
|
|
// processMaterial.ScaleMin = preset.meshScale;
|
||
|
|
// processMaterial.ScaleMax = preset.meshScale;
|
||
|
|
|
||
|
|
// processMaterial.InitialVelocityMin = preset.minVelocity + preset.velocityOffset;
|
||
|
|
// processMaterial.InitialVelocityMax = preset.maxVelocity + preset.velocityOffset;
|
||
|
|
|
||
|
|
// processMaterial.Gravity = preset.gravityDirection * preset.gravityMultiplier;
|
||
|
|
|
||
|
|
// processMaterial.DampingMin = preset.minDamping + preset.dampingOffset;
|
||
|
|
// processMaterial.DampingMax = preset.maxDamping + preset.dampingOffset;
|
||
|
|
}
|
||
|
|
|
||
|
|
#if TOOLS
|
||
|
|
public void DrawGizmo( ParticleVFX vfx, EditorNode3DGizmoPlugin gizmoPlugin, EditorNode3DGizmo gizmo )
|
||
|
|
{
|
||
|
|
preset.volume?.DrawGizmo( vfx, gizmoPlugin, gizmo );
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
}
|