extends Node3D @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 = $Camera3D @onready var timer = $Timer @onready var level_control = get_tree().current_scene @onready var whiteout = $Whiteout const ENEMY_TAUNT = preload("res://assets/enemy_taunt.tscn") @onready var animation_player = $AnimationPlayer var focus_dist var target : Node var focus_target var respawn_position var respawn_rotation var respawn_fov const DEAD_CAM_FOV = 50.0 var respawn = false # Called when the node enters the scene tree for the first time. func _ready(): #set FOV camera.fov = respawn_fov level_control.player.ammo_counter.visible = false level_control.player.stamina_counter.visible = false #start timer timer.start() #highlight target if target != null: var taunt_spawn = ENEMY_TAUNT.instantiate() taunt_spawn.text = taunt_spawn.taunts.pick_random() target.add_child(taunt_spawn) taunt_spawn.global_transform.origin = target.position + Vector3(0,2,0) for i in target.outline_meshes: i.visible = true #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: focus_dist = camera.global_position.distance_to(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 if target == null: respawn = true # Move towards and look at target if respawn == false: #calculate move direction var target_pos_adjusted = Vector3(target.position.x -4,target.position.y + 4,target.position.z -4) position = lerp(position,target_pos_adjusted,delta * MOVE_SPEED) 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) elif respawn == true: position = lerp(position,respawn_position,delta * MOVE_SPEED) camera.global_transform.basis = lerp(camera.global_transform.basis,respawn_rotation,delta * CAMERA_LOOK_SPEED * 1.5) camera.fov = lerp(camera.fov, respawn_fov, delta * 10) if global_position.distance_to(respawn_position) <= .5: animation_player.play("whiteout") if Input.is_action_just_pressed("escape"): get_tree().quit() func _on_timer_timeout(): respawn = true func reload_level(): get_tree().reload_current_scene()