extends Node3D @export var player : Node @export var money = 250 @export var start_health = 3 @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")],["ammo"]] var stamina_drop = [[load("res://assets/stamina_pickup.tscn")],["stamina"]] var health_drop = [[load("res://assets/health_pickup.tscn")],["health"]] var money_drop = [[load("res://assets/money_pickup.tscn")],["money"]] var dead_player = preload("res://assets/dead_cam.tscn") const CLEARED_ANNOUNCE = preload("res://assets/cleared_announce.tscn") const DEAD_ANNOUNCE = preload("res://assets/dead_announce.tscn") var paused = false var health = start_health var pickups = [] var held_guns = [] var ammo_current = [0] var ammo_reserve = [0] var keys = [] var guns_dict = {} var current_gun_index var particle_number = 0 var enemy_hiveminds = [] var remaining_enemies var last_hit : Node var respawn_position var respawn_cam_rotation var respawn_rot var engine_time_scale_cache : float = 1.0 # Called when the node enters the scene tree for the first time. func _ready(): #global randomize function randomize() health = start_health respawn_position = player.camera.global_position respawn_cam_rotation = player.global_transform.basis #clear spawned in objects for node in get_tree().get_nodes_in_group("spawned"): node.queue_free() #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 money_drop_enabled == true: pickups.append(money_drop) if player: #Set up starting guns and ammo held_guns = [gun_1] var instance_gun = held_guns[0].instantiate() ammo_current[0] = instance_gun.max_ammo ammo_reserve[0] = instance_gun.max_ammo * instance_gun.start_mags if gun_2 != null: held_guns.append(gun_2) var instance_gun_2 = held_guns[1].instantiate() ammo_current.append(instance_gun_2.max_ammo) ammo_reserve.append(instance_gun_2.max_ammo * instance_gun_2.start_mags) # Spawn first gun current_gun_index = 0 gun_spawn(0) #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): #quit game and eventually go to menu if Input.is_action_just_pressed("escape"): pause_menu() func gun_spawn(index): #loop around if scrolling past available guns if index > held_guns.size() - 1: index = 0 elif index < 0: index = held_guns.size() - 1 current_gun_index = index var instance_gun = held_guns[index].instantiate() instance_gun.global_transform.origin = player.weapon_spawner.position player.gun = instance_gun player.def_weapon_holder_pos = player.weapon_holder.position player.ammo = player.gun.max_ammo player.ammo_reserve = player.gun.max_ammo * player.gun.start_mags #player.gun_fire_pitch_starting = player.gun.audio_fire.pitch_scale 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(): var clearedmsg = CLEARED_ANNOUNCE.instantiate() get_parent().add_child(clearedmsg) await get_tree().create_timer(1).timeout clearedmsg.queue_free() func die(): var deadmsg = DEAD_ANNOUNCE.instantiate() get_parent().add_child(deadmsg) var instance_dead = dead_player.instantiate() instance_dead.global_position = player.global_position instance_dead.transform.basis = player.global_transform.basis #instance_dead.camera.rotation = player.camera.rotation instance_dead.target = last_hit instance_dead.respawn_position = respawn_position instance_dead.respawn_rotation = respawn_cam_rotation instance_dead.respawn_fov = player.camera.fov get_tree().get_root().add_child(instance_dead) instance_dead.camera.current = true player.dead = true player.toggle_hud(true) player.gun.visible = false player.health_indicator.color = Color(0.471, 0, 0, 0) player.crosshair.visible = false func pickup_spawn(): var item_type = pickups.pick_random() var item_spawn = item_type[0][0].instantiate() #var item_name = item_type[1][0] item_spawn.rand_amt = randi_range(25,100) return item_spawn func pause_menu(): if paused: Engine.time_scale = engine_time_scale_cache Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) player.toggle_hud(true) player.pause_menu.hide() else: engine_time_scale_cache = Engine.time_scale Engine.time_scale = 0 Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) player.toggle_hud(false) player.pause_menu.show() paused = !paused func save_quit(): get_tree().quit()