make multiplayer input consider devices
This commit is contained in:
parent
e290a3afcd
commit
9eb34cbfb3
@ -18,7 +18,6 @@ process_physics_priority = -1
|
||||
[node name="Player2" parent="." instance=ExtResource("2_f4ehn")]
|
||||
process_priority = -1
|
||||
process_physics_priority = -1
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.08931, 4.76837e-07, 1.5065)
|
||||
_input_mode = 1
|
||||
|
||||
[node name="Geometry" type="Node" parent="."]
|
||||
|
||||
@ -69,6 +69,25 @@ func get_action_prompt(action: StringName) -> String:
|
||||
return _get_event_prompt(events[0]) if events.size() != 0 else "???"
|
||||
|
||||
|
||||
func get_vector_from_raw_strengths(
|
||||
negative_x: float,
|
||||
positive_x: float,
|
||||
negative_y: float,
|
||||
positive_y: float,
|
||||
deadzone := 0.5
|
||||
) -> Vector2:
|
||||
var vector := Vector2(positive_x - negative_x, positive_y - negative_y)
|
||||
|
||||
var length := vector.length()
|
||||
|
||||
if length <= deadzone:
|
||||
return Vector2.ZERO
|
||||
if length > 1.0:
|
||||
return vector.normalized()
|
||||
|
||||
return vector * inverse_lerp(deadzone, 1.0, length) / length
|
||||
|
||||
|
||||
func get_event_mode(event: InputEvent) -> Mode:
|
||||
if event is InputEventJoypadButton or event is InputEventJoypadMotion:
|
||||
return Mode.CONTROLLER
|
||||
|
||||
@ -39,11 +39,11 @@ func _follow(player: Player, delta: float) -> Vector3:
|
||||
player_offset["floor_height"] = player_position.y
|
||||
player_position.y = player_offset["floor_height"] + Projectile.HEIGHT
|
||||
|
||||
if player.input_mode_is(Inputer.Mode.KB_MOUSE):
|
||||
if Referencer.players_count > 1:
|
||||
player_offset["aim_offset"] = Vector3.ZERO
|
||||
elif player.input_mode_is(Inputer.Mode.KB_MOUSE):
|
||||
player_offset["aim_offset"] = player.aiming.aim_offset
|
||||
elif (
|
||||
player.input_mode_is(Inputer.Mode.CONTROLLER) and Referencer.players_count == 1
|
||||
):
|
||||
elif player.input_mode_is(Inputer.Mode.CONTROLLER):
|
||||
var new_aim_offset := (
|
||||
Vector3.ZERO
|
||||
if player.aiming.aim_input.length() == 0
|
||||
@ -52,8 +52,6 @@ func _follow(player: Player, delta: float) -> Vector3:
|
||||
player_offset["aim_offset"] = player_offset["aim_offset"].lerp(
|
||||
new_aim_offset, _aim_damping * delta
|
||||
)
|
||||
else:
|
||||
player_offset["aim_offset"] = Vector3.ZERO
|
||||
|
||||
var follow_position := (
|
||||
player_position
|
||||
|
||||
@ -44,7 +44,10 @@ func _physics_process(delta: float) -> void:
|
||||
|
||||
func _unhandled_input(event: InputEvent) -> void:
|
||||
var mode := Inputer.get_event_mode(event)
|
||||
if not input_mode_is(mode):
|
||||
if (
|
||||
not input_mode_is(mode)
|
||||
or (_input_mode == Inputer.Mode.CONTROLLER and event.device != _device_index)
|
||||
):
|
||||
return
|
||||
|
||||
movement.handle_input(event, mode)
|
||||
|
||||
@ -9,9 +9,35 @@ var aim_input: Vector2
|
||||
|
||||
var _floor_height: float
|
||||
|
||||
var _aim_left: float
|
||||
var _aim_right: float
|
||||
var _aim_up: float
|
||||
var _aim_down: float
|
||||
|
||||
|
||||
func handle_input(event: InputEvent, mode: Inputer.Mode) -> void:
|
||||
if Referencer.players_count == 1:
|
||||
return
|
||||
|
||||
if mode == Inputer.Mode.CONTROLLER and event is InputEventJoypadMotion:
|
||||
var motion_event := event as InputEventJoypadMotion
|
||||
if motion_event.is_action("aim_left"):
|
||||
_aim_left = motion_event.get_action_strength("aim_left")
|
||||
if motion_event.is_action("aim_right"):
|
||||
_aim_right = motion_event.get_action_strength("aim_right")
|
||||
if motion_event.is_action("aim_up"):
|
||||
_aim_up = motion_event.get_action_strength("aim_up")
|
||||
if motion_event.is_action("aim_down"):
|
||||
_aim_down = motion_event.get_action_strength("aim_down")
|
||||
|
||||
|
||||
func controller_aiming(move_input: Vector2) -> void:
|
||||
aim_input = Input.get_vector("aim_left", "aim_right", "aim_up", "aim_down")
|
||||
if Referencer.players_count == 1:
|
||||
aim_input = Input.get_vector("aim_left", "aim_right", "aim_up", "aim_down")
|
||||
else:
|
||||
aim_input = Inputer.get_vector_from_raw_strengths(
|
||||
_aim_left, _aim_right, _aim_up, _aim_down
|
||||
)
|
||||
|
||||
if aim_input.length() == 0 and move_input.length() == 0:
|
||||
return
|
||||
|
||||
@ -66,7 +66,7 @@ func _lateral_movement(velocity: Vector3, delta: float, can_move: bool) -> Vecto
|
||||
if Referencer.players_count == 1:
|
||||
move_input = Input.get_vector("move_left", "move_right", "move_up", "move_down")
|
||||
else:
|
||||
move_input = _get_vector_from_raw_strengths(
|
||||
move_input = Inputer.get_vector_from_raw_strengths(
|
||||
_move_left, _move_right, _move_up, _move_down
|
||||
)
|
||||
Debugger.text("move_input" + str(get_instance_id()), move_input)
|
||||
@ -97,20 +97,4 @@ func _vertical_movement(velocity: Vector3, delta: float, is_on_floor: bool) -> V
|
||||
return velocity
|
||||
|
||||
|
||||
func _get_vector_from_raw_strengths(
|
||||
negative_x: float,
|
||||
positive_x: float,
|
||||
negative_y: float,
|
||||
positive_y: float,
|
||||
deadzone := 0.5
|
||||
) -> Vector2:
|
||||
var vector := Vector2(positive_x - negative_x, positive_y - negative_y)
|
||||
|
||||
var length := vector.length()
|
||||
|
||||
if length <= deadzone:
|
||||
return Vector2.ZERO
|
||||
if length > 1.0:
|
||||
return vector.normalized()
|
||||
|
||||
return vector * inverse_lerp(deadzone, 1.0, length) / length
|
||||
|
||||
Loading…
Reference in New Issue
Block a user