Files
fps_project_1/scripts/enemy_die.gd

61 lines
2.0 KiB
GDScript

extends EnemyState
const MAX_LV = 10
const MAX_AV = 10
func Enter():
drop_loot()
func die():
#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")
enemy.queue_free()
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
die()
func random_av_lv():
var lv_x = randf_range(-MAX_LV,MAX_LV)
var lv_y = randf_range(-MAX_LV,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)}