Added Health pickup, started pickup assignment through level control and added enemy counter

This commit is contained in:
derek
2024-08-05 13:37:35 -05:00
parent c8f3e8eee6
commit 3335ad0804
17 changed files with 883 additions and 44 deletions

View File

@@ -7,6 +7,20 @@ extends Node3D
@export var MAX_PARTICLES = 100
@export var gun_1 : Resource
@export var gun_2 : Resource
@export_group("Drops")
@export var ammo_drop_enabled = true
@export var stamina_drop_enabled = true
@export var health_drop_enabled = true
@export var money_drop_enabled = true
var ammo_drop = load("res://assets/ammo_pickup.tscn")
var stamina_drop = load("res://assets/stamina_pickup.tscn")
var health_drop = load("res://assets/health_pickup.tscn")
var money_drop = load("res://assets/money_pickup.tscn")
const CLEARED_ANNOUNCE = preload("res://assets/cleared_announce.tscn")
const DEAD_ANNOUNCE = preload("res://assets/dead_announce.tscn")
var pickups = []
var held_guns = []
var ammo_current = [0]
var ammo_reserve = [0]
@@ -14,12 +28,23 @@ var guns_dict = {}
var current_gun_index
var particle_number = 0
var enemy_hiveminds = []
var remaining_enemies
# Called when the node enters the scene tree for the first time.
func _ready():
#global randomize function
randomize()
#assign pickups to array
if ammo_drop_enabled == true:
pickups.append(ammo_drop)
if stamina_drop_enabled == true:
pickups.append(stamina_drop)
if health_drop_enabled == true:
pickups.append(health_drop)
if ammo_drop_enabled == true:
pickups.append(ammo_drop)
#Set up starting guns and ammo
held_guns = [gun_1]
var instance_gun = held_guns[0].instantiate()
@@ -39,12 +64,12 @@ func _ready():
#find enemy hiveminds
for node in get_tree().get_nodes_in_group("enemy_hivemind"):
enemy_hiveminds.append(node)
#count starting enemies
enemy_count()
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(_delta):
for hivemind in enemy_hiveminds:
remaining_enemies = hivemind.minions.size()
print("remaining enemies: " + str(remaining_enemies))
pass
func gun_spawn(index):
#loop around if scrolling past available guns
@@ -65,3 +90,33 @@ func gun_spawn(index):
instance_gun.gun_index = index
instance_gun.anim_player.play("swap_in")
player.weapon_holder.add_child(instance_gun)
func enemy_count():
var sum = 0
for i in enemy_hiveminds:
sum += i.minions.size()
print("enemies: " + str(sum))
if sum == 0:
cleared()
func cleared():
Engine.time_scale = .05
var clearedmsg = CLEARED_ANNOUNCE.instantiate()
get_parent().add_child(clearedmsg)
await get_tree().create_timer(.3).timeout
get_tree().reload_current_scene()
func die():
Engine.time_scale = .05
var deadmsg = DEAD_ANNOUNCE.instantiate()
get_parent().add_child(deadmsg)
await get_tree().create_timer(.3).timeout
get_tree().reload_current_scene()
#var instance_dead = dead_player.instantiate()
#instance_dead.position = head.global_position
#instance_dead.transform.basis = head.global_transform.basis
#get_tree().get_root().add_child(instance_dead)
func pickup_spawn():
pickups.pick_random()
print(pickups.pick_random())

View File

@@ -38,7 +38,7 @@ func _process(delta):
position += transform.basis * Vector3(0, 0, -bullet_speed) * delta
rotation.x = clamp(rotation.x - delta * bullet_drop,deg_to_rad(-90),deg_to_rad(90))
if ray.is_colliding():
if ray.is_colliding() and ray.get_collider != null:
if ray.get_collider().is_in_group("player"):
var player = ray.get_collider()
player.level_control.health -= bullet_damage

View File

@@ -39,7 +39,7 @@ var start_sensitivity
var gun : Node
@onready var gun_ray = $Head/Camera3D/GunRay
@onready var level_control = $".."
@onready var level_control = get_tree().current_scene
@onready var interact_ray = $Head/Camera3D/InteractRay
@onready var bullet_ray = $Head/Camera3D/BulletRay
var instance_bullet
@@ -222,7 +222,7 @@ func _physics_process(delta):
get_tree().quit()
if level_control.health <= 0:
die()
level_control.die()
move_and_slide()
weapon_tilt(input_dir.x, delta)
@@ -267,6 +267,12 @@ func _on_pick_up_detection_body_entered(body):
pickup_sound.pitch_scale = 1 + rng.randf_range(-.3,.3)
pickup_sound.play()
body.queue_free()
elif body.pickupType == "health":
level_control.health += 1
picked_up = true
pickup_sound.pitch_scale = 1 + rng.randf_range(-.3,.3)
pickup_sound.play()
body.queue_free()
elif body.pickupType == "jump":
pickupmsg = pickup_announce.instantiate()
pickupmsg.pickuptext = "jump"
@@ -326,13 +332,3 @@ func weapon_recoil(delta):
camera.rotation.x = clamp(lerp(camera.rotation.x,recoil_to, .05), deg_to_rad(-90), deg_to_rad(85))
func die():
Engine.time_scale = .05
var deadmsg = dead_announce.instantiate()
get_parent().add_child(deadmsg)
await get_tree().create_timer(.3).timeout
get_tree().reload_current_scene()
#var instance_dead = dead_player.instantiate()
#instance_dead.position = head.global_position
#instance_dead.transform.basis = head.global_transform.basis
#get_tree().get_root().add_child(instance_dead)

View File

@@ -17,6 +17,7 @@ const MAX_AV = 10
@export var bullet_damage = 1
@export var turret_look_speed = 6
@onready var level_control = get_tree().current_scene
@onready var nav_agent = $NavigationAgent3D
@onready var target = $body/target
@onready var movement_shape = $MovementShape
@@ -33,11 +34,12 @@ const MAX_AV = 10
@onready var turret = $TurretLook/Turret
@onready var turret_material = turret.mesh.surface_get_material(2)
@onready var turret_material = turret.get_surface_override_material(2)
@export var stamina : Resource
@export var ammo : Resource
@export var money : Resource
@export var health_pickup : Resource
@export var die_particles : Resource
@onready var turret_look = $TurretLook
@@ -90,7 +92,7 @@ func _on_area_3d_body_part_hit(dam,bullet_damage):
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
@@ -98,7 +100,8 @@ func _on_area_3d_body_part_hit(dam,bullet_damage):
#pickup drop
while number_of_drops > 0:
var rand_selector = int(round(rng.randf_range(1,3)))
level_control.pickup_spawn()
var rand_selector = rng.randi_range(1,4)
var lv_x = rng.randf_range(-MAX_LV,MAX_LV)
var lv_y = rng.randf_range(0,MAX_LV)
var lv_z = rng.randf_range(-MAX_LV,MAX_LV)
@@ -113,6 +116,8 @@ func _on_area_3d_body_part_hit(dam,bullet_damage):
rand_select = ammo
3:
rand_select = money
4:
rand_select = health_pickup
# Random Item Drop
rand_item = rand_select.instantiate()
rand_item.position = self.global_position
@@ -165,9 +170,9 @@ func _on_prefire_timer_timeout():
func _on_postfire_timer_timeout():
if turret_look_next.is_colliding() and turret_look_next.get_collider().is_in_group("player"):
prefire_timer.start()
turret_material.emission_enabled = true
else:
postfire_timer.start()
turret_material.emission_enabled = true
func _on_knocked_timer_timeout():