@tool
## Bridge wrapper for player_procedural — opens the bridge and exports
## the player's skeleton + meshes for posing in Blender.
##
## Usage:
## 1. Open this scene in the Godot editor
## 2. In Blender, connect to the bridge
## 3. Pose the skeleton in Blender → see it update here in real-time
## 4. F6 to re-export if needed
extends Node3D
@export var auto_start: bool = true
@export var socket_path: String = "/tmp/blender_bridge.sock"
var _bridge: BlenderBridge
var _started: bool = false
func _enter_tree() -> void:
if not Engine.is_editor_hint():
return
call_deferred("_deferred_start")
func _deferred_start() -> void:
if not auto_start or _started:
return
if not is_inside_tree():
return
_bridge = $BlenderBridge as BlenderBridge
if _bridge == null:
push_warning("BlenderBridge node not found")
return
_bridge.start_server(socket_path)
# Export the player subtree (skeleton + meshes)
var player: Node = $PlayerProcedural
if player:
_bridge.export_scene(player)
_bridge.auto_sync = true
_started = true
print("[BridgePlayer] Server started — waiting for Blender connection")
func _exit_tree() -> void:
if not Engine.is_editor_hint():
return
if _bridge != null and _started:
_bridge.auto_sync = false
_bridge.stop_server()
_started = false
print("[BridgePlayer] Server stopped")
func _process(_delta: float) -> void:
if not Engine.is_editor_hint() or not _started:
return
if _bridge == null:
return
if Input.is_key_pressed(KEY_F6):
var player: Node = $PlayerProcedural
if player:
_bridge.export_scene(player)
print("[BridgePlayer] Player re-exported (F6)")