83 lines
2.2 KiB
GDScript
83 lines
2.2 KiB
GDScript
extends Node
|
|
class_name Modifier
|
|
|
|
@export var time_to_kill : float = 30.0
|
|
@export var percent_of_targets : float = 1.0
|
|
|
|
@onready var level_node: Node3D = $"../../Level"
|
|
@onready var scene_parent: Node3D = $"../.."
|
|
@onready var marker = preload("res://enemyTargetMarker.tscn")
|
|
@onready var level_control = get_tree().current_scene
|
|
|
|
var target_enemy
|
|
var total_targets
|
|
var active = false
|
|
var timer
|
|
var ui_marker
|
|
|
|
func _ready() -> void:
|
|
await level_node.all_enemies_spawned
|
|
SignalBus.connect("enemy_killed",check_killed_target)
|
|
SignalBus.connect("player_left_tube",begin_activity)
|
|
timer = time_to_kill
|
|
scene_parent.tube_top.switch.active = false
|
|
scene_parent.tube_top.switch.label.text = str("Kill all vip \n targets to exit")
|
|
|
|
func begin_activity():
|
|
select_random_enemy()
|
|
|
|
func _process(delta: float) -> void:
|
|
if active:
|
|
if target_enemy != null:
|
|
update_minimap()
|
|
if timer > 0:
|
|
timer -= delta * Engine.time_scale
|
|
update_timer("kill target")
|
|
else:
|
|
level_control.last_hit = target_enemy
|
|
level_control.die()
|
|
active = false
|
|
else:
|
|
select_random_enemy()
|
|
|
|
func update_minimap():
|
|
SignalBus.emit_signal("ui_minimap_point",self,ui_marker.global_position,3,5.0,ColorSwatch.GREEN_COLOR)
|
|
|
|
func update_timer(label):
|
|
var rounded_timer = str(timer).pad_decimals(2)
|
|
SignalBus.emit_signal("ui_timer_update",label,rounded_timer)
|
|
|
|
func check_killed_target(enemy):
|
|
if enemy == target_enemy:
|
|
timer = time_to_kill
|
|
target_enemy = null
|
|
print("TARGET ENEMY : ",target_enemy)
|
|
select_random_enemy()
|
|
|
|
func add_marker_to_enemy():
|
|
if target_enemy != null:
|
|
var instance_marker = marker.instantiate()
|
|
target_enemy.add_child(instance_marker)
|
|
instance_marker.global_position = target_enemy.global_position + Vector3(0,3,0)
|
|
ui_marker = instance_marker
|
|
|
|
func select_random_enemy():
|
|
var level_stuff = level_node.get_children()
|
|
var enemies = []
|
|
for node in level_stuff:
|
|
print(node)
|
|
if node is Enemy:
|
|
enemies.append(node)
|
|
|
|
if enemies.size() > 0:
|
|
target_enemy = enemies.pick_random()
|
|
add_marker_to_enemy()
|
|
active = true
|
|
print("TARGET ENEMY : ",target_enemy.name)
|
|
else:
|
|
activity_completed()
|
|
SignalBus.emit_signal("ui_timer_visibility",false)
|
|
|
|
func activity_completed():
|
|
scene_parent.tube_top.switch.active = true
|