Sfoglia il codice sorgente

:tada: Plug analog triggers to jeep acceleration

Forward and backward.
DricomDragon 1 anno fa
parent
commit
3862f17a85

+ 4 - 0
godot/component/entity/vehicles/jeep/jeep.gd

@@ -22,3 +22,7 @@ func _on_main_action(pressed: bool) -> void:
 		set_engine_force(max_engine_force)
 	else:
 		set_engine_force(0.0)
+
+
+func _on_analog_action(side: int, value: float) -> void:
+	set_engine_force(side * value * max_engine_force)

+ 7 - 0
godot/component/entity/vehicles/seated_vehicle.gd

@@ -16,12 +16,14 @@ func _init() -> void:
 func drive_with(commander: LocalInput) -> void:
 	commander.dir_changed.connect(_on_dir_changed)
 	commander.main_action.connect(_on_main_action)
+	commander.analog_action.connect(_on_analog_action)
 	_current_commander = commander
 
 
 func get_out() -> void:
 	_current_commander.dir_changed.disconnect(_on_dir_changed)
 	_current_commander.main_action.disconnect(_on_main_action)
+	_current_commander.analog_action.disconnect(_on_analog_action)
 	_current_commander = null
 
 
@@ -60,3 +62,8 @@ func _on_dir_changed(_dir: Vector2) -> void:
 ## Need to be overridden to react to main action
 func _on_main_action(_pressed: bool) -> void:
 	pass
+
+
+## Need to be overridden to react to analog actions
+func _on_analog_action(_side: int, _value: float) -> void:
+	pass

+ 6 - 0
godot/flow/control/local_input/local_input.gd

@@ -2,9 +2,11 @@ class_name LocalInput
 extends Node
 # Sends commands from a local device
 
+
 signal dir_changed(new_dir: Vector2)
 signal main_action(pressed: bool)
 signal get_in_action(commander: LocalInput)
+signal analog_action(side: int, value: float)
 
 
 func _unhandled_input(event: InputEvent) -> void:
@@ -15,6 +17,10 @@ func _unhandled_input(event: InputEvent) -> void:
 	elif event.is_action("move_left") or event.is_action("move_right") or event.is_action("move_back") or event.is_action("move_forward"):
 		var dir: Vector2 = Input.get_vector("move_left", "move_right", "move_back", "move_forward")
 		dir_changed.emit(dir)
+	elif event.is_action("analog_main"):
+		analog_action.emit(1, event.get_action_strength("analog_main"))
+	elif event.is_action("analog_secondary"):
+		analog_action.emit(-1, event.get_action_strength("analog_secondary"))
 
 
 func _on_title_screen_start_game() -> void:

+ 10 - 0
godot/project.godot

@@ -83,6 +83,16 @@ secret={
 , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":81,"key_label":0,"unicode":59,"echo":false,"script":null)
 ]
 }
+analog_main={
+"deadzone": 0.1,
+"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":5,"axis_value":1.0,"script":null)
+]
+}
+analog_secondary={
+"deadzone": 0.1,
+"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":4,"axis_value":1.0,"script":null)
+]
+}
 
 [internationalization]