Enemy Hivemind became Room Manager, will probably pull out the actual enemy script at some point
This commit is contained in:
@@ -1,13 +1,17 @@
|
||||
extends CharacterBody3D
|
||||
|
||||
var player
|
||||
@export var health = 3
|
||||
@export var number_of_drops = 3
|
||||
signal last_enemy_dead()
|
||||
|
||||
var player
|
||||
var loot_amount = 0
|
||||
var last_enemy : bool = false
|
||||
|
||||
@export var health = 3
|
||||
@export var SPEED = 3.0
|
||||
const MAX_LV = 20
|
||||
const MAX_AV = 10
|
||||
|
||||
@export_enum("Enemy", "Trap") var enemy_type: int
|
||||
@export var player_path : NodePath
|
||||
@export var bullet : Resource
|
||||
@export var casing : Resource
|
||||
@@ -53,7 +57,6 @@ $body/bodyoutline]
|
||||
|
||||
var gravity = 9.8
|
||||
var particlespawn
|
||||
var rng = RandomNumberGenerator.new()
|
||||
var rand_select
|
||||
var rand_item
|
||||
var body_look_to
|
||||
@@ -70,7 +73,7 @@ func _ready():
|
||||
turret_material.emission_enabled = false
|
||||
|
||||
#randomly start the postfire timer so enemy turrets aren't synced
|
||||
var random_time = rng.randf_range(0,5)
|
||||
var random_time = randf_range(0,5)
|
||||
await get_tree().create_timer(random_time).timeout
|
||||
postfire_timer.start()
|
||||
|
||||
@@ -107,33 +110,7 @@ func _on_area_3d_body_part_hit(dam,bullet_damage):
|
||||
health -= dam * bullet_damage
|
||||
print("health: " + str(health))
|
||||
if health <= 0:
|
||||
#remove from parent array
|
||||
get_parent().minions.erase(self)
|
||||
level_control.enemy_count()
|
||||
particlespawn = die_particles.instantiate()
|
||||
particlespawn.position = self.global_position
|
||||
particlespawn.transform.basis = self.global_transform.basis
|
||||
get_tree().get_root().add_child(particlespawn)
|
||||
|
||||
#pickup drop
|
||||
while number_of_drops > 0:
|
||||
var rand_item = level_control.pickup_spawn()
|
||||
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)
|
||||
|
||||
# Random Item Drop
|
||||
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_tree().get_root().add_child(rand_item)
|
||||
number_of_drops -= 1
|
||||
|
||||
queue_free()
|
||||
die()
|
||||
|
||||
|
||||
func _on_prefire_timer_timeout():
|
||||
@@ -169,12 +146,13 @@ func _on_stunned_timer_timeout():
|
||||
func fire(barrel):
|
||||
var instance_bullet = bullet.instantiate()
|
||||
instance_bullet.position = barrel.global_position
|
||||
instance_bullet.transform.basis = barrel_1.global_transform.basis
|
||||
instance_bullet.transform.basis = barrel.global_transform.basis
|
||||
instance_bullet.bullet_speed = bullet_speed
|
||||
instance_bullet.bullet_drop = bullet_drop
|
||||
instance_bullet.random_spread_amt = random_spread_amt
|
||||
instance_bullet.bullet_damage = bullet_damage
|
||||
instance_bullet.fired_by = self
|
||||
instance_bullet.target_type = enemy_type
|
||||
get_tree().get_root().add_child(instance_bullet)
|
||||
audio_fire.play()
|
||||
spawn_casing()
|
||||
@@ -184,3 +162,38 @@ func spawn_casing():
|
||||
instance_casing.position = casing_ejector.global_position
|
||||
instance_casing.transform.basis = casing_ejector.global_transform.basis
|
||||
instance_casing.player_velocity = velocity * transform.basis
|
||||
|
||||
func die():
|
||||
#remove from parent array
|
||||
get_parent().enemies.erase(self)
|
||||
level_control.enemy_count()
|
||||
particlespawn = die_particles.instantiate()
|
||||
particlespawn.position = self.global_position
|
||||
particlespawn.transform.basis = self.global_transform.basis
|
||||
get_tree().get_root().add_child(particlespawn)
|
||||
|
||||
drop_loot(loot_amount)
|
||||
|
||||
if last_enemy:
|
||||
emit_signal("last_enemy_dead")
|
||||
|
||||
queue_free()
|
||||
|
||||
func drop_loot(number_of_drops):
|
||||
#pickup drop
|
||||
while number_of_drops > 0:
|
||||
var rand_item = level_control.pickup_spawn()
|
||||
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)
|
||||
|
||||
# Random Item Drop
|
||||
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_tree().get_root().add_child(rand_item)
|
||||
number_of_drops -= 1
|
||||
|
||||
Reference in New Issue
Block a user