diff options
Diffstat (limited to 'game_camera.gd')
| -rw-r--r-- | game_camera.gd | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/game_camera.gd b/game_camera.gd index a92f23c..9545edd 100644 --- a/game_camera.gd +++ b/game_camera.gd @@ -3,18 +3,34 @@ extends Camera2D ## Amount to smoothly offset the camera if the parent is a Player. @export var offset_amt: Vector2 +@onready var tree: SceneTree = get_tree() + func _ready() -> void: if not position_smoothing_enabled: await get_tree().create_timer(0.1).timeout position_smoothing_enabled = true func _process(_delta: float) -> void: - var parent = get_parent() - if parent is Player: - var player: Player = parent - position.x = player.get_facing() * offset_amt.x + var pos: Vector2 = Vector2.ZERO + var n = 0 + + var targets = tree.get_nodes_in_group("camera_target") + if targets.size() == 0: return - if not player.is_on_floor(): - position.y = offset_amt.y + for target in targets: + if target is Player: + var player: Player = target + var oy: float = 0 + if not player.is_on_floor(): + oy = offset_amt.y + pos += Vector2(player.global_position.x + player.get_facing() * offset_amt.x, + player.global_position.y + oy) + elif target is Node2D: + var node2d: Node2D = target + pos += node2d.global_position else: - position.y = 0 + assert(false, "camera_target node is invalid") + + n += 1 + + global_position = pos / n |
