From a799c0436e22e19807766276f01c3ef2e37720b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lera=20Elvo=C3=A9?= Date: Mon, 27 Nov 2023 12:09:45 +0300 Subject: [PATCH] add obs scene list node --- classes/deck/nodes/obs_scene_list.gd | 49 ++++++++++++++++++++++++++++ classes/deck/port.gd | 4 +++ 2 files changed, 53 insertions(+) create mode 100644 classes/deck/nodes/obs_scene_list.gd diff --git a/classes/deck/nodes/obs_scene_list.gd b/classes/deck/nodes/obs_scene_list.gd new file mode 100644 index 0000000..222cec9 --- /dev/null +++ b/classes/deck/nodes/obs_scene_list.gd @@ -0,0 +1,49 @@ +extends DeckNode + +var noobs: NoOBSWS + +func _init() -> void: + name = "Scene Selector" + node_type = "obs_scene_list" + description = "" + category = "obs" + + props_to_serialize = [] + + add_output_port( + DeckType.Types.STRING, + "Select a scene", + "singlechoice" + ) + + add_virtual_port( + DeckType.Types.BOOL, + "Refresh", + "button" + ) + + +func _receive(on_virtual_port: int, data: Variant, extra_data: Array = []) -> void: + if on_virtual_port != 0: + return + + if noobs == null: + noobs = Connections.obs_websocket + + var items: Array + var req := noobs.make_generic_request("GetSceneList") + await req.response_received + items = req.message.response_data.scenes + var new_desc := "singlechoice" + for scene in items: + new_desc += ":" + scene.sceneName + new_desc.trim_suffix(":") + get_output_ports()[0].descriptor = new_desc + ports_updated.emit() + + +func _value_request(on_input_port: int) -> Variant: + if ports[0].value != null: + return ports[0].value + + return null diff --git a/classes/deck/port.gd b/classes/deck/port.gd index 9cea9de..e1c1816 100644 --- a/classes/deck/port.gd +++ b/classes/deck/port.gd @@ -48,4 +48,8 @@ func _init( func set_value(v: Variant) -> void: + if v is Callable: + value = v.call() + return + value = v