129 lines
3.2 KiB
C#
129 lines
3.2 KiB
C#
|
|
using Godot;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Rokojori
|
|
{
|
|
[Tool]
|
|
[GlobalClass, Icon("res://addons/rokojori_action_library/Icons/Sensor.svg")]
|
|
public partial class DefaultInputIconDefinition: InputIconDefinition
|
|
{
|
|
[Export]
|
|
public Texture2D backgroundTexture;
|
|
|
|
[Export]
|
|
public float widthScale = 1;
|
|
|
|
[ExportGroup("Font")]
|
|
|
|
[Export]
|
|
public float fontSizeScale = 1;
|
|
|
|
[Export]
|
|
public float fontSizeCharacterMultiply = 0.9f;
|
|
|
|
[Export]
|
|
public bool fontIsUpperCase = true;
|
|
|
|
[Export]
|
|
public bool hasLabel = true;
|
|
|
|
[ExportGroup("Borders")]
|
|
[Export]
|
|
public float borderLeft = 0;
|
|
|
|
[Export]
|
|
public float borderRight = 0;
|
|
|
|
[Export]
|
|
public float borderTop = 0;
|
|
|
|
[Export]
|
|
public float borderBottom = 0;
|
|
|
|
|
|
|
|
public bool hasBorders
|
|
{
|
|
get
|
|
{
|
|
return ( borderLeft + borderRight + borderTop + borderBottom ) > 0;
|
|
}
|
|
}
|
|
|
|
|
|
[ExportGroup("Overlays")]
|
|
|
|
[Export]
|
|
public Texture2D leftIndicatorTexture;
|
|
|
|
[Export]
|
|
public Texture2D rightIndicatorTexture;
|
|
|
|
|
|
public override List<IconElement> GetIconElementsForIcon( InputIcon icon )
|
|
{
|
|
var list = new List<IconElement>();
|
|
|
|
var bg = TextureIconElement.Create( backgroundTexture, widthScale );
|
|
bg.SetBorders( this );
|
|
list.Add( bg );
|
|
|
|
|
|
if ( icon is KeyIcon ki )
|
|
{
|
|
if ( hasLabel )
|
|
{
|
|
var locale = ki.GetIconLocale();
|
|
var fontScale = fontSizeScale * Mathf.Pow( fontSizeCharacterMultiply, locale.currentValue.Length - 1 );
|
|
|
|
var label = LabelIconElement.Create( locale, fontScale, fontIsUpperCase );
|
|
list.Add( label );
|
|
}
|
|
|
|
if ( KeyLocation.Unspecified != ki.location )
|
|
{
|
|
var indicatorTexture = KeyLocation.Left == ki.location ? leftIndicatorTexture :
|
|
KeyLocation.Right == ki.location ? rightIndicatorTexture : null;
|
|
|
|
|
|
if ( indicatorTexture != null )
|
|
{
|
|
var indicatorElement = TextureIconElement.Create( indicatorTexture, widthScale );
|
|
indicatorElement.alignment = KeyLocation.Left == ki.location ? TextureIconOverlayAlignment.Left :
|
|
KeyLocation.Right == ki.location ? TextureIconOverlayAlignment.Right :
|
|
TextureIconOverlayAlignment.Center;
|
|
list.Add( indicatorElement );
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( icon is GamePadButtonIcon bi )
|
|
{
|
|
if ( hasLabel )
|
|
{
|
|
var locale = bi.GetIconLocale();
|
|
var fontScale = fontSizeScale * Mathf.Pow( fontSizeCharacterMultiply, locale.currentValue.Length - 1 );
|
|
|
|
var label = LabelIconElement.Create( locale, fontScale, fontIsUpperCase );
|
|
list.Add( label );
|
|
}
|
|
}
|
|
|
|
if ( icon is GamePadAxisIcon ai )
|
|
{
|
|
if ( hasLabel )
|
|
{
|
|
var locale = ai.GetIconLocale();
|
|
var fontScale = fontSizeScale * Mathf.Pow( fontSizeCharacterMultiply, locale.currentValue.Length - 1 );
|
|
|
|
var label = LabelIconElement.Create( locale, fontScale, fontIsUpperCase );
|
|
list.Add( label );
|
|
}
|
|
}
|
|
|
|
return list;
|
|
}
|
|
|
|
}
|
|
} |