rj-action-library/Runtime/Rendering/Assets/Foliage/FoliageMaterialOverrides/StandardMaterialOverride.cs

74 lines
1.9 KiB
C#
Raw Normal View History

2025-08-31 06:05:39 +00:00
using System.Collections;
using System.Collections.Generic;
using Godot;
using System;
using System.Threading.Tasks;
namespace Rokojori
{
/** <summary for="class FoliageSource">
<title>
Abstract archetype resource to create foliage material overrides
</title>
<description>
</description>
</summary>
*/
[Tool]
[GlobalClass, Icon("res://addons/rokojori_action_library/Icons/Scatterer.svg") ]
public partial class StandardMaterialOverride:FoliageMaterialOverride
{
[Export]
public FoliageTransparencyRenderMode transparencyRenderMode;
public override void CreateFoliageOverideMaterial( FoliageRenderLayer foliageRenderLayer )
{
var gpuParticles3D = foliageRenderLayer.gpuParticles3D;
if ( gpuParticles3D.DrawPass1 == null )
{
return;
}
var originalMaterial = gpuParticles3D.DrawPass1.SurfaceGetMaterial( 0 );
if ( ! ( originalMaterial is StandardMaterial3D || originalMaterial is OrmMaterial3D ) )
{
return;
}
var overrideMaterial = (StandardMaterial3D)originalMaterial.Duplicate();
gpuParticles3D.MaterialOverride = overrideMaterial;
UpdateFoliageOverideMaterial( foliageRenderLayer );
}
public override void UpdateFoliageOverideMaterial( FoliageRenderLayer foliageRenderLayer )
{
var material = foliageRenderLayer.gpuParticles3D.MaterialOverride;
if ( material == null || ! ( material is StandardMaterial3D ) )
{
return;
}
var standardMaterial = (StandardMaterial3D) material;
transparencyRenderMode?.ApplyTransparencyMode( standardMaterial, foliageRenderLayer );
}
public override Material GetOverrideMaterial(FoliageRenderLayer foliageRenderLayer)
{
var material = foliageRenderLayer.gpuParticles3D.MaterialOverride;
return material;
}
}
}