Enemy Hivemind became Room Manager, will probably pull out the actual enemy script at some point

This commit is contained in:
derek
2024-11-07 11:21:21 -06:00
parent fa054ad3ed
commit 168963163a
25 changed files with 283 additions and 121 deletions

View File

@@ -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