ammo consistent between states, enemy will reload automatically if low but not depleted
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -17,6 +17,7 @@ func Enter():
|
||||
|
||||
func Exit():
|
||||
super()
|
||||
enemy.ammo = enemy.max_ammo
|
||||
enemy.servo_single.play()
|
||||
|
||||
func update_waypoint():
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user