rokojori_action_library/Runtime/Sensors/CombineSensor.cs

75 lines
1.5 KiB
C#

using Godot;
using System.Collections.Generic;
namespace Rokojori
{
[Tool]
[GlobalClass,Icon("res://addons/rokojori_action_library/Icons/SensorGroup.svg")]
public partial class CombineSensor : Sensor
{
[Export]
public Sensor[] sensors = new Sensor[ 0 ];
[ExportGroup("UI")]
[Export]
public bool showOnlyVisibleIcons = false;
[Export]
public int numVisible = 0;
public override bool IsSensor( InputEvent ev )
{
foreach ( var s in sensors )
{
if ( s != null && s.IsSensor( ev ) )
{
// this.LogInfo( "Is from combined:", s, Sensor.GetInputEventInfo( ev ) );
return true;
}
}
return false;
}
protected override void UpdateValue()
{
var value = 0f;
for ( int i = 0; i < sensors.Length; i++ )
{
value = Mathf.Max( value, sensors[ i ].value );
}
SetFloatValue( value );
}
public override string ToString()
{
return RJLog.GetInfo( this, sensors );
}
[Export]
public InputIcon[] inputIcons = new InputIcon[ 0 ];
[Export]
public bool useInputIconsFromSensors = true;
public override List<InputIcon> GetInputIcons()
{
var list = Lists.From( inputIcons );
if ( useInputIconsFromSensors )
{
var visible = showOnlyVisibleIcons ? numVisible : sensors.Length;
for ( int i = 0; i < visible; i++ )
{
list.AddRange( sensors[ i ].GetInputIcons() );
}
}
return list;
}
}
}