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 GetInputIcons() { return Lists.From( inputIcons ); } } }