81 lines
1.9 KiB
C#
81 lines
1.9 KiB
C#
|
|
using Godot;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Rokojori
|
|
{
|
|
[Tool]
|
|
[GlobalClass,Icon("res://addons/rokojori_action_library/Icons/Sensor.svg")]
|
|
public partial class InputMapActionSensor: Sensor
|
|
{
|
|
[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 );
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
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 );
|
|
}
|
|
|
|
}
|
|
} |