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