Added Health pickup, started pickup assignment through level control and added enemy counter
This commit is contained in:
@@ -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())
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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():
|
||||
|
||||
Reference in New Issue
Block a user