more AI work
This commit is contained in:
BIN
assets/Audio/Enemy SFX/alarm Mixdown 1.mp3
Normal file
BIN
assets/Audio/Enemy SFX/alarm Mixdown 1.mp3
Normal file
Binary file not shown.
19
assets/Audio/Enemy SFX/alarm Mixdown 1.mp3.import
Normal file
19
assets/Audio/Enemy SFX/alarm Mixdown 1.mp3.import
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="mp3"
|
||||||
|
type="AudioStreamMP3"
|
||||||
|
uid="uid://chl8fl1ywr0bd"
|
||||||
|
path="res://.godot/imported/alarm Mixdown 1.mp3-bf454c731c69ae79d784c786c945fab8.mp3str"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/Audio/Enemy SFX/alarm Mixdown 1.mp3"
|
||||||
|
dest_files=["res://.godot/imported/alarm Mixdown 1.mp3-bf454c731c69ae79d784c786c945fab8.mp3str"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
loop=false
|
||||||
|
loop_offset=0
|
||||||
|
bpm=0
|
||||||
|
beat_count=0
|
||||||
|
bar_beats=4
|
||||||
BIN
assets/Audio/Enemy SFX/alarm Mixdown 5.mp3
Normal file
BIN
assets/Audio/Enemy SFX/alarm Mixdown 5.mp3
Normal file
Binary file not shown.
19
assets/Audio/Enemy SFX/alarm Mixdown 5.mp3.import
Normal file
19
assets/Audio/Enemy SFX/alarm Mixdown 5.mp3.import
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="mp3"
|
||||||
|
type="AudioStreamMP3"
|
||||||
|
uid="uid://b2vhaokheg264"
|
||||||
|
path="res://.godot/imported/alarm Mixdown 5.mp3-13dd84b6e2f3416bc4b272542c5daca4.mp3str"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/Audio/Enemy SFX/alarm Mixdown 5.mp3"
|
||||||
|
dest_files=["res://.godot/imported/alarm Mixdown 5.mp3-13dd84b6e2f3416bc4b272542c5daca4.mp3str"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
loop=false
|
||||||
|
loop_offset=0
|
||||||
|
bpm=0
|
||||||
|
beat_count=0
|
||||||
|
bar_beats=4
|
||||||
BIN
assets/Audio/Enemy SFX/alarm Mixdown 6.mp3
Normal file
BIN
assets/Audio/Enemy SFX/alarm Mixdown 6.mp3
Normal file
Binary file not shown.
19
assets/Audio/Enemy SFX/alarm Mixdown 6.mp3.import
Normal file
19
assets/Audio/Enemy SFX/alarm Mixdown 6.mp3.import
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="mp3"
|
||||||
|
type="AudioStreamMP3"
|
||||||
|
uid="uid://dm2dmk23oxf5e"
|
||||||
|
path="res://.godot/imported/alarm Mixdown 6.mp3-ec9c1f82b9a3dd83f9647806821d21a3.mp3str"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/Audio/Enemy SFX/alarm Mixdown 6.mp3"
|
||||||
|
dest_files=["res://.godot/imported/alarm Mixdown 6.mp3-ec9c1f82b9a3dd83f9647806821d21a3.mp3str"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
loop=false
|
||||||
|
loop_offset=0
|
||||||
|
bpm=0
|
||||||
|
beat_count=0
|
||||||
|
bar_beats=4
|
||||||
Binary file not shown.
@@ -0,0 +1,19 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="mp3"
|
||||||
|
type="AudioStreamMP3"
|
||||||
|
uid="uid://cigt88qjvuvxg"
|
||||||
|
path="res://.godot/imported/low-battery-alarm-beeps-2-SBA-300420705.mp3-dbb44829397d5251f1687ba46d057a0e.mp3str"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/Audio/Enemy SFX/low-battery-alarm-beeps-2-SBA-300420705.mp3"
|
||||||
|
dest_files=["res://.godot/imported/low-battery-alarm-beeps-2-SBA-300420705.mp3-dbb44829397d5251f1687ba46d057a0e.mp3str"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
loop=false
|
||||||
|
loop_offset=0
|
||||||
|
bpm=0
|
||||||
|
beat_count=0
|
||||||
|
bar_beats=4
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=88 format=4 uid="uid://djr7vnr1hcx82"]
|
[gd_scene load_steps=90 format=4 uid="uid://djr7vnr1hcx82"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://cdofgtwevbray" path="res://scripts/spider.gd" id="1_7e7fe"]
|
[ext_resource type="Script" uid="uid://cdofgtwevbray" path="res://scripts/spider.gd" id="1_7e7fe"]
|
||||||
[ext_resource type="PackedScene" uid="uid://h5ojldugfyyu" path="res://assets/bullet_enemy.tscn" id="2_aew5r"]
|
[ext_resource type="PackedScene" uid="uid://h5ojldugfyyu" path="res://assets/bullet_enemy.tscn" id="2_aew5r"]
|
||||||
@@ -28,6 +28,7 @@
|
|||||||
[ext_resource type="AudioStream" uid="uid://bsfhh126bteon" path="res://assets/Audio/Weapons/7Mag Bolt Action Rifle/Gunshots/7Mag Bolt Action Rifle - Gunshot A 003.wav" id="25_aasxo"]
|
[ext_resource type="AudioStream" uid="uid://bsfhh126bteon" path="res://assets/Audio/Weapons/7Mag Bolt Action Rifle/Gunshots/7Mag Bolt Action Rifle - Gunshot A 003.wav" id="25_aasxo"]
|
||||||
[ext_resource type="AudioStream" uid="uid://d0n46ursprjjs" path="res://assets/Audio/Enemy SFX/servo-motor-SBA-300109173.mp3" id="25_lr3lm"]
|
[ext_resource type="AudioStream" uid="uid://d0n46ursprjjs" path="res://assets/Audio/Enemy SFX/servo-motor-SBA-300109173.mp3" id="25_lr3lm"]
|
||||||
[ext_resource type="AudioStream" uid="uid://br3tyu6cmgyy2" path="res://assets/Audio/Weapons/7Mag Bolt Action Rifle/Gunshots/7Mag Bolt Action Rifle - Gunshot A 004.wav" id="26_1b3cb"]
|
[ext_resource type="AudioStream" uid="uid://br3tyu6cmgyy2" path="res://assets/Audio/Weapons/7Mag Bolt Action Rifle/Gunshots/7Mag Bolt Action Rifle - Gunshot A 004.wav" id="26_1b3cb"]
|
||||||
|
[ext_resource type="AudioStream" uid="uid://chl8fl1ywr0bd" path="res://assets/Audio/Enemy SFX/alarm Mixdown 1.mp3" id="29_nhal8"]
|
||||||
|
|
||||||
[sub_resource type="SphereShape3D" id="SphereShape3D_fborx"]
|
[sub_resource type="SphereShape3D" id="SphereShape3D_fborx"]
|
||||||
radius = 15.0
|
radius = 15.0
|
||||||
@@ -824,12 +825,19 @@ random_pitch = 1.1
|
|||||||
streams_count = 1
|
streams_count = 1
|
||||||
stream_0/stream = ExtResource("25_lr3lm")
|
stream_0/stream = ExtResource("25_lr3lm")
|
||||||
|
|
||||||
[node name="spider" type="CharacterBody3D" node_paths=PackedStringArray("nav_agent", "visibility_areas", "line_of_sight_ray") groups=["enemy", "persist"]]
|
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_aasxo"]
|
||||||
|
streams_count = 3
|
||||||
|
stream_0/stream = ExtResource("29_nhal8")
|
||||||
|
stream_1/stream = ExtResource("29_nhal8")
|
||||||
|
stream_2/stream = ExtResource("29_nhal8")
|
||||||
|
|
||||||
|
[node name="spider" type="CharacterBody3D" node_paths=PackedStringArray("nav_agent", "hit_targets", "visibility_areas", "line_of_sight_ray") groups=["enemy", "persist"]]
|
||||||
collision_layer = 8
|
collision_layer = 8
|
||||||
collision_mask = 521
|
collision_mask = 521
|
||||||
up_direction = Vector3(0.0449994, 0.998987, 0)
|
up_direction = Vector3(0.0449994, 0.998987, 0)
|
||||||
script = ExtResource("1_7e7fe")
|
script = ExtResource("1_7e7fe")
|
||||||
nav_agent = NodePath("NavigationAgent3D")
|
nav_agent = NodePath("NavigationAgent3D")
|
||||||
|
hit_targets = [NodePath("body/backTarget")]
|
||||||
visibility_areas = [NodePath("VisibilityArea")]
|
visibility_areas = [NodePath("VisibilityArea")]
|
||||||
line_of_sight_ray = NodePath("LineOfSight")
|
line_of_sight_ray = NodePath("LineOfSight")
|
||||||
bullet = ExtResource("2_aew5r")
|
bullet = ExtResource("2_aew5r")
|
||||||
@@ -844,34 +852,31 @@ taunts = Array[String](["did i do that?", "you've been on my shitlist", "you lik
|
|||||||
script = ExtResource("6_87l3v")
|
script = ExtResource("6_87l3v")
|
||||||
initial_state = NodePath("Idle")
|
initial_state = NodePath("Idle")
|
||||||
|
|
||||||
[node name="Idle" type="Node" parent="StateMachine" node_paths=PackedStringArray("enemy", "enemy_targets")]
|
[node name="Idle" type="Node" parent="StateMachine" node_paths=PackedStringArray("enemy")]
|
||||||
script = ExtResource("7_cwyr0")
|
script = ExtResource("7_cwyr0")
|
||||||
enemy = NodePath("../..")
|
enemy = NodePath("../..")
|
||||||
enemy_targets = [NodePath("../../body/backTarget")]
|
|
||||||
can_see = true
|
can_see = true
|
||||||
|
|
||||||
[node name="Stunned" type="Node" parent="StateMachine" node_paths=PackedStringArray("stunned_stars", "enemy", "enemy_targets")]
|
[node name="Stunned" type="Node" parent="StateMachine" node_paths=PackedStringArray("stunned_stars", "enemy")]
|
||||||
script = ExtResource("8_wpql0")
|
script = ExtResource("8_wpql0")
|
||||||
stunned_stars = NodePath("../../body/StunnedStars")
|
stunned_stars = NodePath("../../body/StunnedStars")
|
||||||
enemy = NodePath("../..")
|
enemy = NodePath("../..")
|
||||||
enemy_targets = [NodePath("../../body/backTarget")]
|
|
||||||
|
|
||||||
[node name="Die" type="Node" parent="StateMachine" node_paths=PackedStringArray("enemy")]
|
[node name="Die" type="Node" parent="StateMachine" node_paths=PackedStringArray("enemy")]
|
||||||
script = ExtResource("9_6mvds")
|
script = ExtResource("9_6mvds")
|
||||||
enemy = NodePath("../..")
|
enemy = NodePath("../..")
|
||||||
metadata/_custom_type_script = "uid://dhxolagi0b5s1"
|
metadata/_custom_type_script = "uid://dhxolagi0b5s1"
|
||||||
|
|
||||||
[node name="Attack" type="Node" parent="StateMachine" node_paths=PackedStringArray("enemy", "enemy_targets")]
|
[node name="Attack" type="Node" parent="StateMachine" node_paths=PackedStringArray("alarm_sound", "enemy")]
|
||||||
script = ExtResource("10_gicen")
|
script = ExtResource("10_gicen")
|
||||||
|
alarm_sound = NodePath("../../AUIDO/Alarm")
|
||||||
enemy = NodePath("../..")
|
enemy = NodePath("../..")
|
||||||
enemy_targets = [NodePath("../../body/backTarget")]
|
|
||||||
can_see = true
|
can_see = true
|
||||||
|
|
||||||
[node name="Reload" type="Node" parent="StateMachine" node_paths=PackedStringArray("reload_sound", "enemy", "enemy_targets")]
|
[node name="Reload" type="Node" parent="StateMachine" node_paths=PackedStringArray("reload_sound", "enemy")]
|
||||||
script = ExtResource("11_ekglj")
|
script = ExtResource("11_ekglj")
|
||||||
reload_sound = NodePath("../../AUIDO/Reload")
|
reload_sound = NodePath("../../AUIDO/Reload")
|
||||||
enemy = NodePath("../..")
|
enemy = NodePath("../..")
|
||||||
enemy_targets = [NodePath("../../body/backTarget")]
|
|
||||||
|
|
||||||
[node name="VisibilityArea" type="Area3D" parent="."]
|
[node name="VisibilityArea" type="Area3D" parent="."]
|
||||||
collision_layer = 0
|
collision_layer = 0
|
||||||
@@ -1115,6 +1120,9 @@ stream = SubResource("AudioStreamRandomizer_fborx")
|
|||||||
volume_db = -2.5
|
volume_db = -2.5
|
||||||
unit_size = 5.0
|
unit_size = 5.0
|
||||||
|
|
||||||
|
[node name="Alarm" type="AudioStreamPlayer3D" parent="AUIDO"]
|
||||||
|
stream = SubResource("AudioStreamRandomizer_aasxo")
|
||||||
|
|
||||||
[connection signal="body_entered" from="body/backTarget" to="body/backTarget" method="_on_body_entered"]
|
[connection signal="body_entered" from="body/backTarget" to="body/backTarget" method="_on_body_entered"]
|
||||||
[connection signal="body_part_hit" from="body/backTarget" to="." method="_on_area_3d_body_part_hit"]
|
[connection signal="body_part_hit" from="body/backTarget" to="." method="_on_area_3d_body_part_hit"]
|
||||||
[connection signal="timeout" from="Timers/prefire_timer" to="." method="_on_prefire_timer_timeout"]
|
[connection signal="timeout" from="Timers/prefire_timer" to="." method="_on_prefire_timer_timeout"]
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ var heartbeat : float = 3.0
|
|||||||
@export var initial_wait_time : float = 1.0
|
@export var initial_wait_time : float = 1.0
|
||||||
@export var between_shot_time : Vector2 = Vector2(.5,2.0)
|
@export var between_shot_time : Vector2 = Vector2(.5,2.0)
|
||||||
@export var reload_time : float = 7.0
|
@export var reload_time : float = 7.0
|
||||||
|
@export var alarm_sound : AudioStreamPlayer3D
|
||||||
|
|
||||||
|
|
||||||
var ammo
|
var ammo
|
||||||
@@ -18,9 +19,10 @@ func Enter():
|
|||||||
ammo = enemy.max_ammo
|
ammo = enemy.max_ammo
|
||||||
enemy.turret_material.emission_enabled = true
|
enemy.turret_material.emission_enabled = true
|
||||||
initial_timer = initial_wait_time
|
initial_timer = initial_wait_time
|
||||||
|
alarm_sound.play()
|
||||||
|
|
||||||
func update_waypoint():
|
func update_waypoint():
|
||||||
enemy.nav_agent.set_target_position(enemy.character_follow.global_position)
|
enemy.nav_agent.set_target_position(enemy.point_of_interest)
|
||||||
|
|
||||||
func Update(delta):
|
func Update(delta):
|
||||||
if heartbeat > 0:
|
if heartbeat > 0:
|
||||||
@@ -46,7 +48,7 @@ func Update(delta):
|
|||||||
Transitioned.emit(self,"reload")
|
Transitioned.emit(self,"reload")
|
||||||
|
|
||||||
func Physics_Update(delta):
|
func Physics_Update(delta):
|
||||||
enemy.turret_look_next.look_at(enemy.character_follow.global_position)
|
enemy.turret_look_next.look_at(enemy.point_of_interest)
|
||||||
enemy.turret_look.rotation = lerp(enemy.turret_look.rotation,enemy.turret_look_next.rotation,delta * enemy.turret_look_speed)
|
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 destination = enemy.nav_agent.get_next_path_position()
|
||||||
|
|||||||
@@ -2,14 +2,9 @@ extends State
|
|||||||
class_name EnemyState
|
class_name EnemyState
|
||||||
|
|
||||||
@export var enemy : CharacterBody3D
|
@export var enemy : CharacterBody3D
|
||||||
@export var enemy_targets : Array[Area3D]
|
|
||||||
@export var move_speed : float = 3
|
@export var move_speed : float = 3
|
||||||
@export var can_see : bool = false
|
@export var can_see : bool = false # indicates whether the enemy is able to see things in the state
|
||||||
|
|
||||||
func Enter():
|
|
||||||
if enemy_targets != null:
|
|
||||||
for target in enemy_targets:
|
|
||||||
target.body_part_hit.connect(take_damage)
|
|
||||||
|
|
||||||
func Update(delta):
|
func Update(delta):
|
||||||
if enemy.visibility_areas != null:
|
if enemy.visibility_areas != null:
|
||||||
@@ -17,28 +12,15 @@ func Update(delta):
|
|||||||
var bodies = area.get_overlapping_bodies()
|
var bodies = area.get_overlapping_bodies()
|
||||||
if bodies != null:
|
if bodies != null:
|
||||||
for i in bodies:
|
for i in bodies:
|
||||||
enemy.point_of_interest = i.global_position
|
if i is Player:
|
||||||
|
enemy.character_follow = i
|
||||||
else:
|
else:
|
||||||
enemy.point_of_interest = null
|
enemy.character_follow = null
|
||||||
|
|
||||||
if enemy.point_of_interest != null:
|
if enemy.character_follow != null:
|
||||||
enemy.line_of_sight_ray.look_at(enemy.point_of_interest)
|
if can_see:
|
||||||
if enemy.line_of_sight_ray.is_colliding():
|
if enemy.is_player_visible():
|
||||||
if enemy.line_of_sight_ray.get_collider() is Player:
|
print("PLAYER SPOTTED")
|
||||||
if can_see:
|
enemy.cache_player_pos()
|
||||||
enemy.character_follow = enemy.line_of_sight_ray.get_collider()
|
Transitioned.emit(self,"attack")
|
||||||
Transitioned.emit(self,"attack")
|
|
||||||
|
|
||||||
|
|
||||||
func take_damage(dam,bullet_damage):
|
|
||||||
SignalBus.emit_signal("enemy_hit")
|
|
||||||
enemy.health -= dam * bullet_damage
|
|
||||||
enemy.health_bar_sprite.visible = true
|
|
||||||
enemy.health_bar_sprite.health_update()
|
|
||||||
var number_spawn = enemy.damage_number.instantiate()
|
|
||||||
number_spawn.damage_amt = bullet_damage * dam
|
|
||||||
number_spawn.position = enemy.global_position + Vector3(0,2,0)
|
|
||||||
get_tree().get_root().add_child(number_spawn)
|
|
||||||
|
|
||||||
if enemy.health <= 0:
|
|
||||||
Transitioned.emit(self,"die")
|
|
||||||
|
|||||||
@@ -7,5 +7,5 @@ signal body_part_hit(dam,bullet_damage)
|
|||||||
func hit(bullet_damage):
|
func hit(bullet_damage):
|
||||||
emit_signal("body_part_hit", damage, bullet_damage)
|
emit_signal("body_part_hit", damage, bullet_damage)
|
||||||
|
|
||||||
func _on_body_entered(body: Node3D) -> void:
|
#func _on_body_entered(body: Node3D) -> void:
|
||||||
hit(body.bullet_damage)
|
#hit(body.bullet_damage)
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ func _physics_process(delta: float) -> void:
|
|||||||
collision_ray_length_adj()
|
collision_ray_length_adj()
|
||||||
|
|
||||||
func damage(body):
|
func damage(body):
|
||||||
|
print("BODY HIT : ",body)
|
||||||
if body != null and !body.is_in_group("player"):
|
if body != null and !body.is_in_group("player"):
|
||||||
|
|
||||||
if collision_raycast_3d != null:
|
if collision_raycast_3d != null:
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ var last_enemy : bool = false
|
|||||||
@export var max_ammo = 10
|
@export var max_ammo = 10
|
||||||
@export var loot_amount = 2
|
@export var loot_amount = 2
|
||||||
@export var nav_agent : NavigationAgent3D
|
@export var nav_agent : NavigationAgent3D
|
||||||
|
@export var hit_targets : Array[Area3D]
|
||||||
@export var visibility_areas : Array[Area3D]
|
@export var visibility_areas : Array[Area3D]
|
||||||
@export var line_of_sight_ray : RayCast3D
|
@export var line_of_sight_ray : RayCast3D
|
||||||
|
|
||||||
@@ -71,14 +72,14 @@ var hive_velocity
|
|||||||
var hive_nav_point
|
var hive_nav_point
|
||||||
var dying
|
var dying
|
||||||
var can_die : bool = false
|
var can_die : bool = false
|
||||||
var player_in_view = false
|
|
||||||
var player_last_seen
|
|
||||||
var knocked = false
|
var knocked = false
|
||||||
var stunned = false
|
var stunned = false
|
||||||
var health
|
var health
|
||||||
|
|
||||||
|
|
||||||
var point_of_interest
|
var point_of_interest
|
||||||
var character_follow
|
var character_follow
|
||||||
|
var player_last_seen
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
health = start_health
|
health = start_health
|
||||||
@@ -90,12 +91,49 @@ func _ready():
|
|||||||
await get_tree().create_timer(random_time).timeout
|
await get_tree().create_timer(random_time).timeout
|
||||||
postfire_timer.start()
|
postfire_timer.start()
|
||||||
|
|
||||||
|
if hit_targets != null:
|
||||||
|
for target in hit_targets:
|
||||||
|
target.body_part_hit.connect(take_damage)
|
||||||
|
|
||||||
func _process(delta):
|
func _process(delta):
|
||||||
move_and_slide()
|
move_and_slide()
|
||||||
|
look_at_player()
|
||||||
|
cache_player_pos()
|
||||||
|
|
||||||
func stun():
|
func stun():
|
||||||
state_machine.on_child_transition(state_machine.current_state,"stunned")
|
change_state_to("stunned")
|
||||||
|
|
||||||
|
func take_damage(dam,bullet_damage):
|
||||||
|
SignalBus.emit_signal("enemy_hit")
|
||||||
|
health -= dam * bullet_damage
|
||||||
|
health_bar_sprite.visible = true
|
||||||
|
health_bar_sprite.health_update()
|
||||||
|
var number_spawn = damage_number.instantiate()
|
||||||
|
number_spawn.damage_amt = bullet_damage * dam
|
||||||
|
number_spawn.position = global_position + Vector3(0,2,0)
|
||||||
|
get_tree().get_root().add_child(number_spawn)
|
||||||
|
|
||||||
|
if health <= 0:
|
||||||
|
change_state_to("die")
|
||||||
|
|
||||||
|
func change_state_to(set_state):
|
||||||
|
state_machine.on_child_transition(state_machine.current_state,set_state)
|
||||||
|
|
||||||
|
func look_at_player():
|
||||||
|
if character_follow != null:
|
||||||
|
line_of_sight_ray.look_at(character_follow.global_position)
|
||||||
|
|
||||||
|
func is_player_visible():
|
||||||
|
if line_of_sight_ray.is_colliding():
|
||||||
|
if line_of_sight_ray.get_collider() 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:
|
||||||
|
point_of_interest = line_of_sight_ray.get_collision_point()
|
||||||
|
|
||||||
func save():
|
func save():
|
||||||
var save_dict = {
|
var save_dict = {
|
||||||
|
|||||||
Reference in New Issue
Block a user