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;
|
|
|
|
}
|
|
|
|
}
|
|
} |