rokojori_action_library/Runtime/Sensors/InputMapActionSensor.cs

81 lines
1.9 KiB
C#
Raw Normal View History

2025-01-03 12:09:23 +00:00
using Godot;
using System.Collections.Generic;
namespace Rokojori
{
[Tool]
2025-01-21 20:58:56 +00:00
[GlobalClass,Icon("res://addons/rokojori_action_library/Icons/Sensor.svg")]
public partial class InputMapActionSensor: Sensor
2025-01-03 12:09:23 +00:00
{
[Export]
public string inputActionName = "";
public enum PollMode
{
Button,
Half_Axis,
Release_Only_Button
}
[Export]
public PollMode pollMode = PollMode.Button;
public override string ToString()
{
return RJLog.GetInfo( this, inputActionName, pollMode );
}
2025-01-03 12:09:23 +00:00
2026-02-26 14:06:27 +00:00
public override bool IsSensor( InputEvent ie )
{
// this.LogInfo( "Checking action input:", Sensor.GetInputEventInfo( ie ) );
if ( ie.IsActionPressed( inputActionName, true, true ) )
{
var strength = ie.GetActionStrength( inputActionName );
var isActive = strength > 0.01f;
if ( isActive )
{
// this.LogInfo( "Matching pressed action input:", Sensor.GetInputEventInfo( ie ) );
}
return isActive;
}
var released = ie.IsActionReleased( inputActionName, true );
if ( released )
{
// this.LogInfo( "Matching released action input:", Sensor.GetInputEventInfo( ie ) );
}
return released;
}
2025-01-03 12:09:23 +00:00
protected override void UpdateValue()
{
if ( PollMode.Button == pollMode )
{
SetBoolValue( Input.IsActionPressed( inputActionName ) );
}
else if ( PollMode.Release_Only_Button == pollMode )
{
SetBoolValue( Input.IsActionJustReleased( inputActionName ) );
}
else if ( PollMode.Half_Axis == pollMode )
{
SetFloatValue( Input.GetActionRawStrength( inputActionName ) );
}
}
[Export]
public InputIcon[] inputIcons = new InputIcon[ 0 ];
public override List<InputIcon> GetInputIcons()
{
return Lists.From( inputIcons );
}
2025-01-03 12:09:23 +00:00
}
}