using Godot; using System.Reflection; using System.Collections.Generic; namespace Rokojori { public class CustomMaterialProperty<[MustBeVariant] T> { public CustomMaterialProperty( CustomMaterial m, ShaderPropertyName n ) { _material = m; _name = n; } protected CustomMaterial _material; ShaderPropertyName _name; public S GetPropertyName() where S:ShaderPropertyName { return _name as S; } public string propertyName => _name.propertyName; public T Get() { return _name._Get( _material, default( T ) ); } public void Set( T value ) { _name._Set( _material, value ); } public void AssignFor( CustomMaterial material, T value ) { _name._Set( material, value ); } public void AssignFor( List materials, T value ) { materials.ForEach( m => AssignFor( m, value ) ); } } }