/
mrFeld
/
Platformer
Обзор
Документация
Войти
/
mrFeld
/
Platformer
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Script/Player/attack_sector.gd
87 строк
2 KB
mrFeld
inv0.1
10 май 2025, 04:47
10 май 2025, 04:47
c90da6d
Код
Авторство
О чём код?
extends Area2D @export var damage: int = 30 @export var angle_deg: float = 90.0 @export var radius: float = 100.0 @export var cooldown: float = 0.5 @export var color: Color = Color(1, 0, 0, 0.3) @export var start_offset: float = 10.0 signal cooldown_updated(time_left: float, cooldown: float) @onready var timer: Timer = $Timer @onready var shape: CollisionPolygon2D = $CollisionPolygon2D var is_ready := true func _ready(): timer.wait_time = cooldown timer.one_shot = true timer.timeout.connect(_on_cooldown_ready) update_shape() hide() monitoring = false body_entered.connect(_on_body_entered) queue_redraw() func activate(origin_global_position: Vector2, direction: Vector2): if not is_ready: return is_ready = false # Устанавливаем позицию в центр игрока (глобально) global_position = origin_global_position rotation = direction.angle() monitoring = true show() timer.start() emit_signal("cooldown_updated", timer.time_left, cooldown) func _physics_process(_delta): if not is_ready: emit_signal("cooldown_updated", timer.time_left, cooldown) func _on_cooldown_ready(): is_ready = true hide() monitoring = false emit_signal("cooldown_updated", 0, cooldown) func _on_body_entered(body): if body.is_in_group("enemy") and body.has_method("take_damage"): body.take_damage(damage) func update_shape(): var points = [] var angle_step = deg_to_rad(angle_deg) / 16 var start_angle = -deg_to_rad(angle_deg) / 2 points.append(Vector2.RIGHT * start_offset) for i in range(17): var angle = start_angle + i * angle_step var direction = Vector2(cos(angle), sin(angle)).normalized() points.append(direction * radius + Vector2.RIGHT * start_offset) shape.polygon = points queue_redraw() func _draw(): if not visible: return var points = [] var angle_step = deg_to_rad(angle_deg) / 16 var start_angle = -deg_to_rad(angle_deg) / 2 points.append(Vector2.RIGHT * start_offset) for i in range(17): var angle = start_angle + i * angle_step var direction = Vector2(cos(angle), sin(angle)).normalized() points.append(direction * radius + Vector2.RIGHT * start_offset) draw_colored_polygon(points, color)