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

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