extends EnemyState class_name EnemyAttack @export var initial_wait_time : float = 1.0 @export var time_to_lose_target : float = 4.0 @export var between_shot_time : Vector2 = Vector2(.5,2.0) @export var alert_sound : AudioStreamPlayer3D var initial_timer var lost_target_timer var shot_timer = 0.0 func Enter(): initial_timer = initial_wait_time lost_target_timer = time_to_lose_target alert_sound.play() clear_points_of_interest() func Physics_Update(delta): update_minimap(0,2.0,ColorSwatch.RED_COLOR) if character.is_player_visible(): #reset lost target timer lost_target_timer = time_to_lose_target #get player location character.cache_player_pos() #set player location as target update_player_target() #move and look at location move_to_nav_point(delta) turret_look3D(delta) #Initial wait time if initial_timer > 0: initial_timer -= delta else: #fire if player in view if character.ammo > 0: attack_sequence(delta) else: await get_tree().create_timer(.5).timeout Transitioned.emit(self,"reload") else: if lost_target_timer > 0: lost_target_timer -= delta #move and look at location move_to_nav_point(delta) turret_look3D(delta) else: Transitioned.emit(self,"search") func attack_sequence(delta): if shot_timer > 0: shot_timer -= delta else: shot_timer = randf_range(between_shot_time.x,between_shot_time.y) character.turret_material.emission_enabled = true await get_tree().create_timer(.1).timeout attack() func update_player_target(): move_target = character.player_last_seen look_target = character.player_last_seen + Vector3(0,.75,0) character.nav_agent.set_target_position(move_target) func attack(): fire(character.barrel_1) character.smoke.emitting = true await get_tree().create_timer(.1).timeout fire(character.barrel_2) character.smoke_2.emitting = true character.turret_material.emission_enabled = false func fire(barrel): character.ammo -= 1 SignalBus.emit_signal("engaging_target",character,character.player_last_seen) var instance_bullet = character.bullet.instantiate() instance_bullet.position = barrel.global_position instance_bullet.transform.basis = barrel.global_transform.basis instance_bullet.bullet_speed = character.bullet_speed instance_bullet.bullet_drop = character.bullet_drop instance_bullet.random_spread_amt = character.random_spread_amt instance_bullet.bullet_damage = character.bullet_damage instance_bullet.fired_by = character instance_bullet.target_type = character.enemy_type get_tree().get_root().add_child(instance_bullet) character.audio_fire.play() #spawn_casing() DISABLING TO SEE IF THIS IS JUMPING UP FRAME TIME func spawn_casing(): var instance_casing = character.casing.instantiate() instance_casing.position = character.casing_ejector.global_position instance_casing.transform.basis = character.casing_ejector.global_transform.basis instance_casing.player_velocity = character.velocity * character.transform.basis get_tree().get_root().add_child(instance_casing)