using System.Collections; using System.Collections.Generic; using Godot; using System; using System.Threading.Tasks; namespace Rokojori { /** Abstract archetype resource to create foliage material overrides */ [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; } } }