Files
MovementTests/systems/inputs/input_system.gd
Minimata 1a4b2f4c19
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 20s
Create tag and build when new code gets to main / Export (push) Successful in 10m34s
Ended with remapping and removed old junk
2026-01-12 15:41:43 +01:00

134 lines
3.6 KiB
GDScript

extends Node3D
class_name InputController
@export_group("Mapping contexts")
@export var base_mode:GUIDEMappingContext
@export_group("Move actions")
@export var move:GUIDEAction
@export var move_left:GUIDEAction
@export var move_right:GUIDEAction
@export var move_front:GUIDEAction
@export var move_back:GUIDEAction
@export var rotate_vertical:GUIDEAction
@export var rotate_floorplane:GUIDEAction
@export_group("Trigger actions")
@export_subgroup("Aim")
@export var aim_down:GUIDEAction
@export var aim_pressed:GUIDEAction
@export var aim_released:GUIDEAction
@export_subgroup("Jump")
@export var jump:GUIDEAction
@export var jump_pressed:GUIDEAction
@export_subgroup("Slide")
@export var slide:GUIDEAction
@export var slide_pressed:GUIDEAction
@export_subgroup("Other")
@export var hit:GUIDEAction
@export var parry:GUIDEAction
@export var dash:GUIDEAction
@export var slam:GUIDEAction
signal input_device_changed(is_gamepad: bool)
var _using_gamepad = false
signal input_move(value: Vector3)
signal input_rotate_y(value: float)
signal input_rotate_floorplane(value: float)
signal input_move_keyboard(value: Vector3)
# Jump
signal input_jump_started
signal input_jump_ongoing
signal input_jump_ended
signal input_aim_pressed
signal input_aim_down
signal input_aim_released
signal input_slide_started
signal input_slide_ongoing
signal input_slide_ended
signal input_hit
signal input_parry
signal input_dash
signal input_slam
func _ready() -> void:
GUIDE.enable_mapping_context(base_mode)
aim_down.triggered.connect(on_input_aim_down)
aim_pressed.triggered.connect(on_input_aim_pressed)
aim_released.triggered.connect(on_input_aim_released)
jump_pressed.triggered.connect(on_input_jump_started)
jump.triggered.connect(on_input_jump_ongoing)
jump.completed.connect(on_input_jump_ended)
slide_pressed.triggered.connect(on_input_slide_started)
slide.triggered.connect(on_input_slide_ongoing)
slide.completed.connect(on_input_slide_ended)
hit.triggered.connect(on_input_hit)
parry.triggered.connect(on_input_parry)
dash.triggered.connect(on_input_dash)
slam.triggered.connect(on_input_slam)
func on_input_hit():
input_hit.emit()
func on_input_parry():
input_parry.emit()
func on_input_dash():
input_dash.emit()
func on_input_slam():
input_slam.emit()
func on_input_jump_started():
input_jump_started.emit()
func on_input_jump_ongoing():
input_jump_ongoing.emit()
func on_input_jump_ended():
input_jump_ended.emit()
func on_input_aim_down():
input_aim_down.emit()
func on_input_aim_pressed():
input_aim_pressed.emit()
func on_input_aim_released():
input_aim_released.emit()
func on_input_slide_started():
input_slide_started.emit()
func on_input_slide_ongoing():
input_slide_ongoing.emit()
func on_input_slide_ended():
input_slide_ended.emit()
func _input(event: InputEvent) -> void:
if event is InputEventKey:
if _using_gamepad:
_using_gamepad = false
input_device_changed.emit(_using_gamepad)
elif event is InputEventJoypadMotion:
if !_using_gamepad:
if abs(event.axis_value) > 0.5:
_using_gamepad = true
input_device_changed.emit(_using_gamepad)
elif event is InputEventJoypadButton:
if !_using_gamepad:
_using_gamepad = true
input_device_changed.emit(_using_gamepad)
func _process(_delta: float) -> void:
var value_horizontal = -move_left.value_axis_1d + move_right.value_axis_1d
var value_vertical = -move_front.value_axis_1d + move_back.value_axis_1d
var keyboard_input_vector = Vector3(value_horizontal, 0, value_vertical)
input_move_keyboard.emit(keyboard_input_vector)
input_move.emit(move.value_axis_3d)
input_rotate_y.emit(rotate_vertical.value_axis_1d)
input_rotate_floorplane.emit(rotate_floorplane.value_axis_1d)