ammo consistent between states, enemy will reload automatically if low but not depleted

This commit is contained in:
derek
2025-04-25 14:25:16 -05:00
parent 56ecad377e
commit f0ec7bc953
5 changed files with 38 additions and 11 deletions

View File

@@ -7,17 +7,16 @@ var heartbeat : float = 3.0
@export var between_shot_time : Vector2 = Vector2(.5,2.0)
@export var reload_time : float = 7.0
@export var alarm_sound : AudioStreamPlayer3D
@export var time_before_losing_visual : float = 2.0
@export var time_before_losing_visual : float = 1.0
var ammo
var initial_timer
var shot_timer = 0.0
var visibility_timer
func Enter():
super()
visibility_timer = time_before_losing_visual
update_waypoint()
ammo = enemy.max_ammo
enemy.turret_material.emission_enabled = true
initial_timer = initial_wait_time
alarm_sound.play()
@@ -25,12 +24,21 @@ func Enter():
func update_waypoint():
enemy.nav_agent.set_target_position(enemy.character_follow.global_position)
func current_target():
if enemy.is_player_visible():
return enemy.character_follow.global_position
else:
return enemy.point_of_interest
func Update(delta):
if !enemy.is_player_visible():
if visibility_timer > 0:
visibility_timer -= delta
else:
Transitioned.emit(self,"search")
if enemy.ammo <= 4:
Transitioned.emit(self,"reload")
else:
Transitioned.emit(self,"search")
else:
visibility_timer = time_before_losing_visual
@@ -43,7 +51,7 @@ func Update(delta):
initial_timer -= delta
else:
#fire if player in view
if ammo > 0:
if enemy.ammo > 0:
if shot_timer > 0:
shot_timer -= delta
else:
@@ -78,7 +86,7 @@ func attack():
enemy.turret_material.emission_enabled = false
func fire(barrel):
ammo -= 1
enemy.ammo -= 1
var instance_bullet = enemy.bullet.instantiate()
instance_bullet.position = barrel.global_position
instance_bullet.transform.basis = barrel.global_transform.basis

View File

@@ -17,6 +17,7 @@ func Enter():
func Exit():
super()
enemy.ammo = enemy.max_ammo
enemy.servo_single.play()
func update_waypoint():

View File

@@ -75,7 +75,7 @@ var can_die : bool = false
var knocked = false
var stunned = false
var health
var ammo
var point_of_interest
var character_follow
@@ -83,6 +83,7 @@ var player_last_seen
func _ready():
health = start_health
ammo = max_ammo
player = level_control.player
#health_bar_sprite.visible = false
turret_material.emission_enabled = false
@@ -130,6 +131,17 @@ func is_player_visible():
return false
func is_player_in_area():
if visibility_areas != null:
for area in visibility_areas:
var bodies = area.get_overlapping_bodies()
if bodies != null:
for i in bodies:
if i is Player:
return true
return false
func cache_player_pos():
if line_of_sight_ray.is_colliding():
if line_of_sight_ray.get_collider() is Player: