Files
fps_project_1/scripts/dead_cam.gd
2025-04-29 11:02:12 -05:00

129 lines
4.4 KiB
GDScript

extends Node3D
const DEAD_CAM_FOV = 50.0
@export var MOVE_SPEED = 30
@export var CAMERA_LOOK_SPEED = 20
@export var FOV_CHANGE_SPEED = 40
@onready var look_ray = $LookRay
@onready var camera = $CameraRigid/Camera3D
@onready var camera_rigid: RigidBody3D = $CameraRigid
@onready var timer = $Timer
@onready var level_control = get_tree().current_scene
@onready var whiteout = $Whiteout
@onready var ENEMY_TAUNT = preload("res://assets/enemy_taunt.tscn")
@onready var dead_mask = preload("res://assets/dead_mask.tscn")
@onready var animation_player = $AnimationPlayer
@onready var cam_target: Node3D = $CamTarget
@onready var crown = preload("res://assets/crown.tscn")
var focus_dist
var target : Node
var target_type
var respawn_position
var respawn_rotation
var taunt_node
var respawn_fov
var respawn = false
var anim_step = 0
# Called when the node enters the scene tree for the first time.
func _ready():
Engine.time_scale = .05
AudioServer.set_bus_effect_enabled(0,0,true)
#set FOV
camera.fov = respawn_fov
#start timer
timer.start(.3)
#highlight target
if target != null:
var taunt_spawn = ENEMY_TAUNT.instantiate()
taunt_spawn.text = target.taunts.pick_random()
target.add_child(taunt_spawn)
taunt_spawn.global_transform.origin = target.global_position + Vector3(0,2,0)
taunt_node = taunt_spawn
for i in target.outline_meshes:
i.visible = true
## Get Distance from player to target in meters
#var distance_to_target = global_position.distance_to(target.global_position)
#var instance_dead_mask = dead_mask.instantiate()
##instance_dead_mask.scale *= Vector3(10,10,10)
#instance_dead_mask.transform.basis = transform.basis
#instance_dead_mask.global_position = global_position
#get_tree().current_scene.add_child(instance_dead_mask)
#set whiteout to size of screen
var viewportWidth = get_viewport().size.x
var viewportHeight = get_viewport().size.y
whiteout.size = Vector2(viewportWidth,viewportHeight)
whiteout.color = Color(1, 1, 1, 0)
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
if target == null:
anim_step = 3
camera_rigid.global_position = lerp(camera_rigid.global_position,cam_target.global_position, delta * 100)
match anim_step:
0:
#Show enemy that killed player
focus_on_target(target)
var target_pos_adjusted = Vector3(target.global_position.x -4,target.global_position.y + 4,target.global_position.z -4)
cam_target.global_position = lerp(cam_target.global_position,target_pos_adjusted,delta * MOVE_SPEED)
look_ray.global_position = target_pos_adjusted
look_ray.look_at(Vector3(target.global_position), Vector3.UP)
camera.rotation = lerp(camera.rotation,look_ray.rotation,delta * CAMERA_LOOK_SPEED)
camera.fov = lerp(camera.fov, 40.0, delta * 5)
1:
#aim at player from enemy
if target_type != 1:
focus_on_target(level_control.player)
Engine.time_scale = .05
AudioServer.set_bus_effect_enabled(0,0,true)
taunt_node.visible = false
var target_pos_adjusted = Vector3(target.global_position.x,target.global_position.y + 2.1,target.global_position.z)
cam_target.global_position = lerp(cam_target.global_position,target_pos_adjusted,delta * MOVE_SPEED)
look_ray.global_position = target.global_position
look_ray.look_at(Vector3(level_control.player.global_position), Vector3.UP)
camera.rotation = lerp(camera.rotation,look_ray.rotation,delta * CAMERA_LOOK_SPEED)
camera.fov = lerp(camera.fov, 100.0, delta * 75)
else:
_on_timer_timeout()
2:
var target_pos_adjusted = Vector3(target.global_position.x,target.global_position.y + 2.1,target.global_position.z)
cam_target.global_position = lerp(cam_target.global_position,target_pos_adjusted,delta * MOVE_SPEED)
look_ray.global_position = target.global_position
look_ray.look_at(Vector3(level_control.player.global_position), Vector3.UP)
camera.rotation = lerp(camera.rotation,look_ray.rotation,delta * CAMERA_LOOK_SPEED)
animation_player.play("whiteout")
3:
animation_player.play("whiteout")
func _on_timer_timeout():
anim_step += 1
func reload_level():
SaveLoad.save_persistent_data()
get_tree().reload_current_scene()
func focus_on_target(focus_target):
if target != null:
focus_dist = camera.global_position.distance_to(focus_target.global_position)
else:
focus_dist = 10.0
camera.attributes.dof_blur_far_distance = focus_dist + 8
camera.attributes.dof_blur_near_distance = focus_dist - 2