add basic camera
This commit is contained in:
parent
a31f403424
commit
e1a3ca9c59
4 changed files with 43 additions and 1 deletions
31
scenes/level_camera/level_camera_2d.gd
Normal file
31
scenes/level_camera/level_camera_2d.gd
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
extends Camera2D
|
||||
|
||||
enum FollowTarget { BALL, PLAYER1, PLAYER2 }
|
||||
|
||||
@export_range(0, 1, 0.01) var ball_weight: float = 0.6
|
||||
@export_range(0, 1, 0.01) var player_weight: float = 0.2
|
||||
@export var follow_speed: float = 8.0
|
||||
@export var deadzone_margin: float = 100.0
|
||||
|
||||
@onready var ball: RigidBody2D = get_node("../Ball")
|
||||
@onready var player1: CharacterBody2D = get_node("../Player1")
|
||||
@onready var player2: CharacterBody2D = get_node("../Player2")
|
||||
|
||||
var target_pos: Vector2 = Vector2.ZERO
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
var total_weight: float = ball_weight + player_weight * 2.0
|
||||
target_pos = (
|
||||
ball.global_position * ball_weight +
|
||||
player1.global_position * player_weight +
|
||||
player2.global_position * player_weight
|
||||
) / total_weight
|
||||
|
||||
global_position = global_position.lerp(target_pos, follow_speed * delta)
|
||||
|
||||
var spread: float = maxf(
|
||||
absf(player1.global_position.x - player2.global_position.x),
|
||||
absf(player1.global_position.y - player2.global_position.y)
|
||||
)
|
||||
var target_zoom: Vector2 = Vector2.ONE * (600.0 / spread)
|
||||
zoom = target_zoom.limit_length(1.5)
|
||||
1
scenes/level_camera/level_camera_2d.gd.uid
Normal file
1
scenes/level_camera/level_camera_2d.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://bsvjinfmr1pek
|
||||
6
scenes/level_camera/level_camera_2d.tscn
Normal file
6
scenes/level_camera/level_camera_2d.tscn
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
[gd_scene load_steps=2 format=3 uid="uid://7nljh05o8b8e"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bsvjinfmr1pek" path="res://scenes/level_camera/level_camera_2d.gd" id="1_rls2d"]
|
||||
|
||||
[node name="LevelCamera2D" type="Camera2D"]
|
||||
script = ExtResource("1_rls2d")
|
||||
|
|
@ -1,8 +1,9 @@
|
|||
[gd_scene load_steps=4 format=4 uid="uid://d3c6aioatcy20"]
|
||||
[gd_scene load_steps=5 format=4 uid="uid://d3c6aioatcy20"]
|
||||
|
||||
[ext_resource type="TileSet" uid="uid://doja61ouvb77l" path="res://resources/tilesets/level.tres" id="1_uu6xs"]
|
||||
[ext_resource type="PackedScene" uid="uid://642nm6c4mpxx" path="res://scenes/player/player.tscn" id="2_r0du0"]
|
||||
[ext_resource type="PackedScene" uid="uid://cmgwv41ht3q4j" path="res://scenes/ball/ball.tscn" id="3_r0du0"]
|
||||
[ext_resource type="PackedScene" uid="uid://7nljh05o8b8e" path="res://scenes/level_camera/level_camera_2d.tscn" id="4_jyhfs"]
|
||||
|
||||
[node name="Main" type="Node"]
|
||||
|
||||
|
|
@ -26,3 +27,6 @@ id = 2
|
|||
|
||||
[node name="Ball" parent="." instance=ExtResource("3_r0du0")]
|
||||
position = Vector2(162, 115)
|
||||
|
||||
[node name="LevelCamera2D" parent="." instance=ExtResource("4_jyhfs")]
|
||||
ball_weight = 0.4
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue