/
ulupapi
/
Race_game
Обзор
Документация
Войти
/
ulupapi
/
Race_game
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
scripts/FinishSensor.gd
54 строки
1 KB
ulupapi
Game
26 дек 2025, 19:34
26 дек 2025, 19:34
7574b6d
Код
Авторство
О чём код?
# res://scripts/FinishSensor.gd extends Area3D class_name FinishSensor @export var only_player: bool = true @export var car_path: NodePath @export var reemit_interval_s: float = 0.30 # защита от дребезга signal crossed(body: Node) var car: Node = null var _last_emit_t: float = -999.0 @export var debug_print: bool = false func _ready() -> void: monitoring = true monitorable = true if car_path != NodePath(""): car = get_node_or_null(car_path) if car == null and only_player: var players: Array = get_tree().get_nodes_in_group("player_car") if players.size() > 0: car = players[0] if not is_connected("body_entered", Callable(self, "_on_body_entered")): connect("body_entered", Callable(self, "_on_body_entered")) # страховка: если форма забыта var cs: CollisionShape3D = null for c in get_children(): if c is CollisionShape3D: cs = c break if cs != null: cs.scale = Vector3.ONE func _on_body_entered(body: Node) -> void: if not _accept(body): return var t: float = Time.get_ticks_msec() / 1000.0 if t - _last_emit_t < reemit_interval_s: return _last_emit_t = t if debug_print: print("[Finish] crossed by ", body.name) emit_signal("crossed", body) func _accept(body: Node) -> bool: if only_player: if car == null: return false return body == car return true