Compare commits
2 Commits
7d5556da17
...
92678240ab
| Author | SHA1 | Date | |
|---|---|---|---|
| 92678240ab | |||
| d2854bfef5 |
@ -14,6 +14,12 @@
|
||||
[node name="Debugger" parent="." instance=ExtResource("6_lpvoh")]
|
||||
|
||||
[node name="Player" parent="." instance=ExtResource("2_f4ehn")]
|
||||
_input_mode = 1
|
||||
_device_index = 1
|
||||
|
||||
[node name="Player2" parent="." instance=ExtResource("2_f4ehn")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.09589, 0, 1.53304)
|
||||
_input_mode = 1
|
||||
|
||||
[node name="Geometry" type="Node" parent="."]
|
||||
|
||||
|
||||
@ -25,6 +25,7 @@ func _physics_process(_delta: float) -> void:
|
||||
var follow_position: Vector3 = Vector3.ZERO
|
||||
for player in Player.instances:
|
||||
follow_position += player.global_position
|
||||
follow_position /= Player.instances.size()
|
||||
follow_position += Vector3.UP * _height_offset
|
||||
|
||||
global_position = follow_position + transform.basis.z * _distance
|
||||
|
||||
@ -3,13 +3,21 @@ extends CharacterBody3D
|
||||
|
||||
static var instances: Array[Player]
|
||||
|
||||
@export var _input_mode: Inputer.Mode = Inputer.Mode.KB_MOUSE
|
||||
@export var _device_index: int = 0
|
||||
|
||||
@export_group("References")
|
||||
@export var _mover: PlayerMover
|
||||
|
||||
|
||||
static func is_single_player() -> bool:
|
||||
return instances.size() <= 1
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
instances.append(self)
|
||||
|
||||
|
||||
func _exit_tree() -> void:
|
||||
instances.erase(self)
|
||||
|
||||
@ -17,3 +25,22 @@ func _exit_tree() -> void:
|
||||
func _physics_process(delta: float) -> void:
|
||||
velocity = _mover.handle_movement(velocity, delta, is_on_floor(), true)
|
||||
move_and_slide()
|
||||
|
||||
|
||||
func _unhandled_input(event: InputEvent) -> void:
|
||||
var mode := Inputer.get_event_mode(event)
|
||||
if (
|
||||
not input_mode_is(mode)
|
||||
or (
|
||||
not is_single_player()
|
||||
and _input_mode == Inputer.Mode.CONTROLLER
|
||||
and event.device != _device_index
|
||||
)
|
||||
):
|
||||
return
|
||||
|
||||
_mover.handle_input(event, mode)
|
||||
|
||||
|
||||
func input_mode_is(mode: Inputer.Mode) -> bool:
|
||||
return is_single_player() or _input_mode == mode
|
||||
|
||||
@ -9,6 +9,46 @@ extends Node
|
||||
@export var fall_speed: float = 20
|
||||
@export var fall_acceleration: float = 25
|
||||
|
||||
var _move_left: float
|
||||
var _move_right: float
|
||||
var _move_up: float
|
||||
var _move_down: float
|
||||
|
||||
|
||||
func handle_input(event: InputEvent, mode: Inputer.Mode) -> void:
|
||||
if Player.is_single_player():
|
||||
return
|
||||
|
||||
if mode == Inputer.Mode.KB_MOUSE and event is InputEventKey:
|
||||
var key_event := event as InputEventKey
|
||||
if key_event.is_action_pressed("move_left"):
|
||||
_move_left = 1
|
||||
elif key_event.is_action_released("move_left"):
|
||||
_move_left = 0
|
||||
if key_event.is_action_pressed("move_right"):
|
||||
_move_right = 1
|
||||
elif key_event.is_action_released("move_right"):
|
||||
_move_right = 0
|
||||
if key_event.is_action_pressed("move_up"):
|
||||
_move_up = 1
|
||||
elif key_event.is_action_released("move_up"):
|
||||
_move_up = 0
|
||||
if key_event.is_action_pressed("move_down"):
|
||||
_move_down = 1
|
||||
elif key_event.is_action_released("move_down"):
|
||||
_move_down = 0
|
||||
|
||||
if mode == Inputer.Mode.CONTROLLER and event is InputEventJoypadMotion:
|
||||
var motion_event := event as InputEventJoypadMotion
|
||||
if motion_event.is_action("move_left"):
|
||||
_move_left = motion_event.get_action_strength("move_left")
|
||||
if motion_event.is_action("move_right"):
|
||||
_move_right = motion_event.get_action_strength("move_right")
|
||||
if motion_event.is_action("move_up"):
|
||||
_move_up = motion_event.get_action_strength("move_up")
|
||||
if motion_event.is_action("move_down"):
|
||||
_move_down = motion_event.get_action_strength("move_down")
|
||||
|
||||
|
||||
func handle_movement(
|
||||
velocity: Vector3, delta: float, is_on_floor: bool, can_move: bool
|
||||
@ -20,12 +60,22 @@ func handle_movement(
|
||||
|
||||
|
||||
func _lateral_movement(velocity: Vector3, delta: float, can_move: bool) -> Vector3:
|
||||
var move_input := Input.get_vector(
|
||||
"move_left",
|
||||
"move_right",
|
||||
"move_up",
|
||||
"move_down",
|
||||
Settings.movement_stick_deadzone
|
||||
var move_input := (
|
||||
Input.get_vector(
|
||||
"move_left",
|
||||
"move_right",
|
||||
"move_up",
|
||||
"move_down",
|
||||
Settings.movement_stick_deadzone
|
||||
)
|
||||
if Player.is_single_player()
|
||||
else Inputer.get_vector_from_raw_strengths(
|
||||
_move_left,
|
||||
_move_right,
|
||||
_move_up,
|
||||
_move_down,
|
||||
Settings.movement_stick_deadzone
|
||||
)
|
||||
)
|
||||
|
||||
if move_input.length() > 0 and can_move:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user