diff --git a/src/addons/openvr_overlay/interaction/overlay_interaction.gd b/src/addons/openvr_overlay/interaction/overlay_interaction.gd index c8a523a..945e69a 100644 --- a/src/addons/openvr_overlay/interaction/overlay_interaction.gd +++ b/src/addons/openvr_overlay/interaction/overlay_interaction.gd @@ -42,7 +42,6 @@ onready var tracker_nodes = { func _ready() -> void: - #add_child(_overlay_area) _overlay_area = $OverlayArea _overlay_area.get_node("AreaNear"). connect("area_entered", self, "_on_Near_entered") _overlay_area.get_node("AreaNear"). connect("area_exited", self, "_on_Near_exited") @@ -52,14 +51,12 @@ func _ready() -> void: get_parent().connect("width_changed", self, "_update_width") get_parent().connect("offset_changed", self, "_update_offset") get_parent().connect("target_changed", self, "_update_target") - get_parent().connect("path_changed", self, "_update_modules") - get_parent().connect("path_changed", self, "_update_target") OverlayManager.connect("grab_mode_changed", self, "update_selection") - _update_width() - _update_offset() - _update_target() + call_deferred("_update_width") + call_deferred("_update_offset") + call_deferred("_update_target") func _trigger_on(controller): @@ -151,28 +148,18 @@ func _update_target(): _overlay_area.get_node("AreaNear").collision_mask += int(t!="left")*16 # detect left hand -func _update_modules(): - # this should be handled better, DRY +# called by overlay_instance after properties are loaded and before overlay scene enters the tree +func spawn_modules(): # grab module - var grab_module_exists: bool = get_node_or_null("OverlayGrab") != null - if get_parent().get_property("has_grab"): - if !grab_module_exists: - var module = preload("res://addons/openvr_overlay/OverlayGrab.tscn") - add_child(module.instance()) - elif grab_module_exists: - get_node("OverlayGrab").queue_free() + var module = preload("res://addons/openvr_overlay/OverlayGrab.tscn") + add_child(module.instance()) # cursor module - var cursor_module_exists: bool = get_node_or_null("OverlayCursor") != null - if get_parent().get_property("has_cursor"): - if !cursor_module_exists: - var module = preload("res://addons/openvr_overlay/OverlayCursor.tscn") - add_child(module.instance()) - elif cursor_module_exists: - get_node("OverlayCursor").queue_free() - + var module = preload("res://addons/openvr_overlay/OverlayCursor.tscn") + add_child(module.instance()) + func _on_RightHand_button_pressed(button: int) -> void: diff --git a/src/addons/openvr_overlay/overlay_instance.gd b/src/addons/openvr_overlay/overlay_instance.gd index 921f65c..06e7ef8 100644 --- a/src/addons/openvr_overlay/overlay_instance.gd +++ b/src/addons/openvr_overlay/overlay_instance.gd @@ -1,6 +1,6 @@ extends Spatial -signal path_changed +#signal path_changed signal overlay_visible_changed signal width_changed signal alpha_changed @@ -28,7 +28,7 @@ var current_target: String = "world" setget _set_current_target var fallback = ["left", "right", "head"] # TODO setget that updates tracking (not important) var interaction_handler: Node var overlay_visible := true setget set_overlay_visible -var path := "res://special_overlays/MainOverlay.tscn" setget set_path +var path : String = "res://special_overlays/MainOverlay.tscn"# setget set_path var path_invalid := false var OVERLAY_PROPERTIES: Dictionary # defined in overlay root script (optional) @@ -37,6 +37,8 @@ var overlay_scene: Node func _ready() -> void: + container = $OverlayViewport/Container + load_overlay() current_target = target ARVRServer.connect("tracker_added", self, "_tracker_changed") @@ -48,6 +50,24 @@ func _ready() -> void: update_tracker_id() call_deferred("update_offset") +func load_overlay() -> void: + path_invalid = false + + var packed_overlay = load(path) + if not packed_overlay: + path_invalid = true + overlay_scene = load("res://special_overlays/UnknownType.tscn").instance() + else: + overlay_scene = packed_overlay.instance() + + if overlay_scene.get("OVERLAY_PROPERTIES") != null: + OVERLAY_PROPERTIES = overlay_scene.OVERLAY_PROPERTIES + + $OverlayInteraction.spawn_modules() + + if container.get_child_count() > 0: + container.get_child(0).queue_free() + container.add_child(overlay_scene) func update_tracker_id(): _tracker_id = -1 @@ -129,26 +149,6 @@ func set_width_in_meters(width: float) -> void: emit_signal("width_changed") -func set_path(new: String) -> void: - path = new - path_invalid = false - - var packed_overlay = load(path) - if not packed_overlay: - path_invalid = true - overlay_scene = load("res://special_overlays/UnknownType.tscn").instance() - else: - overlay_scene = packed_overlay.instance() - if overlay_scene.get("OVERLAY_PROPERTIES") != null: - OVERLAY_PROPERTIES = overlay_scene.OVERLAY_PROPERTIES - - emit_signal("path_changed") - - if container.get_child_count() > 0: - container.get_child(0).queue_free() - container.add_child(overlay_scene) - - func set_alpha(val: float): alpha = val $VROverlayViewport/TextureRect.modulate.a = val @@ -168,8 +168,8 @@ func _notification(what: int) -> void: emit_signal("offset_changed") -func get_property(name: String): - if OVERLAY_PROPERTIES.has(name): - return OVERLAY_PROPERTIES[name] +func get_property(p_name: String): + if OVERLAY_PROPERTIES.has(p_name): + return OVERLAY_PROPERTIES[p_name] - return OverlayInit.OVERLAY_PROPERTIES_DEFAULT[name] + return OverlayInit.OVERLAY_PROPERTIES_DEFAULT[p_name] diff --git a/src/overlay_manager.gd b/src/overlay_manager.gd index a6a36ca..6b1dea6 100644 --- a/src/overlay_manager.gd +++ b/src/overlay_manager.gd @@ -29,6 +29,7 @@ func add_overlay(name): print("Adding overlay '", name, "'") var instance = preload("res://addons/openvr_overlay/OverlayInstance.tscn").instance() instance.name = name + instance.path = Settings.s.overlays[name].path instance.add_child(preload("res://OverlaySettingsSync.tscn").instance()) add_child(instance) emit_signal("added_overlay", name) diff --git a/src/overlay_settings_sync.gd b/src/overlay_settings_sync.gd index 7f7342d..d48b172 100644 --- a/src/overlay_settings_sync.gd +++ b/src/overlay_settings_sync.gd @@ -10,7 +10,6 @@ var _needs_sync := true func _ready() -> void: p = get_parent() call_deferred("load_all") - p.connect("path_changed", self, "_prop_changed") p.connect("overlay_visible_changed", self, "_prop_changed") p.connect("width_changed", self, "_prop_changed") p.connect("alpha_changed", self, "_prop_changed") @@ -46,8 +45,8 @@ func load_all() -> void: if Settings.s.overlays.has(p.name): var new = Settings.s.overlays[p.name] - if new.has("path"): - p.path = new.path + #if new.has("path"): + # p.path = new.path if new.has("visible"): p.overlay_visible = new.visible if new.has("width"): diff --git a/src/project.godot b/src/project.godot index 7a918b2..08648d1 100644 --- a/src/project.godot +++ b/src/project.godot @@ -25,6 +25,7 @@ OverlayManager="*res://OverlayManager.tscn" [debug] +gdscript/warnings/unused_signal=false gdscript/warnings/return_value_discarded=false [display] diff --git a/src/ui/overlay_list_item.gd b/src/ui/overlay_list_item.gd index 1c5320d..7403af7 100644 --- a/src/ui/overlay_list_item.gd +++ b/src/ui/overlay_list_item.gd @@ -14,7 +14,6 @@ func _ready() -> void: $BasicOptions/Label.text = overlay_name name = overlay_name overlay.connect("overlay_visible_changed", self, "_overlay_visible_changed") - overlay.connect("path_changed", self, "_update_warning") func _apply_loaded():