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")]
|
[node name="Player2" parent="." instance=ExtResource("2_f4ehn")]
|
||||||
process_priority = -1
|
process_priority = -1
|
||||||
process_physics_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
|
_input_mode = 1
|
||||||
|
|
||||||
[node name="Geometry" type="Node" parent="."]
|
[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 "???"
|
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:
|
func get_event_mode(event: InputEvent) -> Mode:
|
||||||
if event is InputEventJoypadButton or event is InputEventJoypadMotion:
|
if event is InputEventJoypadButton or event is InputEventJoypadMotion:
|
||||||
return Mode.CONTROLLER
|
return Mode.CONTROLLER
|
||||||
|
|||||||
@ -39,11 +39,11 @@ func _follow(player: Player, delta: float) -> Vector3:
|
|||||||
player_offset["floor_height"] = player_position.y
|
player_offset["floor_height"] = player_position.y
|
||||||
player_position.y = player_offset["floor_height"] + Projectile.HEIGHT
|
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
|
player_offset["aim_offset"] = player.aiming.aim_offset
|
||||||
elif (
|
elif player.input_mode_is(Inputer.Mode.CONTROLLER):
|
||||||
player.input_mode_is(Inputer.Mode.CONTROLLER) and Referencer.players_count == 1
|
|
||||||
):
|
|
||||||
var new_aim_offset := (
|
var new_aim_offset := (
|
||||||
Vector3.ZERO
|
Vector3.ZERO
|
||||||
if player.aiming.aim_input.length() == 0
|
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(
|
player_offset["aim_offset"] = player_offset["aim_offset"].lerp(
|
||||||
new_aim_offset, _aim_damping * delta
|
new_aim_offset, _aim_damping * delta
|
||||||
)
|
)
|
||||||
else:
|
|
||||||
player_offset["aim_offset"] = Vector3.ZERO
|
|
||||||
|
|
||||||
var follow_position := (
|
var follow_position := (
|
||||||
player_position
|
player_position
|
||||||
|
|||||||
@ -44,7 +44,10 @@ func _physics_process(delta: float) -> void:
|
|||||||
|
|
||||||
func _unhandled_input(event: InputEvent) -> void:
|
func _unhandled_input(event: InputEvent) -> void:
|
||||||
var mode := Inputer.get_event_mode(event)
|
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
|
return
|
||||||
|
|
||||||
movement.handle_input(event, mode)
|
movement.handle_input(event, mode)
|
||||||
|
|||||||
@ -9,9 +9,35 @@ var aim_input: Vector2
|
|||||||
|
|
||||||
var _floor_height: float
|
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:
|
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:
|
if aim_input.length() == 0 and move_input.length() == 0:
|
||||||
return
|
return
|
||||||
|
|||||||
@ -66,7 +66,7 @@ func _lateral_movement(velocity: Vector3, delta: float, can_move: bool) -> Vecto
|
|||||||
if Referencer.players_count == 1:
|
if Referencer.players_count == 1:
|
||||||
move_input = Input.get_vector("move_left", "move_right", "move_up", "move_down")
|
move_input = Input.get_vector("move_left", "move_right", "move_up", "move_down")
|
||||||
else:
|
else:
|
||||||
move_input = _get_vector_from_raw_strengths(
|
move_input = Inputer.get_vector_from_raw_strengths(
|
||||||
_move_left, _move_right, _move_up, _move_down
|
_move_left, _move_right, _move_up, _move_down
|
||||||
)
|
)
|
||||||
Debugger.text("move_input" + str(get_instance_id()), move_input)
|
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
|
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