using Godot; using System.Collections.Generic; namespace Rokojori { [Tool] [GlobalClass, Icon("res://addons/rokojori_action_library/Icons/Sensor.svg")] public partial class CombinedIconsDefinition: InputIconDefinition { [Export] public CombinedInputIconsTexture[] combined = new CombinedInputIconsTexture[ 0 ]; public override int ResolveIcons( int offset, List icons ) { // this.LogInfo( "ResolveIcons", offset, icons ); var resolved = GetIconFor( offset, icons ); if ( resolved == null ) { return -1; } return resolved.icons.Length; } public CombinedInputIconsTexture GetIconFor( int offset, List icons ) { for ( int i = 0; i < combined.Length; i++ ) { var isIcon = combined[ i ].IsIcon( offset, icons ); // RJLog.Log( "isIcon -> offset:", offset, "isIcon:", isIcon, "icons:", icons ); if ( isIcon ) { return combined[ i ]; } } return null; } public override List GetIconElementsForIcon( InputIcon icon ) { var ci = icon as CombinedIcon; if ( ci == null ) { return null; } var resolved = GetIconFor( 0, Lists.From( ci.icons ) ); if ( resolved == null ) { // RJLog.Log( "CombinedIcon: null"); return null; } var resolvedList = new List(); resolvedList.Add( TextureIconElement.Create( resolved.texture, resolved.widthScale ) ); if ( resolved.label != null ) { var labelText = LabelIconElement.Create( resolved.label, resolved.fontSizeScale, resolved.isUpperCase ); resolvedList.Add( labelText ); } return resolvedList; } public override bool HasIconFor( InputIcon icon ) { if ( ! ( icon is CombinedIcon ci ) ) { return false; } var ic = GetIconFor( 0, Lists.From( ci.icons ) ); return ic != null; } } }