# BgmDirector —— 把 M2Client.bgm_changed 信号翻译成 Audio 的 BGM 播放。 # # 存在的理由:§9.1 的地图 BGM 消费点,从 net_world.gd 里拆出来,避免 W2(可见性) # 和 W4(音频)同时改 net_world.gd。真正的「地图 → 曲目」解析和音量应用由 W4 在 # 这里补全(见 docs/CLIENT-GAP-FIX.md §9.1)。 # # 用法: # var bd := preload("res://bgm_director.gd").new() # add_child(bd) # bd.bind(client, audio) extends Node var _client: Node var _audio: Node # 服务器最近一次下发的 BGM(曲目 id 或路径)和音量(<0 表示未指定)。 var current_track := "" var current_volume := -1.0 func bind(client: Node, audio: Node) -> void: _client = client _audio = audio if _client and _client.has_signal("bgm_changed"): _client.bgm_changed.connect(_on_bgm_changed) func _on_bgm_changed(name: String, volume: float) -> void: current_track = name if volume >= 0.0: current_volume = volume if _audio and "master_bgm" in _audio: _audio.master_bgm = clampf(volume, 0.0, 1.0) if _audio == null: return if name == "": if _audio.has_method("stop_bgm"): _audio.stop_bgm() return if _audio.has_method("play_bgm"): _audio.play_bgm(name)