95 lines
2.7 KiB
GDScript
95 lines
2.7 KiB
GDScript
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)
|
|
|
|
|
|
#taunt_spawn.position = target.global_position + Vector3(0,4,0)
|
|
#target.add_child(taunt_spawn)
|
|
|
|
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()
|