using Godot; using Rokojori; using System.Collections.Generic; namespace Rokojori { [Tool] [GlobalClass,Icon("res://addons/rokojori_action_library/Icons/UIImage.svg")] public partial class UIImage:TextureRect, UIStylePropertyContainer { [Export] public bool freezeImageType = false; UIImageType _imageType; [Export] public UIImageType imageType { get => _imageType; set { if ( freezeImageType ) { return; } if ( _imageType != value ) { if ( _imageType != null ) { _imageType.Clear( this ); } } _imageType = value; this.LogInfo( Material == null ? "null" : ( Material.GetType().Name ) ); UpdateImageType(); this.LogInfo( Material == null ? "null" : ( Material.GetType().Name ) ); } } void UpdateImageType() { ResetImageType(); if ( _imageType != null ) { _imageType.Assign( this ); } } void ResetImageType() { ExpandMode = TextureRect.ExpandModeEnum.IgnoreSize; StretchMode = TextureRect.StretchModeEnum.Scale; Material = null; } public void CopyNumberShaderPropertyFrom( CustomMaterialProperty name, UINumber number, TransitionSettings transition ) { SetNumberShaderProperty( name.GetPropertyName(), number, transition ); } public void SetNumberShaderProperty( FloatPropertyName name, UINumber number, TransitionSettings transition ) { if ( name == null || name.propertyName == null ) { this.LogInfo( "Name is null" ); return; } for ( int i = 0; i < numberProperties.Length; i++ ) { if ( numberProperties[ i ] == null || numberProperties[ i ].floatPropertyName == null ) { return; } } if ( number == null ) { var index = Arrays.FindIndex( numberProperties, p => p.floatPropertyName.propertyName == name.propertyName ); numberProperties = Arrays.RemoveIndex( numberProperties, index ); return; } var shaderUINumber = Arrays.Find( numberProperties, p => p.floatPropertyName.propertyName == name.propertyName ); if ( shaderUINumber == null ) { shaderUINumber = new ShaderUINumber(); shaderUINumber.floatPropertyName = name; numberProperties = Arrays.Add( numberProperties, shaderUINumber ); } shaderUINumber.number = number; shaderUINumber.transitionSettings = transition; } public void CopyColorShaderPropertyFrom( CustomMaterialProperty name, UIColor color ) { SetColorShaderProperty( name.GetPropertyName(), color ); } public void SetColorShaderProperty( ColorPropertyName name, UIColor color ) { if ( name == null || name.propertyName == null ) { this.LogInfo( "Name is null" ); return; } for ( int i = 0; i < colorProperties.Length; i++ ) { if ( colorProperties[ i ] == null || colorProperties[ i ].colorPropertyName == null ) { return; } } if ( color == null ) { var index = Arrays.FindIndex( colorProperties, p => p != null && p.colorPropertyName.propertyName == name.propertyName ); colorProperties = Arrays.RemoveIndex( colorProperties, index ); return; } var shaderUIColor = Arrays.Find( colorProperties, p => p != null && p.colorPropertyName.propertyName == name.propertyName ); if ( shaderUIColor == null ) { shaderUIColor = new ShaderUIColor(); shaderUIColor.colorPropertyName = name; colorProperties = Arrays.Add( colorProperties, shaderUIColor ); } shaderUIColor.color = color; } [Export] public UIStyle parentStyle; [ExportGroup("Size & Margins")] [Export] public UINumber width; [Export] public UINumber height; [Export] public UINumber margin; [Export] public UINumber marginLeft; [Export] public UINumber marginTop; [Export] public UINumber marginRight; [Export] public UINumber marginBottom; [ExportGroup( "Position" )] [Export] public UIPosition position; [Export] public UILineWrap lineWrap; [Export] public UINumber left; [Export] public UINumber top; [Export] public UINumber right; [Export] public UINumber bottom; [ExportGroup( "Rotation & Scale" )] [Export] public UINumber pivotX; [Export] public UINumber pivotY; [Export] public UINumber rotation; [Export] public UINumber scale; [Export] public UINumber scaleX; [Export] public UINumber scaleY; [ExportGroup( "Shader Properties" )] [Export] public ShaderUIColor[] colorProperties = new ShaderUIColor[ 0 ]; public List> activeShaderColorTransitions = new List>(); public List> GetActiveShaderUIColorTransitions() { return activeShaderColorTransitions; } [Export] public ShaderUINumber[] numberProperties = new ShaderUINumber[ 0 ]; public List> activeShaderNumberTransitions = new List>(); public List> GetActiveShaderUINumberTransitions() { return activeShaderNumberTransitions; } [ExportGroup("Transitions")] [Export] public TransitionSettingsAll transitionSettings; public TransitionSettingsAll GetTransitionSettingsAll() { return transitionSettings; } [Export] public UINumberTransition[] numberTransitions = new UINumberTransition[0]; public UINumberTransition[] GetNumberTransitions() { return numberTransitions; } public List> activeNumberTransitions = new List>(); public List> GetActiveUINumberTransitions() { return activeNumberTransitions; } [Export] public UIColorTransition[] colorTransitions = new UIColorTransition[ 0 ]; public UIColorTransition[] GetColorTransitions() { return colorTransitions; } public List> activeColorTransitions = new List>(); public List> GetActiveUIColorTransitions() { return activeColorTransitions; } public UIStyle GetUIStyleParent() { return parentStyle; } public UIPosition GetUIPosition() { return position; } public UILineWrap GetUILineWrap() { return lineWrap; } public UILayout GetUILayout() { return UILayout.___; } public ShaderUIColor[] GetShaderUIColors() { return colorProperties; } public ShaderUINumber[] GetShaderUINumbers() { return numberProperties; } public UINumber GetUIStyleNumberProperty( UIStyleNumberProperty property ) { switch ( property ) { case UIStyleNumberProperty.Width: return width; case UIStyleNumberProperty.Height: return height; case UIStyleNumberProperty.Margin: return margin; case UIStyleNumberProperty.MarginLeft: return marginLeft; case UIStyleNumberProperty.MarginRight: return marginRight; case UIStyleNumberProperty.MarginTop: return marginTop; case UIStyleNumberProperty.MarginBottom: return marginBottom; case UIStyleNumberProperty.Left: return left; case UIStyleNumberProperty.Right: return right; case UIStyleNumberProperty.Top: return top; case UIStyleNumberProperty.Bottom: return bottom; case UIStyleNumberProperty.PivotX: return pivotX; case UIStyleNumberProperty.PivotY: return pivotY; case UIStyleNumberProperty.Rotation: return rotation; case UIStyleNumberProperty.Scale: return scale; case UIStyleNumberProperty.ScaleX: return scaleX; case UIStyleNumberProperty.ScaleY: return scaleY; } return null; } public UIColor GetUIStyleColorProperty( UIStyleColorProperty property ) { return null; } public Font GetFont() { return null; } public Vector2 GetUISize() { return GetSize(); } } }