using Godot; using System.Collections.Generic; namespace Rokojori { [Tool] [GlobalClass,Icon("res://addons/rokojori_action_library/Icons/AxisSensor.svg")] public partial class GamePadAxisSensor : Sensor, iOnInputSensor { [Export] public JoyAxis axis; public override bool isMultiDevice => true; [Export] public GamePadAxisType type; public override string ToString() { return RJLog.GetInfo( this, axis, type ); } float _lastInput = 0; protected override void UpdateValue() { SetFloatValue( _lastInput ); } public void _Input( InputEvent ev ) { var joypadAxisEvent = ev as InputEventJoypadMotion; if ( joypadAxisEvent == null ) { return; } if ( joypadAxisEvent.Axis != axis ) { return; } _lastInput = Mathf.Max( (GamePadAxisType.Negative == type ? -1 : 1 ) * joypadAxisEvent.AxisValue, 0 ); UpdateSensorUsage( joypadAxisEvent.Device ); } public override List GetInputIcons() { var icon = new GamePadAxisIcon(); icon.axis = axis; icon.type = type; return new List(){ icon }; } } }