diff --git a/scripts/globals/cursor.gd b/scripts/globals/cursor.gd index b1d00dc..0c64c91 100644 --- a/scripts/globals/cursor.gd +++ b/scripts/globals/cursor.gd @@ -16,14 +16,14 @@ func _ready() -> void: func _process(delta: float) -> void: - if not Referencer.player or not Referencer.main_camera: + if not Referencer.players or not Referencer.main_camera: var mouse_pos := get_viewport().get_mouse_position() _base.position = mouse_pos - _base.size / 2 _bat.visible = false return _bat.visible = true - var player := Referencer.player + var player := Referencer.players[0] var cursor_pos_world := player.attack.global_position + player.aiming.aim_offset var cursor_pos_screen := Referencer.main_camera.unproject_position(cursor_pos_world) diff --git a/scripts/globals/referencer.gd b/scripts/globals/referencer.gd index 4468191..99b6eea 100644 --- a/scripts/globals/referencer.gd +++ b/scripts/globals/referencer.gd @@ -1,4 +1,4 @@ extends Node var main_camera: Camera3D -var player: Player +var players: Array[Player] diff --git a/scripts/main_camera.gd b/scripts/main_camera.gd index 68a6e1f..13534d5 100644 --- a/scripts/main_camera.gd +++ b/scripts/main_camera.gd @@ -17,22 +17,30 @@ func _ready() -> void: func _process(delta: float) -> void: - _follow(delta) + var follow_position: Vector3 = Vector3.ZERO + for player in Referencer.players: + follow_position += _follow(player, delta) + follow_position /= Referencer.players.size() + + global_rotation_degrees = _angle_degrees + global_position = ( + follow_position + Vector3.UP * _height_offset + transform.basis.z * _distance + ) -func _follow(delta: float) -> void: - var player_position := Referencer.player.global_position - if Referencer.player.is_on_floor(): +func _follow(player: Player, delta: float) -> Vector3: + var player_position := player.global_position + if player.is_on_floor(): _floor_height = player_position.y player_position.y = _floor_height + Projectile.HEIGHT if Inputer.mode == Inputer.Mode.KB_MOUSE: - _aim_offset = Referencer.player.aiming.aim_offset + _aim_offset = player.aiming.aim_offset else: var new_aim_offset := ( Vector3.ZERO - if Referencer.player.aiming.aim_input.length() == 0 - else Referencer.player.aiming.aim_offset + if player.aiming.aim_input.length() == 0 + else player.aiming.aim_offset ) _aim_offset = _aim_offset.lerp(new_aim_offset, _aim_damping * delta) @@ -48,9 +56,6 @@ func _follow(delta: float) -> void: ) ) - global_rotation_degrees = _angle_degrees - global_position = ( - follow_position + Vector3.UP * _height_offset + transform.basis.z * _distance - ) + Debugger.circle("follow_position" + str(player.index), follow_position) - Debugger.circle("follow_position", follow_position) + return follow_position diff --git a/scripts/player/player.gd b/scripts/player/player.gd index a770417..dbd01c2 100644 --- a/scripts/player/player.gd +++ b/scripts/player/player.gd @@ -15,7 +15,7 @@ var _debug_collision_shapes := DebugCollisionShapes.new() func _ready() -> void: _respawn_point = global_position - Referencer.player = self + Referencer.players.append(self) _debug_collision_shapes.init(get_children(), self, _collision_debug_material)