extends EnemyState class_name EnemyAttack var heartbeat : float = 3.0 @export var between_shot_time : Vector2 = Vector2(.5,2.0) @export var reload_time : float = 7.0 @onready var player = get_tree().current_scene.player var ammo var shot_timer = 0.0 func Enter(): super() update_waypoint() ammo = enemy.max_ammo func update_waypoint(): enemy.nav_agent.set_target_position(player.global_position) func Update(delta): if heartbeat > 0: heartbeat -= delta else: update_waypoint() #fire if player in view if ammo > 0: if shot_timer > 0: shot_timer -= delta else: if enemy.turret_look_next.is_colliding() and enemy.turret_look_next.get_collider().is_in_group("player"): shot_timer = randf_range(between_shot_time.x,between_shot_time.y) ammo -= 2 enemy.turret_material.emission_enabled = true await get_tree().create_timer(.1).timeout attack() else: await get_tree().create_timer(.5).timeout Transitioned.emit(self,"reload") func Physics_Update(delta): enemy.turret_look_next.look_at(player.global_position) enemy.turret_look.rotation = lerp(enemy.turret_look.rotation,enemy.turret_look_next.rotation,delta * enemy.turret_look_speed) var destination = enemy.nav_agent.get_next_path_position() var local_destination = destination - enemy.global_position var direction = local_destination.normalized() if enemy.global_position.distance_to(local_destination) > 1: enemy.velocity = direction * move_speed enemy.spider_look_next.look_at(destination) var look_target = enemy.spider_look_next.global_rotation.y enemy.global_rotation.y = lerp(enemy.global_rotation.y,look_target,delta * 3) func attack(): fire(enemy.barrel_1) enemy.smoke.emitting = true await get_tree().create_timer(.1).timeout # makes it too hard lol fire(enemy.barrel_2) enemy.smoke_2.emitting = true enemy.turret_material.emission_enabled = false func reload(): await get_tree().create_timer(reload_time).timeout ammo = enemy.max_ammo func fire(barrel): var instance_bullet = enemy.bullet.instantiate() instance_bullet.position = barrel.global_position instance_bullet.transform.basis = barrel.global_transform.basis instance_bullet.bullet_speed = enemy.bullet_speed instance_bullet.bullet_drop = enemy.bullet_drop instance_bullet.random_spread_amt = enemy.random_spread_amt instance_bullet.bullet_damage = enemy.bullet_damage instance_bullet.fired_by = enemy instance_bullet.target_type = enemy.enemy_type get_tree().get_root().add_child(instance_bullet) enemy.audio_fire.play() spawn_casing() func spawn_casing(): var instance_casing = enemy.casing.instantiate() instance_casing.position = enemy.casing_ejector.global_position instance_casing.transform.basis = enemy.casing_ejector.global_transform.basis instance_casing.player_velocity = enemy.velocity * enemy.transform.basis get_tree().get_root().add_child(instance_casing)