94 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C#
		
	
	
	
 | 
						|
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<InputIcon> 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<InputIcon> 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<IconElement> 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<IconElement>();
 | 
						|
      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;
 | 
						|
    }
 | 
						|
    
 | 
						|
 | 
						|
  }
 | 
						|
} |