extends EnemyState const MAX_LV = 10 const MAX_AV = 10 func Enter(): die() func die(): drop_loot() #remove from parent array var particlespawn = enemy.die_particles.instantiate() particlespawn.position = enemy.global_position particlespawn.transform.basis = enemy.global_transform.basis for particle in particlespawn.get_children(): if particle is RigidBody3D: particle.linear_velocity += random_av_lv()["linear_velocity"] particle.angular_velocity += random_av_lv()["angular_velocity"] get_tree().get_root().add_child(particlespawn) if GameGlobals.last_hit_path == str(get_path()): GameGlobals.last_hit_path = null SignalBus.emit_signal("enemy_killed") func drop_loot(): var number_of_drops = enemy.loot_amount #pickup drop while number_of_drops > 0: var pickup_spawn = enemy.level_control.ITEM_PICKUP.instantiate() var item_stats = enemy.level_control.pickup_spawn(false) ##SET VARIABLES pickup_spawn.pickup_type = item_stats["pickup_type"] pickup_spawn.ammo_type = item_stats["ammo_type"] pickup_spawn.value = item_stats["value"] # Random Item Drop pickup_spawn.position = enemy.global_position + Vector3(0,2,0) #added height to spawn location since origin is on the ground pickup_spawn.transform.basis = enemy.global_transform.basis pickup_spawn.linear_velocity += enemy.global_transform.basis * random_av_lv()["linear_velocity"] pickup_spawn.angular_velocity += enemy.global_transform.basis * random_av_lv()["angular_velocity"] await get_tree().create_timer(.05).timeout get_tree().get_root().add_child(pickup_spawn) number_of_drops -= 1 await number_of_drops <= 0 enemy.queue_free() func random_av_lv(): var lv_x = randf_range(-MAX_LV,MAX_LV) var lv_y = randf_range(0,MAX_LV) var lv_z = randf_range(-MAX_LV,MAX_LV) var av_x = randf_range(-MAX_AV,MAX_AV) var av_y = randf_range(-MAX_AV,MAX_AV) var av_z = randf_range(-MAX_AV,MAX_AV) return {"linear_velocity":Vector3(lv_x,lv_y,lv_z),"angular_velocity":Vector3(av_x,av_y,av_z)}