Add camera system
This commit is contained in:
1 parent
a5567a8132
commit
1030891b8d
8 files changed
+237
-12
No files matched your search
+1
-1
@@ -10,7 +10,7 @@ var item_in_hand
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
pass # Replace with function body.
|
||||
$hitbox.set_meta("owner", self)
|
||||
|
||||
func _physics_process(delta):
|
||||
var input = Vector3(Input.get_axis("left", "right"), 0.0, Input.get_axis("up", "down"))
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
extends Spatial
|
||||
signal player_entered(player, camera)
|
||||
signal player_exited(player, camera)
|
||||
|
||||
func _on_hitbox_area_entered(area):
|
||||
var owner = area
|
||||
if area.has_meta("owner"):
|
||||
owner = area.get_meta("owner")
|
||||
if owner.is_in_group("player"):
|
||||
emit_signal("player_entered", owner, $camera)
|
||||
|
||||
|
||||
func _on_hitbox_area_exited(area):
|
||||
var owner = area
|
||||
if area.has_meta("owner"):
|
||||
owner = area.get_meta("owner")
|
||||
if owner.is_in_group("player"):
|
||||
emit_signal("player_exited", owner, $camera)
|
||||
@@ -0,0 +1,31 @@
|
||||
extends Spatial
|
||||
|
||||
export var target: NodePath
|
||||
onready var target_node: Spatial = get_node(target)
|
||||
export var camera_lerp := 1.0
|
||||
|
||||
var tracking_cameras = []
|
||||
onready var prev_camera: Camera = $camera_room_center/camera
|
||||
onready var current_camera: Camera = $camera_room_center/camera setget set_current_camera
|
||||
|
||||
func set_current_camera(new_value: Camera):
|
||||
prev_camera = current_camera
|
||||
current_camera = new_value
|
||||
camera_lerp = 0.0
|
||||
$AnimationPlayer.play("switch_camera")
|
||||
|
||||
func _on_camera_room_player_entered(player, camera):
|
||||
assert(tracking_cameras.find(camera) == -1)
|
||||
tracking_cameras.append(camera)
|
||||
if tracking_cameras.size() == 1:
|
||||
self.current_camera = tracking_cameras.back()
|
||||
|
||||
func _on_camera_room_player_exited(player, camera):
|
||||
tracking_cameras.erase(camera)
|
||||
assert(tracking_cameras.find(camera) == -1)
|
||||
if tracking_cameras.size() == 1:
|
||||
self.current_camera = tracking_cameras.back()
|
||||
|
||||
func _physics_process(delta):
|
||||
$main_camera.global_transform.basis = Basis(prev_camera.global_transform.basis.get_rotation_quat().slerp(current_camera.global_transform.basis.get_rotation_quat(), camera_lerp))
|
||||
$main_camera.global_transform.origin = lerp(prev_camera.global_transform.origin, current_camera.global_transform.origin, camera_lerp)
|
||||
@@ -1,7 +1,7 @@
|
||||
extends Camera
|
||||
extends Spatial
|
||||
|
||||
export var target: NodePath
|
||||
onready var target_node: Spatial = get_node(target)
|
||||
|
||||
func _process(delta):
|
||||
func _physics_process(delta):
|
||||
global_transform = global_transform.looking_at(target_node.global_transform.origin, Vector3.UP)
|
||||
Reference in new issue
Block a user