extends CharacterBody3D var player = null @export var health = 3 @export var number_of_drops = 3 const SPEED = 3.0 const MAX_LV = 10 const MAX_AV = 10 @export var player_path : NodePath @onready var nav_agent = $NavigationAgent3D @onready var target = $body/target @onready var movement_shape = $MovementShape var stamina = load("res://assets/stamina_pickup.tscn") var ammo = load("res://assets/ammo_pickup.tscn") var jump = load("res://assets/jump_pickup.tscn") var die_particles = load("res://assets/die_particles.tscn") var particlespawn var rng = RandomNumberGenerator.new() var rand_select var rand_item func _ready(): player = get_node(player_path) func _process(delta): velocity = Vector3.ZERO # Navigation nav_agent.set_target_position(player.global_transform.origin) var next_nav_point = nav_agent.get_next_path_position() velocity = (next_nav_point - global_transform.origin).normalized() * SPEED look_at(Vector3(player.global_position.x, global_position.y, player.global_position.z), Vector3.UP) move_and_slide() func _on_area_3d_body_part_hit(dam): health -= dam print("health: " + str(health)) if health <= 0: particlespawn = die_particles.instantiate() particlespawn.position = self.global_position particlespawn.transform.basis = self.global_transform.basis get_parent().add_child(particlespawn) #pickup drop while number_of_drops > 0: var rand_selector = int(round(rng.randf_range(1,2))) var lv_x = rng.randf_range(-MAX_LV,MAX_LV) var lv_y = rng.randf_range(0,MAX_LV) var lv_z = rng.randf_range(-MAX_LV,MAX_LV) var av_x = rng.randf_range(-MAX_AV,MAX_AV) var av_y = rng.randf_range(-MAX_AV,MAX_AV) var av_z = rng.randf_range(-MAX_AV,MAX_AV) match rand_selector: 1: rand_select = stamina 2: rand_select = ammo 3: rand_select = jump # Random Item Drop rand_item = rand_select.instantiate() rand_item.position = self.global_position rand_item.transform.basis = self.global_transform.basis rand_item.linear_velocity += self.global_transform.basis * Vector3(lv_x,lv_y,lv_z) rand_item.angular_velocity += self.global_transform.basis * Vector3(av_x,av_y,av_z) get_parent().add_child(rand_item) number_of_drops -= 1 queue_free()