Лови
extends CharacterBody3D
@export var speed = 5.0
@export var detection_radius = 10.0
@export var attack_radius = 2.0
@export var attack_damage = 10
@export var attack_cooldown = 1.0
var player: CharacterBody3D = null
var can_attack = true
func _ready():
# Найдите игрока в сцене (предполагается, что у игрока есть группа "player")
player = get_tree().get_nodes_in_group("player")[0]
func _physics_process(delta):
if player:
var distance_to_player = global_position.distance_to(player.global_position)
if distance_to_player <= detection_radius:
# Игрок в зоне видимости, двигаемся к нему
var direction = (player.global_position - global_position).normalized()
velocity = direction * speed
move_and_slide()
look_at(player.global_position, Vector3.UP)
if distance_to_player <= attack_radius and can_attack:
attack()
func attack():
print("Моб атакует!")
if player.has_method("take_damage"):
player.take_damage(attack_damage)
can_attack = false
get_tree().create_timer(attack_cooldown).timeout.connect(reset_attack_cooldown)
func reset_attack_cooldown():
can_attack = true
# Добавьте этот метод к игроку
func take_damage(amount):
print(f"Игрок получил {amount} урона!")
# Здесь реализуйте логику получения урона игроком