added enemy state machine with idle, stunned, and dead states
This commit is contained in:
60
scripts/enemy_die.gd
Normal file
60
scripts/enemy_die.gd
Normal file
@@ -0,0 +1,60 @@
|
||||
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)}
|
||||
Reference in New Issue
Block a user