61 lines
2.0 KiB
GDScript
61 lines
2.0 KiB
GDScript
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)}
|