80 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C#
		
	
	
	
 | 
						|
using Godot;
 | 
						|
using System.Collections.Generic;
 | 
						|
 | 
						|
namespace Rokojori
 | 
						|
{  
 | 
						|
  [Tool]
 | 
						|
  [GlobalClass, Icon("res://addons/rokojori_action_library/Icons/Sensor.svg")]
 | 
						|
  public partial class CombinedInputIconsTexture: Resource
 | 
						|
  { 
 | 
						|
    [Export] 
 | 
						|
    public InputIcon[] icons = new InputIcon[ 0 ];
 | 
						|
 | 
						|
    [Export]
 | 
						|
    public Texture2D texture;
 | 
						|
 | 
						|
    [Export]
 | 
						|
    public float widthScale = 1;
 | 
						|
    
 | 
						|
    [Export]
 | 
						|
    public CombineIconOrderMode orderMode = CombineIconOrderMode.Any_Order;
 | 
						|
    
 | 
						|
    [Export]
 | 
						|
    public LocalizedString label;
 | 
						|
 | 
						|
    [Export]
 | 
						|
    public bool isUpperCase = true;
 | 
						|
 | 
						|
    [Export]
 | 
						|
    public float fontSizeScale = 1;
 | 
						|
 | 
						|
    public bool IsIcon( int offset, List<InputIcon> iconList )
 | 
						|
    {
 | 
						|
      var iconOrder = new List<InputIcon>();
 | 
						|
 | 
						|
      for ( int i = 0; i < icons.Length && ( i + offset ) < iconList.Count ; i++ )
 | 
						|
      {
 | 
						|
        var icon = iconList[ offset + i ];
 | 
						|
 | 
						|
        if ( icon == null )
 | 
						|
        {
 | 
						|
          return false;
 | 
						|
        }
 | 
						|
 | 
						|
        if ( ! Arrays.ContainsEqual( icons, icon ) )
 | 
						|
        {
 | 
						|
          return false;
 | 
						|
        }
 | 
						|
        
 | 
						|
        if ( Lists.ContainsEqual( iconOrder, icon ) )
 | 
						|
        {
 | 
						|
          return false;
 | 
						|
        }
 | 
						|
 | 
						|
        iconOrder.Add( icon );
 | 
						|
      }
 | 
						|
 | 
						|
      if ( iconOrder.Count != icons.Length )
 | 
						|
      {
 | 
						|
        return false;
 | 
						|
      }
 | 
						|
 | 
						|
      if ( CombineIconOrderMode.Forward_Only == orderMode )
 | 
						|
      {
 | 
						|
        return Lists.AreEntriesEqual( iconOrder, Lists.From( icons ) );
 | 
						|
      }
 | 
						|
      else if ( CombineIconOrderMode.Forward_And_Reverse == orderMode )
 | 
						|
      {
 | 
						|
        var list  = Lists.From( icons );
 | 
						|
        var listR = Lists.From( icons ); listR.Reverse();
 | 
						|
        
 | 
						|
        return Lists.AreEntriesEqual( iconOrder, list ) || Lists.AreEntriesEqual( iconOrder, listR );
 | 
						|
      }
 | 
						|
 | 
						|
      return true;  
 | 
						|
      
 | 
						|
    }
 | 
						|
 | 
						|
  }
 | 
						|
} |