rj-action-library/Runtime/Sensors/InputIcons/Definitions/CombinedInputIconsTexture.cs

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