diff --git a/mirror-godot-app/addons/gut/gui/editor_globals.gd b/mirror-godot-app/addons/gut/gui/editor_globals.gd index 43903685..33d8200a 100644 --- a/mirror-godot-app/addons/gut/gui/editor_globals.gd +++ b/mirror-godot-app/addons/gut/gui/editor_globals.gd @@ -44,4 +44,3 @@ static var user_prefs = _user_prefs : static func create_temp_directory(): DirAccess.make_dir_recursive_absolute(temp_directory) - diff --git a/mirror-godot-app/creator/asset_inventory/asset_detail_window/asset_detail_window.gd b/mirror-godot-app/creator/asset_inventory/asset_detail_window/asset_detail_window.gd index 7375e57f..4f54ccb9 100644 --- a/mirror-godot-app/creator/asset_inventory/asset_detail_window/asset_detail_window.gd +++ b/mirror-godot-app/creator/asset_inventory/asset_detail_window/asset_detail_window.gd @@ -292,7 +292,7 @@ func _on_delete_dialog_confirmed(): Notify.error("Asset Delete Error", promise.get_error_message()) else: Notify.info("Asset Deleted", "Asset deleted succesfully.") - GameUI.creator_ui.asset_browser.on_asset_deleted(true) + GameUI.instance.creator_ui.asset_browser.on_asset_deleted(true) hide() diff --git a/mirror-godot-app/creator/asset_inventory/browser/asset_browser.gd b/mirror-godot-app/creator/asset_inventory/browser/asset_browser.gd index d2479250..3b78816d 100644 --- a/mirror-godot-app/creator/asset_inventory/browser/asset_browser.gd +++ b/mirror-godot-app/creator/asset_inventory/browser/asset_browser.gd @@ -19,7 +19,7 @@ var _last_upload_directory: String = "" @onready var _viewport: Viewport = get_viewport() @onready var _file_search: FileDialog: get: - return GameUI.file_search + return GameUI.instance.file_search @onready var _sections := $VBoxContainer/Sections @onready var _recents := _sections.get_node(^"Recents") diff --git a/mirror-godot-app/creator/asset_inventory/browser/page_selector.gd b/mirror-godot-app/creator/asset_inventory/browser/page_selector.gd index ef6600c2..40c2afb9 100644 --- a/mirror-godot-app/creator/asset_inventory/browser/page_selector.gd +++ b/mirror-godot-app/creator/asset_inventory/browser/page_selector.gd @@ -49,8 +49,8 @@ func _on_next_page_pressed(): func _on_focus_entered() -> void: - GameUI.grab_input_lock(self) + GameUI.instance.grab_input_lock(self) func _on_focus_exited() -> void: - GameUI.release_input_lock(self) + GameUI.instance.release_input_lock(self) diff --git a/mirror-godot-app/creator/asset_inventory/browser/recent/recents_browser_section.gd b/mirror-godot-app/creator/asset_inventory/browser/recent/recents_browser_section.gd index 260ddab5..c8e855ff 100644 --- a/mirror-godot-app/creator/asset_inventory/browser/recent/recents_browser_section.gd +++ b/mirror-godot-app/creator/asset_inventory/browser/recent/recents_browser_section.gd @@ -17,8 +17,8 @@ var _id_to_slot_map: Dictionary = {} func _ready() -> void: super() - await GameUI.ready - GameUI.login_ui.login_succeeded.connect(Net.asset_client.get_recent_assets) + await GameUI.instance.ready + GameUI.instance.login_ui.login_succeeded.connect(Net.asset_client.get_recent_assets) Net.asset_client.asset_received.connect(_on_net_asset_received) Net.asset_client.recent_assets_received.connect(_on_net_recent_assets_received) Zone.client.disconnected.connect(_on_zone_disconnected) diff --git a/mirror-godot-app/creator/asset_inventory/browser/recent/space_script_entity_slot.gd b/mirror-godot-app/creator/asset_inventory/browser/recent/space_script_entity_slot.gd index e99b2bfc..f2c8c558 100644 --- a/mirror-godot-app/creator/asset_inventory/browser/recent/space_script_entity_slot.gd +++ b/mirror-godot-app/creator/asset_inventory/browser/recent/space_script_entity_slot.gd @@ -59,4 +59,4 @@ func _slot_primary_action() -> void: func _on_asset_slot_mouse_entered() -> void: super() - GameUI.set_hover_tooltip_text(recent_script["name"], "Space Script") + GameUI.instance.set_hover_tooltip_text(recent_script["name"], "Space Script") diff --git a/mirror-godot-app/creator/asset_inventory/browser/search_field.gd b/mirror-godot-app/creator/asset_inventory/browser/search_field.gd index 763b85c3..c12a29a6 100644 --- a/mirror-godot-app/creator/asset_inventory/browser/search_field.gd +++ b/mirror-godot-app/creator/asset_inventory/browser/search_field.gd @@ -67,11 +67,11 @@ func _on_line_edit_text_submitted(new_text: String) -> void: func _on_focus_entered(): - GameUI.grab_input_lock(self) + GameUI.instance.grab_input_lock(self) func _on_focus_exited(): - GameUI.release_input_lock(self) + GameUI.instance.release_input_lock(self) func focus(): diff --git a/mirror-godot-app/creator/common/asset_slot.gd b/mirror-godot-app/creator/common/asset_slot.gd index 88afe32b..4dd65b9d 100644 --- a/mirror-godot-app/creator/common/asset_slot.gd +++ b/mirror-godot-app/creator/common/asset_slot.gd @@ -178,4 +178,4 @@ func _on_asset_slot_mouse_entered() -> void: return var hover_uri = asset_data.thirdparty_source_home_page_url hover_uri = hover_uri.trim_prefix("https://").trim_prefix("http://") - GameUI.set_hover_tooltip_text(asset_data.asset_name, hover_uri) + GameUI.instance.set_hover_tooltip_text(asset_data.asset_name, hover_uri) diff --git a/mirror-godot-app/creator/common/base_asset_slot.gd b/mirror-godot-app/creator/common/base_asset_slot.gd index 2f977f61..e45f9aba 100644 --- a/mirror-godot-app/creator/common/base_asset_slot.gd +++ b/mirror-godot-app/creator/common/base_asset_slot.gd @@ -86,7 +86,7 @@ func _on_asset_slot_gui_input(input_event: InputEvent) -> void: elif input_event.is_action_released(&"primary_action"): slot_activated.emit(self, false) elif input_event.is_action_released(&"secondary_action"): - GameUI.creator_ui.open_context_menu(self) + GameUI.instance.creator_ui.open_context_menu(self) func _on_asset_slot_mouse_entered() -> void: @@ -97,4 +97,4 @@ func _on_asset_slot_mouse_entered() -> void: func _on_asset_slot_mouse_exited() -> void: if not _is_selected: _hover_state.hide() - GameUI.hide_hover_tooltip_text() + GameUI.instance.hide_hover_tooltip_text() diff --git a/mirror-godot-app/creator/creator_ui.gd b/mirror-godot-app/creator/creator_ui.gd index 7f90c038..74862b57 100644 --- a/mirror-godot-app/creator/creator_ui.gd +++ b/mirror-godot-app/creator/creator_ui.gd @@ -150,7 +150,7 @@ func _selection_copy_paste_input(input_event: InputEvent) -> bool: elif input_event.is_action_pressed(&"action_copy"): object_selection.copy_selected_nodes() elif input_event.is_action_pressed(&"action_paste")\ - and not GameUI.is_mouse_hovering_any_control(): + and not GameUI.instance.is_mouse_hovering_any_control(): object_selection.paste_copied_nodes() else: return false @@ -159,7 +159,7 @@ func _selection_copy_paste_input(input_event: InputEvent) -> bool: func _build_mode_camera_movement_input(input_event: InputEvent) -> bool: _mouse_in_motion = input_event is InputEventMouseMotion and input_event.relative.length() > 0 - if Input.is_action_pressed(&"build_mode_camera_movement") or GameUI.is_cinematic_mode_enabled(): + if Input.is_action_pressed(&"build_mode_camera_movement") or GameUI.instance.is_cinematic_mode_enabled(): if _mouse_in_motion: _mouse_used_for_build_mode_camera_movement = true else: @@ -337,7 +337,7 @@ func select_object(object: Node3D) -> void: func raycast_hit_object(hit: Node3D) -> void: - if GameUI.is_cinematic_mode_enabled() or _current_game_mode == GameMode.Mode.NORMAL: + if GameUI.instance.is_cinematic_mode_enabled() or _current_game_mode == GameMode.Mode.NORMAL: return object_selection.raycast_hit_object(hit) diff --git a/mirror-godot-app/creator/selection/add_script/add_script_dialog.gd b/mirror-godot-app/creator/selection/add_script/add_script_dialog.gd index 4fbcd426..af6f0c7c 100644 --- a/mirror-godot-app/creator/selection/add_script/add_script_dialog.gd +++ b/mirror-godot-app/creator/selection/add_script/add_script_dialog.gd @@ -24,7 +24,7 @@ func popup_dialog(target_node: Node) -> void: _add_script_menu.hide_add_script_filter_menu() size = Vector2.ZERO popup_centered() - GameUI.grab_input_lock(self) + GameUI.instance.grab_input_lock(self) if GameplaySettings.script_quick_attach_existing: title = "Create or Attach Script" _add_script_menu.focus_add_script_filter_menu() diff --git a/mirror-godot-app/creator/selection/gizmo/gizmo.gd b/mirror-godot-app/creator/selection/gizmo/gizmo.gd index 09ac2043..6a11ffd0 100644 --- a/mirror-godot-app/creator/selection/gizmo/gizmo.gd +++ b/mirror-godot-app/creator/selection/gizmo/gizmo.gd @@ -86,7 +86,7 @@ func update_gizmo_visibility() -> void: target.is_selection_empty() or target.is_space_object_asset_type(Enums.ASSET_TYPE.MAP) or target.is_any_object_not_allowed_to_edit() - or not GameUI.creator_ui.is_edit_mode(Enums.EDIT_MODE.Asset) + or not GameUI.instance.creator_ui.is_edit_mode(Enums.EDIT_MODE.Asset) or PlayerData.game_mode.get_current_mode() == PlayerData.game_mode.Mode.NORMAL ): _hide_all_gizmos() diff --git a/mirror-godot-app/creator/selection/inspector/categories/inspector_category_toggle_button.gd b/mirror-godot-app/creator/selection/inspector/categories/inspector_category_toggle_button.gd index b2ebc55c..d0a17182 100644 --- a/mirror-godot-app/creator/selection/inspector/categories/inspector_category_toggle_button.gd +++ b/mirror-godot-app/creator/selection/inspector/categories/inspector_category_toggle_button.gd @@ -64,12 +64,12 @@ func _on_toggle_button_pressed(): func _on_hoverable_button_mouse_entered() -> void: if hover_tooltip_text == "": return - GameUI.set_hover_tooltip_text(hover_tooltip_text) + GameUI.instance.set_hover_tooltip_text(hover_tooltip_text) func _on_hoverable_button_mouse_exited() -> void: - GameUI.hide_hover_tooltip_text() + GameUI.instance.hide_hover_tooltip_text() func _on_hoverable_button_pressed() -> void: - GameUI.hide_hover_tooltip_text() + GameUI.instance.hide_hover_tooltip_text() diff --git a/mirror-godot-app/creator/selection/inspector/categories/inspector_object.gd b/mirror-godot-app/creator/selection/inspector/categories/inspector_object.gd index a8de0e22..82316f4d 100644 --- a/mirror-godot-app/creator/selection/inspector/categories/inspector_object.gd +++ b/mirror-godot-app/creator/selection/inspector/categories/inspector_object.gd @@ -60,7 +60,7 @@ func _on_locked_value_changed(new_value: bool) -> void: func _on_asset_asset_clicked(asset_data): - GameUI.creator_ui.asset_detail_window.request_info_popup(asset_data) + GameUI.instance.creator_ui.asset_detail_window.request_info_popup(asset_data) func _on_description_value_changed(new_value): diff --git a/mirror-godot-app/creator/selection/inspector/categories/inspector_spawn_point.gd b/mirror-godot-app/creator/selection/inspector/categories/inspector_spawn_point.gd index ebe2de1b..535c73eb 100644 --- a/mirror-godot-app/creator/selection/inspector/categories/inspector_spawn_point.gd +++ b/mirror-godot-app/creator/selection/inspector/categories/inspector_spawn_point.gd @@ -55,4 +55,4 @@ func _select_new_team(value): func _edit_teams_button_pressed(): - GameUI.teams_handler.toggle_teams_editor() + GameUI.instance.teams_handler.toggle_teams_editor() diff --git a/mirror-godot-app/creator/selection/inspector/inspector.gd b/mirror-godot-app/creator/selection/inspector/inspector.gd index 0e1b2bcc..45de2032 100644 --- a/mirror-godot-app/creator/selection/inspector/inspector.gd +++ b/mirror-godot-app/creator/selection/inspector/inspector.gd @@ -131,7 +131,7 @@ func _refresh_material_tabs(selected_nodes: Array[Node]): idx = _surfaces_item_list.add_item(surface_name, _tab_materials_icon) _surfaces_item_list.set_item_metadata(idx, [mi, x, space_obj]) space_obj_cnt += 1 - if not is_instance_valid(GameUI.creator_ui): + if not is_instance_valid(GameUI.instance.creator_ui): return if idx > -1: if previously_selected_idx != -1 and previously_selected_idx < idx: @@ -141,7 +141,7 @@ func _refresh_material_tabs(selected_nodes: Array[Node]): _surfaces_item_list.select(idx, true) _surfaces_item_list.ensure_current_is_visible() _on_surfaces_item_list_item_selected(idx, false) - var material_creator = GameUI.creator_ui.material_creator_window.material_creator + var material_creator = GameUI.instance.creator_ui.material_creator_window.material_creator Util.safe_signal_connect(material_creator.on_surface_material_updated, _on_surface_material_updated) Util.safe_signal_connect(_material_inspector.material_created, _on_material_created) @@ -514,11 +514,11 @@ func _on_add_script_button_pressed() -> void: func _on_material_creator_button_pressed() -> void: var selected_surface = _surfaces_item_list.get_selected_items() if selected_surface.size() != 1: - #GameUI.creator_ui.material_creator_window.edit_material_for_mesh() + #GameUI.instance.creator_ui.material_creator_window.edit_material_for_mesh() return var data = _surfaces_item_list.get_item_metadata(selected_surface[0]) # data contains [MeshInstance, surface_id, SpaceObject] - GameUI.creator_ui.material_creator_window.edit_material_for_mesh(data[2], data[0], data[1]) + GameUI.instance.creator_ui.material_creator_window.edit_material_for_mesh(data[2], data[0], data[1]) func _on_surface_picked(data) -> void: diff --git a/mirror-godot-app/creator/selection/inspector/nodes/inspector_extra_node.gd b/mirror-godot-app/creator/selection/inspector/nodes/inspector_extra_node.gd index 36e67298..327a695a 100644 --- a/mirror-godot-app/creator/selection/inspector/nodes/inspector_extra_node.gd +++ b/mirror-godot-app/creator/selection/inspector/nodes/inspector_extra_node.gd @@ -131,17 +131,17 @@ func _process_physics_shape_outlines() -> void: var shape_size: Vector3 = _get_shape_size_vector_from_ext() var shape_transform: Transform3D = target_node.scaled_model.global_transform.scaled_local(shape_size) if shape_type == "box": - GameUI.object_outlines.draw_wireframe_box_transform(shape_transform, _OUTLINE_COLOR) + GameUI.instance.object_outlines.draw_wireframe_box_transform(shape_transform, _OUTLINE_COLOR) elif shape_type == "sphere": - GameUI.object_outlines.draw_wireframe_sphere(shape_transform, _OUTLINE_COLOR) + GameUI.instance.object_outlines.draw_wireframe_sphere(shape_transform, _OUTLINE_COLOR) else: shape_transform = shape_transform.scaled_local(Vector3(1.0, shape_size.x / shape_size.y, 1.0)) if shape_type == "capsule": var half_mid_height: float = (shape_size.y - shape_size.x) * 0.5 - GameUI.object_outlines.draw_wireframe_capsule(shape_transform, half_mid_height, _OUTLINE_COLOR) + GameUI.instance.object_outlines.draw_wireframe_capsule(shape_transform, half_mid_height, _OUTLINE_COLOR) if shape_type == "cylinder": var half_height: float = shape_size.y * 0.5 - GameUI.object_outlines.draw_wireframe_cylinder(shape_transform, half_height, _OUTLINE_COLOR) + GameUI.instance.object_outlines.draw_wireframe_cylinder(shape_transform, half_height, _OUTLINE_COLOR) func _refresh_already_setup_inspectors() -> void: diff --git a/mirror-godot-app/creator/selection/inspector/nodes/model_scene_tree.gd b/mirror-godot-app/creator/selection/inspector/nodes/model_scene_tree.gd index 62a2542c..5e918e84 100644 --- a/mirror-godot-app/creator/selection/inspector/nodes/model_scene_tree.gd +++ b/mirror-godot-app/creator/selection/inspector/nodes/model_scene_tree.gd @@ -15,7 +15,7 @@ func _gui_input(input_event: InputEvent) -> void: return tree_item.select(0) selected_node_name = tree_item.get_text(0) - GameUI.creator_ui.open_context_menu(self) + GameUI.instance.creator_ui.open_context_menu(self) else: super(input_event) diff --git a/mirror-godot-app/creator/selection/inspector/nodes/visual_editor/seat/seat_editor.gd b/mirror-godot-app/creator/selection/inspector/nodes/visual_editor/seat/seat_editor.gd index a7c364bb..01d1b316 100644 --- a/mirror-godot-app/creator/selection/inspector/nodes/visual_editor/seat/seat_editor.gd +++ b/mirror-godot-app/creator/selection/inspector/nodes/visual_editor/seat/seat_editor.gd @@ -58,7 +58,7 @@ func _draw_lines() -> void: _last_knee_position, _last_foot_position, ] - var mi: MeshInstance3D = GameUI.object_outlines.draw_lines(lines, Color.SADDLE_BROWN) + var mi: MeshInstance3D = GameUI.instance.object_outlines.draw_lines(lines, Color.SADDLE_BROWN) mi.transform = global_transform diff --git a/mirror-godot-app/creator/selection/inspector/primitive/inspector_deletable_base.gd b/mirror-godot-app/creator/selection/inspector/primitive/inspector_deletable_base.gd index 4f623b6f..984d3f5d 100644 --- a/mirror-godot-app/creator/selection/inspector/primitive/inspector_deletable_base.gd +++ b/mirror-godot-app/creator/selection/inspector/primitive/inspector_deletable_base.gd @@ -20,8 +20,8 @@ func cleanup_and_delete() -> void: func _on_hoverable_inspector_item_mouse_entered() -> void: if hover_tooltip_text == "": return - GameUI.set_hover_tooltip_text(hover_tooltip_text) + GameUI.instance.set_hover_tooltip_text(hover_tooltip_text) func _on_hoverable_inspector_item_mouse_exited() -> void: - GameUI.hide_hover_tooltip_text() + GameUI.instance.hide_hover_tooltip_text() diff --git a/mirror-godot-app/creator/selection/inspector/primitive/inspector_line_edit_field.gd b/mirror-godot-app/creator/selection/inspector/primitive/inspector_line_edit_field.gd index 9b7981bb..e3b1f29a 100644 --- a/mirror-godot-app/creator/selection/inspector/primitive/inspector_line_edit_field.gd +++ b/mirror-godot-app/creator/selection/inspector/primitive/inspector_line_edit_field.gd @@ -41,11 +41,11 @@ func _on_focus_entered() -> void: await get_tree().process_frame # This is done declaratively by LineEdit.select_all_on_focus = true # _line_edit_node.select_all() - GameUI.grab_input_lock(self) + GameUI.instance.grab_input_lock(self) func _on_focus_exited() -> void: - GameUI.release_input_lock(self) + GameUI.instance.release_input_lock(self) func _on_reset_button_pressed() -> void: diff --git a/mirror-godot-app/creator/selection/inspector/primitive/inspector_local_texture.gd b/mirror-godot-app/creator/selection/inspector/primitive/inspector_local_texture.gd index a2b1954b..4ea3a557 100644 --- a/mirror-godot-app/creator/selection/inspector/primitive/inspector_local_texture.gd +++ b/mirror-godot-app/creator/selection/inspector/primitive/inspector_local_texture.gd @@ -122,7 +122,7 @@ func _on_file_dialog_file_selected(path): func _upload_as_texture(path: String, param: String) -> void: _loading_spinner.show() - var promise: Promise = await GameUI.creator_ui.asset_browser.create_asset_from_url( + var promise: Promise = await GameUI.instance.creator_ui.asset_browser.create_asset_from_url( path, Enums.ASSET_TYPE.TEXTURE, {"textureImagePropertyAppliesTo": param} diff --git a/mirror-godot-app/creator/selection/inspector/primitive/inspector_material.gd b/mirror-godot-app/creator/selection/inspector/primitive/inspector_material.gd index 9ff8922b..5e75a61e 100644 --- a/mirror-godot-app/creator/selection/inspector/primitive/inspector_material.gd +++ b/mirror-godot-app/creator/selection/inspector/primitive/inspector_material.gd @@ -88,7 +88,7 @@ func _on_reset_button_pressed() -> void: func _on_material_selected(): - var selected_slot = GameUI.creator_ui.material_window.material_browser.get_selected_slot() + var selected_slot = GameUI.instance.creator_ui.material_window.material_browser.get_selected_slot() if selected_slot: var is_instance = selected_slot is MaterialInstanceSlot var material_type = Enums.MATERIAL_TYPE.INSTANCE if is_instance else Enums.MATERIAL_TYPE.ASSET @@ -97,8 +97,8 @@ func _on_material_selected(): func _on_button_pressed(): - GameUI.creator_ui.material_window.popup_centered() - GameUI.creator_ui.material_window.material_browser.selected_material_slot_changed.connect(_on_material_selected) + GameUI.instance.creator_ui.material_window.popup_centered() + GameUI.instance.creator_ui.material_window.material_browser.selected_material_slot_changed.connect(_on_material_selected) func _clear() -> void: diff --git a/mirror-godot-app/creator/selection/inspector/primitive/inspector_number_field.gd b/mirror-godot-app/creator/selection/inspector/primitive/inspector_number_field.gd index 0ae3255b..88486bc1 100644 --- a/mirror-godot-app/creator/selection/inspector/primitive/inspector_number_field.gd +++ b/mirror-godot-app/creator/selection/inspector/primitive/inspector_number_field.gd @@ -72,7 +72,7 @@ func _on_spin_box_text_changed(new_text: String) -> void: func _on_focus_entered() -> void: _spin_box_node.value_changed.connect(_on_spin_box_value_changed, CONNECT_ONE_SHOT) - GameUI.grab_input_lock(self) + GameUI.instance.grab_input_lock(self) await get_tree().process_frame _line_edit_node.select_all() @@ -80,7 +80,7 @@ func _on_focus_entered() -> void: func _on_focus_exited(): assert(not is_queued_for_deletion()) refresh_full() - GameUI.release_input_lock(self) + GameUI.instance.release_input_lock(self) func _on_reset_button_pressed() -> void: diff --git a/mirror-godot-app/creator/selection/inspector/primitive/inspector_number_slider.gd b/mirror-godot-app/creator/selection/inspector/primitive/inspector_number_slider.gd index 2d9e8ec8..2a97b79d 100644 --- a/mirror-godot-app/creator/selection/inspector/primitive/inspector_number_slider.gd +++ b/mirror-godot-app/creator/selection/inspector/primitive/inspector_number_slider.gd @@ -88,12 +88,12 @@ func set_enabled(in_is_enabled: bool): func _on_focus_entered(): - GameUI.grab_input_lock(self) + GameUI.instance.grab_input_lock(self) func _on_focus_exited(): refresh() - GameUI.release_input_lock(self) + GameUI.instance.release_input_lock(self) func _on_reset_button_pressed() -> void: diff --git a/mirror-godot-app/creator/selection/inspector/primitive/inspector_submittable_base.gd b/mirror-godot-app/creator/selection/inspector/primitive/inspector_submittable_base.gd index 5ae2748b..58509553 100644 --- a/mirror-godot-app/creator/selection/inspector/primitive/inspector_submittable_base.gd +++ b/mirror-godot-app/creator/selection/inspector/primitive/inspector_submittable_base.gd @@ -6,14 +6,14 @@ signal value_submitted() func emit_value_submitted(_new_text = null) -> void: - GameUI.release_input_lock(self) + GameUI.instance.release_input_lock(self) value_submitted.emit() func _on_focus_entered() -> void: - GameUI.grab_input_lock(self) + GameUI.instance.grab_input_lock(self) func _on_focus_exited() -> void: if not get_viewport() is AcceptDialog: - GameUI.release_input_lock(self) + GameUI.instance.release_input_lock(self) diff --git a/mirror-godot-app/creator/selection/inspector/primitive/inspector_vector_number.gd b/mirror-godot-app/creator/selection/inspector/primitive/inspector_vector_number.gd index fbe204d8..1956a4fb 100644 --- a/mirror-godot-app/creator/selection/inspector/primitive/inspector_vector_number.gd +++ b/mirror-godot-app/creator/selection/inspector/primitive/inspector_vector_number.gd @@ -78,14 +78,14 @@ func _on_spin_box_text_changed(new_text: String) -> void: func _on_key_focus_entered() -> void: if not _spin_box_node.value_changed.is_connected(_on_spin_box_value_changed): _spin_box_node.value_changed.connect(_on_spin_box_value_changed, CONNECT_ONE_SHOT) - GameUI.grab_input_lock(self) + GameUI.instance.grab_input_lock(self) await get_tree().process_frame _line_edit_node.select_all() func _on_focus_exited(): refresh_full() - GameUI.release_input_lock(self) + GameUI.instance.release_input_lock(self) func _on_gui_input(event: InputEvent): @@ -103,7 +103,7 @@ func _on_gui_input(event: InputEvent): else: if _grabbing_spinner_attempt: if _grabbing_spinner: - GameUI.creator_ui.ui_request_captured = false + GameUI.instance.creator_ui.ui_request_captured = false # This is needed to avoid process frame issues race conditions # free_camera.gd will try to handle CAPTURED before input # handlin of mouse_capture.gd @@ -124,7 +124,7 @@ func _on_gui_input(event: InputEvent): diff_x *= 0.1 _grabbing_spinner_dist_cache += diff_x if not _grabbing_spinner and absf(_grabbing_spinner_dist_cache) > 4 * GameplaySettings.ui_scale: - GameUI.creator_ui.ui_request_captured = true + GameUI.instance.creator_ui.ui_request_captured = true _grabbing_spinner = true if _grabbing_spinner: # Don't make the user scroll all the way back to 'in range' if they went off the end. diff --git a/mirror-godot-app/creator/selection/inspector/script/add_input_button.gd b/mirror-godot-app/creator/selection/inspector/script/add_input_button.gd index 5916f4ac..9dd1127a 100644 --- a/mirror-godot-app/creator/selection/inspector/script/add_input_button.gd +++ b/mirror-godot-app/creator/selection/inspector/script/add_input_button.gd @@ -10,7 +10,7 @@ signal create_parameter(parameter_port_array: Array) func _on_pressed() -> void: _variable_creation_menu.clear_fields() _add_input_dialog.popup_centered() - GameUI.grab_input_lock(self) + GameUI.instance.grab_input_lock(self) _variable_creation_menu.focus_variable_editor_name_field() @@ -24,8 +24,8 @@ func emit_create_parameter() -> void: func _on_add_input_dialog_focus_entered() -> void: - GameUI.grab_input_lock(self) + GameUI.instance.grab_input_lock(self) func _on_add_input_dialog_focus_exited() -> void: - GameUI.release_input_lock(self) + GameUI.instance.release_input_lock(self) diff --git a/mirror-godot-app/creator/selection/model/model_builder.gd b/mirror-godot-app/creator/selection/model/model_builder.gd index 3481e9ee..809a5c20 100644 --- a/mirror-godot-app/creator/selection/model/model_builder.gd +++ b/mirror-godot-app/creator/selection/model/model_builder.gd @@ -253,13 +253,13 @@ func _draw_outlines() -> void: match _state: State.EXTRUDE: _ghost_color = Color.BLUE_VIOLET - GameUI.object_outlines.draw_line(_end - _plane.normal * 100, _end + _plane.normal * 100, Color.RED) + GameUI.instance.object_outlines.draw_line(_end - _plane.normal * 100, _end + _plane.normal * 100, Color.RED) State.SLIDE: _ghost_color = Color.VIOLET - GameUI.object_outlines.draw_line(_end - _slide_axis * 100, _end + _slide_axis * 100, Color.RED) + GameUI.instance.object_outlines.draw_line(_end - _slide_axis * 100, _end + _slide_axis * 100, Color.RED) _: _ghost_color = Color.BLUE - GameUI.object_outlines.draw_wireframe_box_aabb(_bounds.grow(OUTLINE_MARGIN), _ghost_color) + GameUI.instance.object_outlines.draw_wireframe_box_aabb(_bounds.grow(OUTLINE_MARGIN), _ghost_color) func _draw_text() -> void: diff --git a/mirror-godot-app/creator/selection/model/model_tool.gd b/mirror-godot-app/creator/selection/model/model_tool.gd index c432c650..b8db1db3 100644 --- a/mirror-godot-app/creator/selection/model/model_tool.gd +++ b/mirror-godot-app/creator/selection/model/model_tool.gd @@ -44,7 +44,7 @@ func save_local_model() -> void: return var file_path_glb: String = current_model_root.save_to_gltf_file() # Upload as an asset. - var asset_browser: AssetBrowser = GameUI.creator_ui.asset_browser + var asset_browser: AssetBrowser = GameUI.instance.creator_ui.asset_browser var promise = await asset_browser.create_asset_from_url(file_path_glb) if promise.is_error(): print("Failed to save a local model: %s" % promise.get_error_message()) diff --git a/mirror-godot-app/creator/selection/scene_hierarchy/scene_hierarchy_tree.gd b/mirror-godot-app/creator/selection/scene_hierarchy/scene_hierarchy_tree.gd index a5591d15..15798a72 100644 --- a/mirror-godot-app/creator/selection/scene_hierarchy/scene_hierarchy_tree.gd +++ b/mirror-godot-app/creator/selection/scene_hierarchy/scene_hierarchy_tree.gd @@ -539,7 +539,7 @@ func _on_tree_script_instances_changed(tree_item: TreeItem) -> void: func _on_item_mouse_selected(_position: Vector2, mouse_button: int) -> void: if mouse_button == MOUSE_BUTTON_RIGHT and not Input.is_action_pressed(&"object_multi_select"): var node = _get_instance_node_from_tree_item(get_next_selected(null)) - GameUI.creator_ui.open_context_menu(node) + GameUI.instance.creator_ui.open_context_menu(node) func _on_tree_item_selected(ui_only_tree_item: TreeItem, _selected_column: int, ui_only_is_selected: bool) -> void: diff --git a/mirror-godot-app/creator/selection/selection_outlines.gd b/mirror-godot-app/creator/selection/selection_outlines.gd index 4b01b58f..87837bf1 100644 --- a/mirror-godot-app/creator/selection/selection_outlines.gd +++ b/mirror-godot-app/creator/selection/selection_outlines.gd @@ -22,7 +22,7 @@ func _can_draw_outlines() -> bool: or _creator_ui.is_edit_mode(Enums.EDIT_MODE.Terrain) or _creator_ui.is_edit_mode(Enums.EDIT_MODE.Model) or PlayerData.game_mode.get_current_mode() == GameMode.Mode.NORMAL and not _creator_ui.object_creation.is_browser_expanded - or GameUI.creator_ui.ui_request_captured + or GameUI.instance.creator_ui.ui_request_captured ) @@ -31,12 +31,12 @@ func _process(_delta) -> void: set_process(false) return _draw_remote_selection_outlines() - if not _can_draw_outlines() or GameUI.is_cinematic_mode_enabled(): + if not _can_draw_outlines() or GameUI.instance.is_cinematic_mode_enabled(): return _draw_highlight_outlines() _draw_selection_outlines() # TODO Make hightlight only be shown when we are hovering the world instead of UI: -# if not GameUI.is_mouse_hovering_ui(): +# if not GameUI.instance.is_mouse_hovering_ui(): func _draw_selection_outlines() -> void: @@ -49,7 +49,7 @@ func _draw_selection_outlines() -> void: var color: Color = selection_color if selected_node is SpaceObject and selected_node.locked: color = Color.ORANGE - GameUI.object_outlines.draw_wireframe_box_object(selected_node, color) + GameUI.instance.object_outlines.draw_wireframe_box_object(selected_node, color) func _draw_remote_selection_outlines() -> void: @@ -60,7 +60,7 @@ func _draw_remote_selection_outlines() -> void: if not is_instance_valid(remotely_selected_node) or selected_nodes.has(remotely_selected_node) or remotely_selected_node.selected_by_peers.has(get_tree().get_multiplayer().get_unique_id()): # This is a locally selected node as well; so nothing to do. continue - GameUI.object_outlines.draw_wireframe_box_object(remotely_selected_node, remote_selection_color) + GameUI.instance.object_outlines.draw_wireframe_box_object(remotely_selected_node, remote_selection_color) func _draw_highlight_outlines() -> void: @@ -84,6 +84,6 @@ func _draw_highlight_outlines() -> void: var color: Color = highlight_color if object.locked: color = locked_color - GameUI.object_outlines.draw_wireframe_box_object(object, color) + GameUI.instance.object_outlines.draw_wireframe_box_object(object, color) elif object is ModelPrimitive: - GameUI.object_outlines.draw_wireframe_box_object(object, highlight_color) + GameUI.instance.object_outlines.draw_wireframe_box_object(object, highlight_color) diff --git a/mirror-godot-app/creator/tools/build_bar/build_bar.gd b/mirror-godot-app/creator/tools/build_bar/build_bar.gd index 4ed2c170..90a2a7a4 100644 --- a/mirror-godot-app/creator/tools/build_bar/build_bar.gd +++ b/mirror-godot-app/creator/tools/build_bar/build_bar.gd @@ -74,7 +74,7 @@ func _on_server_joined(): func _on_user_present_filter_menu_item_selected(_title, metadata): if metadata is Player: - GameUI.creator_ui.open_context_menu(metadata) + GameUI.instance.creator_ui.open_context_menu(metadata) func _on_game_mode_changed(new_mode: GameMode.Mode, _previous_mode: GameMode.Mode) -> void: @@ -133,7 +133,7 @@ func _on_primitive_model_builder_pressed() -> void: func _on_help_pressed() -> void: - GameUI.user_tutorial.show_tutorial_type(UserTutorial.Tutorial_Type.SPACE) + GameUI.instance.user_tutorial.show_tutorial_type(UserTutorial.Tutorial_Type.SPACE) func _on_teleport_pressed() -> void: @@ -215,7 +215,7 @@ func _on_save_space_pressed(): var gltf_doc = GLTFDocument.new() var gltf_state = GLTFState.new() var objects = Zone.instance_manager.get_all_instances() - var object_filtered := objects.filter(func(object): + var object_filtered = objects.filter(func(object): return object is SpaceObject and object.asset_type == Enums.ASSET_TYPE.MESH ) var err = OK diff --git a/mirror-godot-app/creator/tools/material_browser/material_window.gd b/mirror-godot-app/creator/tools/material_browser/material_window.gd index 99747539..9dd571d3 100644 --- a/mirror-godot-app/creator/tools/material_browser/material_window.gd +++ b/mirror-godot-app/creator/tools/material_browser/material_window.gd @@ -10,9 +10,9 @@ func _ready() -> void: func _on_visibility_changed() -> void: if self.visible: - GameUI.add_visible_window(self) + GameUI.instance.add_visible_window(self) else: - GameUI.remove_visible_window(self) + GameUI.instance.remove_visible_window(self) func sub_windows_visible(node: Node) -> bool: diff --git a/mirror-godot-app/creator/tools/material_creator/material_creator_window.gd b/mirror-godot-app/creator/tools/material_creator/material_creator_window.gd index 10e866ed..838193f0 100644 --- a/mirror-godot-app/creator/tools/material_creator/material_creator_window.gd +++ b/mirror-godot-app/creator/tools/material_creator/material_creator_window.gd @@ -10,9 +10,9 @@ func _ready() -> void: func _on_visibility_changed() -> void: if self.visible: - GameUI.add_visible_window(self) + GameUI.instance.add_visible_window(self) else: - GameUI.remove_visible_window(self) + GameUI.instance.remove_visible_window(self) func _sub_windows_visible(node: Node) -> bool: diff --git a/mirror-godot-app/creator/tools/material_creator/shader_code_editor.gd b/mirror-godot-app/creator/tools/material_creator/shader_code_editor.gd index e750edfc..082d757e 100644 --- a/mirror-godot-app/creator/tools/material_creator/shader_code_editor.gd +++ b/mirror-godot-app/creator/tools/material_creator/shader_code_editor.gd @@ -77,11 +77,11 @@ func _ready() -> void: func _on_focus_entered() -> void: - GameUI.grab_input_lock(self) + GameUI.instance.grab_input_lock(self) func _on_focus_exited() -> void: - GameUI.release_input_lock(false) + GameUI.instance.release_input_lock(false) func _on_visibility_changed() -> void: diff --git a/mirror-godot-app/creator/tools/normal/normal_mode_hotkeys.gd b/mirror-godot-app/creator/tools/normal/normal_mode_hotkeys.gd index 3362c650..86ed5d97 100644 --- a/mirror-godot-app/creator/tools/normal/normal_mode_hotkeys.gd +++ b/mirror-godot-app/creator/tools/normal/normal_mode_hotkeys.gd @@ -17,8 +17,8 @@ func _ready() -> void: func set_build_mode_ui_hint_state(state: bool) -> void: - var scoreboard_shortcut_enabled: bool = GameUI.scoreboard_window.is_scoreboard_shortcut_enabled() - var team_shortcut_enabled: bool = GameUI.teams_handler.is_teams_shortcut_enabled() + var scoreboard_shortcut_enabled: bool = GameUI.instance.scoreboard_window.is_scoreboard_shortcut_enabled() + var team_shortcut_enabled: bool = GameUI.instance.teams_handler.is_teams_shortcut_enabled() var build_shortcuts_enabled: bool = ProjectSettings.get_setting("feature_flags/enable_build_shortcuts", true) $TeamSelection.visible = team_shortcut_enabled $Scoreboard.visible = scoreboard_shortcut_enabled diff --git a/mirror-godot-app/creator/tools/statistics/statistics.gd b/mirror-godot-app/creator/tools/statistics/statistics.gd index f7912b64..bb98cac3 100644 --- a/mirror-godot-app/creator/tools/statistics/statistics.gd +++ b/mirror-godot-app/creator/tools/statistics/statistics.gd @@ -59,8 +59,8 @@ func _large_integer_to_friendly_string(number: int) -> String: func _on_hoverable_button_mouse_entered() -> void: if hover_tooltip_text == "": return - GameUI.set_hover_tooltip_text(hover_tooltip_text) + GameUI.instance.set_hover_tooltip_text(hover_tooltip_text) func _on_hoverable_button_mouse_exited() -> void: - GameUI.hide_hover_tooltip_text() + GameUI.instance.hide_hover_tooltip_text() diff --git a/mirror-godot-app/creator/tools/tool_options/map_options/map_options.gd b/mirror-godot-app/creator/tools/tool_options/map_options/map_options.gd index 0499193a..2447b7fd 100644 --- a/mirror-godot-app/creator/tools/tool_options/map_options/map_options.gd +++ b/mirror-godot-app/creator/tools/tool_options/map_options/map_options.gd @@ -256,13 +256,13 @@ func _on_object_selection_changed(selected_nodes: Array[Node]) -> void: Util.safe_signal_connect(map.map_loaded, _populate_panel_data) _no_map_selected.visible = false _tab_container.visible = true - if not GameUI.creator_ui.is_edit_mode(Enums.EDIT_MODE.Map): + if not GameUI.instance.creator_ui.is_edit_mode(Enums.EDIT_MODE.Map): emit_map_mode_toggle() return _no_map_selected.visible = true _tab_container.visible = false # This will exit map edit mode - if GameUI.creator_ui.is_edit_mode(Enums.EDIT_MODE.Map): + if GameUI.instance.creator_ui.is_edit_mode(Enums.EDIT_MODE.Map): emit_map_mode_toggle() _enable_panels(false, false) diff --git a/mirror-godot-app/creator/tools/toolbar_gizmo_options.gd b/mirror-godot-app/creator/tools/toolbar_gizmo_options.gd index 134a1ff0..8c57f20b 100644 --- a/mirror-godot-app/creator/tools/toolbar_gizmo_options.gd +++ b/mirror-godot-app/creator/tools/toolbar_gizmo_options.gd @@ -107,8 +107,8 @@ func _on_scale_button_pressed() -> void: func _on_snap_amount_focus_entered(): - GameUI.grab_input_lock(self) + GameUI.instance.grab_input_lock(self) func _on_snap_amount_focus_exited(): - GameUI.release_input_lock(self) + GameUI.instance.release_input_lock(self) diff --git a/mirror-godot-app/player/cameras/camera_manager.gd b/mirror-godot-app/player/cameras/camera_manager.gd index 55f68cf5..96edd348 100644 --- a/mirror-godot-app/player/cameras/camera_manager.gd +++ b/mirror-godot-app/player/cameras/camera_manager.gd @@ -32,7 +32,7 @@ func _process(delta: float) -> void: func enable_for_player(player: TMCharacter3D): - var gizmo: Gizmo = GameUI.get_node(^"CreatorUI/ObjectSelection/Gizmo") + var gizmo: Gizmo = GameUI.instance.get_node(^"CreatorUI/ObjectSelection/Gizmo") _player_head_camera_holder.setup(player, self, gizmo) _free_camera_holder.setup(player, self, gizmo) _placement_preview.setup(self) @@ -153,8 +153,8 @@ func _unhandled_input(input_event: InputEvent) -> void: var dict = get_camera_raycast_dict() if not dict.has("collider") or not dict.has("position"): return - GameUI.creator_ui.open_context_menu(dict.collider, dict.position) - if GameUI.is_mouse_needed_for_ui(): + GameUI.instance.creator_ui.open_context_menu(dict.collider, dict.position) + if GameUI.instance.is_mouse_needed_for_ui(): if input_event.is_action_pressed("primary_action"): # Works to release focus from all SpinBox and text boxes _main_viewport.gui_release_focus() diff --git a/mirror-godot-app/player/cameras/camera_nodes/asset_placement_base.gd b/mirror-godot-app/player/cameras/camera_nodes/asset_placement_base.gd index 7cddfb45..b3946adc 100644 --- a/mirror-godot-app/player/cameras/camera_nodes/asset_placement_base.gd +++ b/mirror-godot-app/player/cameras/camera_nodes/asset_placement_base.gd @@ -32,8 +32,8 @@ func handle_asset_placement_input(input_event: InputEvent) -> void: if interact_raycast_layer(input_event, ["GIZMO"]): return if ( - not GameUI.creator_ui.is_edit_mode(Enums.EDIT_MODE.Asset) - and not GameUI.creator_ui.is_edit_mode(Enums.EDIT_MODE.Map) + not GameUI.instance.creator_ui.is_edit_mode(Enums.EDIT_MODE.Asset) + and not GameUI.instance.creator_ui.is_edit_mode(Enums.EDIT_MODE.Map) ): return select_object() @@ -47,18 +47,18 @@ func select_object() -> void: var multi_select_pressed = Input.is_action_pressed(&"object_multi_select") if not is_instance_valid(object): if not multi_select_pressed: - GameUI.creator_ui.clear_selection() + GameUI.instance.creator_ui.clear_selection() return if object is ModelPrimitive: - GameUI.creator_ui.raycast_hit_object(object) + GameUI.instance.creator_ui.raycast_hit_object(object) return var space_object = Util.get_space_object(object) if space_object: if space_object.asset_type == Enums.ASSET_TYPE.MAP or space_object.locked: if not multi_select_pressed: - GameUI.creator_ui.clear_selection() + GameUI.instance.creator_ui.clear_selection() return - GameUI.creator_ui.raycast_hit_object(space_object) + GameUI.instance.creator_ui.raycast_hit_object(space_object) ## Places the currently selected asset in the world. @@ -93,7 +93,7 @@ func get_placement_transform_or_null(): # -> Transform3D? if abs(target.dot(back)) > 0.99: # Edge case handling: Don't allow these vectors to be colinear. back = global_transform.basis.y - if GameUI.creator_ui.is_gizmo_type(Enums.GIZMO_TYPE.GRAB): + if GameUI.instance.creator_ui.is_gizmo_type(Enums.GIZMO_TYPE.GRAB): placement_transform.basis = _basis_looking_at_y(target, back) # Calculate the position. If Gizmo snap is enabled, snap to the snap step. placement_transform = placement_transform.translated_local(_camera_manager.placement_offset) diff --git a/mirror-godot-app/player/cameras/camera_nodes/asset_placement_build_mode.gd b/mirror-godot-app/player/cameras/camera_nodes/asset_placement_build_mode.gd index ae3f2d55..43265c14 100644 --- a/mirror-godot-app/player/cameras/camera_nodes/asset_placement_build_mode.gd +++ b/mirror-godot-app/player/cameras/camera_nodes/asset_placement_build_mode.gd @@ -36,7 +36,7 @@ func handle_asset_placement_input(input_event: InputEvent) -> void: var zoom_in = input_event.is_action_pressed(&"build_mode_camera_zoom_in") if zoom_in or input_event.is_action_pressed(&"build_mode_camera_zoom_out"): if input_event is InputEventMouseButton: - if not GameUI.creator_ui.get_safe_area().has_point(input_event.position): + if not GameUI.instance.creator_ui.get_safe_area().has_point(input_event.position): return if zoom_in: target_zoom /= ZOOM_TARGET_MULTIPLIER diff --git a/mirror-godot-app/player/cameras/free/camera_speed_ui.gd b/mirror-godot-app/player/cameras/free/camera_speed_ui.gd index c1adf8a6..7ef2603d 100644 --- a/mirror-godot-app/player/cameras/free/camera_speed_ui.gd +++ b/mirror-godot-app/player/cameras/free/camera_speed_ui.gd @@ -5,8 +5,8 @@ extends Label func _process(delta: float) -> void: - visible = not GameUI.is_cinematic_mode_enabled() - var safe_area: Rect2 = GameUI.get_safe_area() + visible = not GameUI.instance.is_cinematic_mode_enabled() + var safe_area: Rect2 = GameUI.instance.get_safe_area() position = safe_area.position + Vector2(20.0, safe_area.size.y - 60.0) modulate.a -= delta * 0.5 if modulate.a < 0.0: diff --git a/mirror-godot-app/player/cameras/free/free_camera.gd b/mirror-godot-app/player/cameras/free/free_camera.gd index 98d8153c..7bebf0de 100644 --- a/mirror-godot-app/player/cameras/free/free_camera.gd +++ b/mirror-godot-app/player/cameras/free/free_camera.gd @@ -78,7 +78,7 @@ func update(delta): func process_movement(delta): - if GameUI.is_keyboard_needed_for_ui() or (not Input.is_action_pressed(&"build_mode_camera_orbit") and not GameUI.is_cinematic_mode_enabled()): + if GameUI.instance.is_keyboard_needed_for_ui() or (not Input.is_action_pressed(&"build_mode_camera_orbit") and not GameUI.instance.is_cinematic_mode_enabled()): return var desired_movement_speed = _free_movement_speed if Input.is_action_pressed(&"player_sprint"): @@ -123,6 +123,6 @@ func _adjust_scroll_speed(zoom_in: bool) -> void: func _add_stationary_zoom(value: float) -> void: - if Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED or not GameUI.drag_detector.hovering_game_view: + if Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED or not GameUI.instance.drag_detector.hovering_game_view: return position += transform.basis.z * value diff --git a/mirror-godot-app/player/cameras/head/player_head_camera.gd b/mirror-godot-app/player/cameras/head/player_head_camera.gd index df2271aa..b66a1fb1 100644 --- a/mirror-godot-app/player/cameras/head/player_head_camera.gd +++ b/mirror-godot-app/player/cameras/head/player_head_camera.gd @@ -121,7 +121,7 @@ func _set_camera_based_on_perspective() -> void: func _refresh_camera() -> void: - if not GameUI.creator_ui.is_game_mode(GameMode.Mode.NORMAL) and not Zone.is_in_play_mode(): + if not GameUI.instance.creator_ui.is_game_mode(GameMode.Mode.NORMAL) and not Zone.is_in_play_mode(): return if _perspective_locked: _set_camera_based_on_perspective() diff --git a/mirror-godot-app/player/controller/input_controller.gd b/mirror-godot-app/player/controller/input_controller.gd index c0c0a371..fa2d25c4 100644 --- a/mirror-godot-app/player/controller/input_controller.gd +++ b/mirror-godot-app/player/controller/input_controller.gd @@ -37,14 +37,14 @@ func _process(delta: float) -> void: func _notification(what: int) -> void: if what == MainLoop.NOTIFICATION_APPLICATION_FOCUS_IN: - if GameUI.creator_ui.is_game_mode(GameMode.Mode.NORMAL) or Zone.is_in_play_mode(): + if GameUI.instance.creator_ui.is_game_mode(GameMode.Mode.NORMAL) or Zone.is_in_play_mode(): does_game_mode_accept_input = true elif what == MainLoop.NOTIFICATION_APPLICATION_FOCUS_OUT: does_game_mode_accept_input = false func is_avatar_input_enabled() -> bool: - if GameUI.is_keyboard_needed_for_ui() or GameUI.is_mouse_needed_for_ui(): + if GameUI.instance.is_keyboard_needed_for_ui() or GameUI.instance.is_mouse_needed_for_ui(): return false return is_player_input_allowed and does_game_mode_accept_input diff --git a/mirror-godot-app/player/controller/mouse_capture.gd b/mirror-godot-app/player/controller/mouse_capture.gd index 402dc327..215c6a15 100644 --- a/mirror-godot-app/player/controller/mouse_capture.gd +++ b/mirror-godot-app/player/controller/mouse_capture.gd @@ -31,7 +31,7 @@ func _notification(what): func _process(_delta: float) -> void: var was_mouse_captured_last_frame: bool = (Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED) - var is_mouse_needed_by_ui: bool = GameUI.is_mouse_needed_for_ui() + var is_mouse_needed_by_ui: bool = GameUI.instance.is_mouse_needed_for_ui() var new_mouse_mode: Input.MouseMode = Input.MOUSE_MODE_VISIBLE if not is_mouse_needed_by_ui: if is_app_focused: diff --git a/mirror-godot-app/player/equipable/equipable_controller.gd b/mirror-godot-app/player/equipable/equipable_controller.gd index 69b3d9f6..d8206f9e 100644 --- a/mirror-godot-app/player/equipable/equipable_controller.gd +++ b/mirror-godot-app/player/equipable/equipable_controller.gd @@ -18,7 +18,7 @@ func setup(player_owner: Player) -> void: player = player_owner if not Zone.is_host() and player.is_local_player(): player.get_equipable_view_model().setup(self) - GameUI.hotbar.hotbar_asset_selected.connect(set_selected_equipable_asset_id) + GameUI.instance.hotbar.hotbar_asset_selected.connect(set_selected_equipable_asset_id) player.get_equipable_world_model().setup(self) Zone.social_manager.player_connected.connect(_on_player_connected) @@ -31,7 +31,7 @@ func _on_player_connected(_spawned_player: Player) -> void: func _process(_delta: float) -> void: var is_in_free_cam_mode = ( Zone.is_in_edit_mode() and - not GameUI.creator_ui.is_game_mode(GameMode.Mode.NORMAL) + not GameUI.instance.creator_ui.is_game_mode(GameMode.Mode.NORMAL) ) # TODO MAYBE Simplify that huge if guard, @@ -45,7 +45,7 @@ func _process(_delta: float) -> void: or is_in_free_cam_mode or player.is_dead() # Not in main_menu or other - or GameUI.is_mouse_needed_for_ui() + or GameUI.instance.is_mouse_needed_for_ui() ): return if Input.is_action_pressed(&"primary_action"): diff --git a/mirror-godot-app/player/equipable/equipable_view_model.gd b/mirror-godot-app/player/equipable/equipable_view_model.gd index c575ad83..831c4f71 100644 --- a/mirror-godot-app/player/equipable/equipable_view_model.gd +++ b/mirror-godot-app/player/equipable/equipable_view_model.gd @@ -25,7 +25,7 @@ func _process(delta) -> void: var target_transform := Transform3D.IDENTITY var player_velocity: Vector3 = _player.get_local_movement_velocity() var mouse_sway: Vector2 = _player.get_intended_camera_rotation_change() - if _equipable_controller.is_current_equipable_aiming() and not GameUI.is_mouse_needed_for_ui(): + if _equipable_controller.is_current_equipable_aiming() and not GameUI.instance.is_mouse_needed_for_ui(): target_transform.origin = Vector3(-0.025, 0.02, 0.0) target_transform.origin += Vector3(mouse_sway.y, mouse_sway.x, 0.0) * _sway_amplitude target_transform.basis *= Basis.from_euler(Vector3(0.0, 0.0, (player_velocity.x * -0.3) + -mouse_sway.y)) diff --git a/mirror-godot-app/player/equipable/gun/firearm/firearm.gd b/mirror-godot-app/player/equipable/gun/firearm/firearm.gd index 50c3fee6..a56b9ceb 100644 --- a/mirror-godot-app/player/equipable/gun/firearm/firearm.gd +++ b/mirror-godot-app/player/equipable/gun/firearm/firearm.gd @@ -114,7 +114,7 @@ func shoot() -> void: hit_object.damage(bullet_damage, _equipable_controller.player.get_user_id()) if hit_object is Player: create_blood_particles(hit_object, hit_position) - GameUI.crosshair.show_hitmarker() + GameUI.instance.crosshair.show_hitmarker() return if hit_object.has_method("server_add_impulse_at_position"): if hit_object.is_dynamic(): diff --git a/mirror-godot-app/player/player.gd b/mirror-godot-app/player/player.gd index f3ca5441..c4ba1641 100644 --- a/mirror-godot-app/player/player.gd +++ b/mirror-godot-app/player/player.gd @@ -535,7 +535,7 @@ func _respawn_player_network(spawn_point_path: NodePath, spawn_transform: Transf if spawn_point_node: spawn_point_node.emit_signal("player_spawned_here", self) Zone.social_manager.player_spawned.emit(self) - GameUI.health_display.play_respawn_sound() + GameUI.instance.health_display.play_respawn_sound() func _calculate_spawn_transform(spawn_point_path: NodePath) -> Transform3D: @@ -655,7 +655,7 @@ func add_equipable(asset_id: String) -> void: if Zone.is_host(): add_equipable.rpc_id(_peer_id, asset_id) if not Zone.is_host() and is_local_player(): - GameUI.hotbar.add_equipable(asset_id) + GameUI.instance.hotbar.add_equipable(asset_id) @rpc("call_remote", "any_peer", "reliable") @@ -663,7 +663,7 @@ func clear_equipables() -> void: if Zone.is_host(): clear_equipables.rpc_id(_peer_id) elif is_local_player(): - GameUI.hotbar.clear_equipables() + GameUI.instance.hotbar.clear_equipables() @rpc("call_remote", "any_peer", "reliable") @@ -676,7 +676,7 @@ func load_equipables() -> void: if Zone.is_host(): load_equipables.rpc_id(_peer_id) if not Zone.is_host() and is_local_player(): - GameUI.hotbar.load_equipables() + GameUI.instance.hotbar.load_equipables() func refresh_player_scale() -> void: @@ -1017,11 +1017,11 @@ func draw_interaction_outline(target: Node3D) -> void: var transf: Transform3D = target.global_transform transf = transf.translated_local(aabb.position) transf.basis *= Basis.from_scale(aabb.size) - GameUI.object_outlines.draw_wireframe_box_transform(transf, _INTERACT_COLOR) + GameUI.instance.object_outlines.draw_wireframe_box_transform(transf, _INTERACT_COLOR) if GameplaySettings.show_floating_control_hints: var screen_pos: Vector2 = camera_unproject_position_to_screen( transf * Vector3(0.5, 0.5, 0.5)) - GameUI.floating_text.draw_text_at_screen_position("Interact (E)", screen_pos) + GameUI.instance.floating_text.draw_text_at_screen_position("Interact (E)", screen_pos) # TODO: make this network synced @@ -1124,14 +1124,14 @@ func _on_damage_handler_health_changed(_target_object: Node, new_health: float, return data_store.set_value("health", new_health) if new_health < old_health: - GameUI.health_display.show_damage_screen() + GameUI.instance.health_display.show_damage_screen() if Zone.has_player(event_origin): var killer: Player = Zone.get_player(event_origin) if killer != self: - GameUI.health_display.add_damage_indicator(killer.global_position) - GameUI.health_display.set_health(ceili(new_health)) + GameUI.instance.health_display.add_damage_indicator(killer.global_position) + GameUI.instance.health_display.set_health(ceili(new_health)) if new_health <= 0.0: - GameUI.health_display.play_death_sound() + GameUI.instance.health_display.play_death_sound() # Important: this is server-side only! @@ -1296,4 +1296,4 @@ func _on_player_model_avatar_changed() -> void: func create_emoji(emoji: String) -> void: social_ui.create_emoji(emoji) if not Zone.is_host() and is_local_player(): - GameUI.chat_ui.send_chat_message_server.rpc_id(Zone.SERVER_PEER_ID, emoji) + GameUI.instance.chat_ui.send_chat_message_server.rpc_id(Zone.SERVER_PEER_ID, emoji) diff --git a/mirror-godot-app/player/ui/social/social_ui.gd b/mirror-godot-app/player/ui/social/social_ui.gd index cf32aa9f..c073675a 100644 --- a/mirror-godot-app/player/ui/social/social_ui.gd +++ b/mirror-godot-app/player/ui/social/social_ui.gd @@ -18,7 +18,7 @@ func setup(player: Player) -> void: func _ready() -> void: - GameUI.chat_ui.chat_message_sent.connect(_on_chat_message_sent) + GameUI.instance.chat_ui.chat_message_sent.connect(_on_chat_message_sent) _use_large_text_size = ProjectSettings.get_setting("feature_flags/large_text_size", false) if _use_large_text_size: name_label.label_settings.font_size = _large_text_size diff --git a/mirror-godot-app/prefabs/autoload/gameplay_settings/gameplay_settings.gd b/mirror-godot-app/prefabs/autoload/gameplay_settings/gameplay_settings.gd index db62400a..72e43ac2 100644 --- a/mirror-godot-app/prefabs/autoload/gameplay_settings/gameplay_settings.gd +++ b/mirror-godot-app/prefabs/autoload/gameplay_settings/gameplay_settings.gd @@ -155,6 +155,7 @@ var render_profile := RenderProfile.new() func _ready() -> void: + await GameUI.ui_ready() _load_config_file() get_viewport().size_changed.connect(_window_size_changed) render_profile.load_viewport_settings() @@ -304,14 +305,14 @@ func _apply_show_framerate_enabled(is_show_framerate_enabled: bool): if show_framerate_enabled != is_show_framerate_enabled: show_framerate_enabled = is_show_framerate_enabled _save_config_file() - GameUI.fps_label.visible = show_framerate_enabled + GameUI.instance.fps_label.visible = show_framerate_enabled func _apply_crosshair_color(new_crosshair_color: Color) -> void: if crosshair_color != new_crosshair_color: crosshair_color = new_crosshair_color _save_config_file() - GameUI.crosshair.set_color(new_crosshair_color) + GameUI.instance.crosshair.set_color(new_crosshair_color) # Controls @@ -341,8 +342,8 @@ func _apply_menu_ambience_volume_db(new_ambience_volume: float): if Zone.is_host(): # Server does not play any audio. return - GameUI.menu_ambience.volume_db = menu_ambience_volume_db - 10.0 - GameUI.menu_ambience.check_update_stream() + GameUI.instance.menu_ambience.volume_db = menu_ambience_volume_db - 10.0 + GameUI.instance.menu_ambience.check_update_stream() func _apply_is_microphone_enabled(new_is_microphone_enabled: bool) -> void: diff --git a/mirror-godot-app/prefabs/space/voxel_ghost_preview/voxel_ghost_preview.gd b/mirror-godot-app/prefabs/space/voxel_ghost_preview/voxel_ghost_preview.gd index 5fe56f5b..69783865 100644 --- a/mirror-godot-app/prefabs/space/voxel_ghost_preview/voxel_ghost_preview.gd +++ b/mirror-godot-app/prefabs/space/voxel_ghost_preview/voxel_ghost_preview.gd @@ -7,7 +7,7 @@ extends Area3D func _ready(): - GameUI.creator_ui.terrain_tool.terrain_tool_settings_changed.connect(update_ghost_preview) + GameUI.instance.creator_ui.terrain_tool.terrain_tool_settings_changed.connect(update_ghost_preview) update_ghost_preview() @@ -24,7 +24,7 @@ func set_enabled(is_enabled: bool) -> void: func update_ghost_preview() -> void: - var terrain_tool = GameUI.creator_ui.terrain_tool + var terrain_tool = GameUI.instance.creator_ui.terrain_tool var tween = create_tween() tween.tween_property(self, "scale", (terrain_tool.brush_size + 0.1) * Vector3.ONE, 0.1) diff --git a/mirror-godot-app/prefabs/ui/undo_redo_system.gd b/mirror-godot-app/prefabs/ui/undo_redo_system.gd index 3cfa053f..f0ac0367 100644 --- a/mirror-godot-app/prefabs/ui/undo_redo_system.gd +++ b/mirror-godot-app/prefabs/ui/undo_redo_system.gd @@ -51,7 +51,7 @@ func _get_selected_space_objects(selection: Array) -> Array[SpaceObject]: func _unhandled_input(input_event: InputEvent) -> void: # Prevent undoing/redoing from the main_menu and other windows - if GameUI.is_any_full_screen_or_modal_ui_visible(): + if GameUI.instance.is_any_full_screen_or_modal_ui_visible(): return if input_event.is_action_pressed(&"ui_redo"): redo() diff --git a/mirror-godot-app/project.godot b/mirror-godot-app/project.godot index 26392bec..a0a3df23 100644 --- a/mirror-godot-app/project.godot +++ b/mirror-godot-app/project.godot @@ -96,6 +96,7 @@ driver/enable_input=true [autoload] +VRManager="*res://scripts/autoload/vr_manager.gd" Analytics="*res://scripts/autoload/analytics/analytics.gd" AnalyticsV2="*res://scripts/autoload/analytics/analytics_v2.gd" Zone="*res://prefabs/autoload/zone/zone.tscn" @@ -108,7 +109,6 @@ AutoUpdate="*res://scripts/autoload/auto_update.gd" Constants="*res://scripts/autoload/constants.gd" Debug="*res://scripts/debug/debug.gd" PlayerData="*res://scripts/autoload/player_data.gd" -GameUI="*res://ui/game/game_ui.tscn" Notify="*res://ui/notifications/notify.gd" GameplaySettings="*res://prefabs/autoload/gameplay_settings/gameplay_settings.gd" AnalyticsSession="*res://scripts/autoload/analytics/analytics_session.gd" @@ -117,7 +117,6 @@ AppState="*res://scripts/autoload/analytics/app_state.gd" GameplayTools="*res://prefabs/autoload/gameplay_tools/gameplay_tools.tscn" DebugGeometry="*res://addons/debug_geometry.gd" MirrorScriptServer="*res://script/mirror_script_server.gd" -VRManager="*res://scripts/autoload/vr_manager.gd" Util="*res://scripts/autoload/util_funcs.gd" [debug] diff --git a/mirror-godot-app/script/editor/entry_creation/entry_create_dialog.gd b/mirror-godot-app/script/editor/entry_creation/entry_create_dialog.gd index 3c78cc9c..8eebb093 100644 --- a/mirror-godot-app/script/editor/entry_creation/entry_create_dialog.gd +++ b/mirror-godot-app/script/editor/entry_creation/entry_create_dialog.gd @@ -14,7 +14,7 @@ func _ready() -> void: func populate_and_show(target_node: Node) -> void: title = "Create Script Entry" _entry_creation_menu.populate_selection_tree(target_node, false) - GameUI.grab_input_lock(self) + GameUI.instance.grab_input_lock(self) popup_centered() _entry_creation_menu.focus_search_bar() @@ -22,7 +22,7 @@ func populate_and_show(target_node: Node) -> void: func populate_and_show_for_custom(target_node: Node) -> void: _entry_creation_menu.populate_selection_tree(target_node, true) _show_custom_entry_menu() - GameUI.grab_input_lock(self) + GameUI.instance.grab_input_lock(self) _entry_creation_menu.focus_search_bar() diff --git a/mirror-godot-app/script/editor/entry_creation/parameter_add_button.gd b/mirror-godot-app/script/editor/entry_creation/parameter_add_button.gd index cb311d5b..0cbe95d3 100644 --- a/mirror-godot-app/script/editor/entry_creation/parameter_add_button.gd +++ b/mirror-godot-app/script/editor/entry_creation/parameter_add_button.gd @@ -19,7 +19,7 @@ func erase_type_from_option_button(data_type: int) -> void: func _on_pressed() -> void: - GameUI.grab_input_lock(self) + GameUI.instance.grab_input_lock(self) _parameter_creation_dialog.popup_centered() @@ -34,8 +34,8 @@ func _on_parameter_creation_dialog_confirmed() -> void: func _on_focus_entered(): - GameUI.grab_input_lock(self) + GameUI.instance.grab_input_lock(self) func _on_focus_exited(): - GameUI.release_input_lock(self) + GameUI.instance.release_input_lock(self) diff --git a/mirror-godot-app/script/editor/script_editor.gd b/mirror-godot-app/script/editor/script_editor.gd index bbf30ebf..022a8edc 100644 --- a/mirror-godot-app/script/editor/script_editor.gd +++ b/mirror-godot-app/script/editor/script_editor.gd @@ -249,11 +249,11 @@ func _on_request_save_script_as_asset(script_instance: ScriptInstance) -> void: func _on_dialog_focus_entered() -> void: - GameUI.grab_input_lock(self) + GameUI.instance.grab_input_lock(self) func _on_dialog_focus_exited() -> void: - GameUI.release_input_lock(self) + GameUI.instance.release_input_lock(self) func _on_request_track_recently_used_space_script(script_instance: ScriptInstance) -> void: diff --git a/mirror-godot-app/script/editor/usage/script_usage.gd b/mirror-godot-app/script/editor/usage/script_usage.gd index 4344e240..d2a62f91 100644 --- a/mirror-godot-app/script/editor/usage/script_usage.gd +++ b/mirror-godot-app/script/editor/usage/script_usage.gd @@ -27,7 +27,7 @@ func set_script_toolbar_editable(is_editable: bool) -> void: func _on_view_script_users_pressed() -> void: - GameUI.creator_ui.search_node_tree("script_id=" + _script_instance.script_id) + GameUI.instance.creator_ui.search_node_tree("script_id=" + _script_instance.script_id) func _on_clone_script_pressed() -> void: diff --git a/mirror-godot-app/script/editor/variable/variable_creation_dialog.gd b/mirror-godot-app/script/editor/variable/variable_creation_dialog.gd index d64ef7d1..885e500c 100644 --- a/mirror-godot-app/script/editor/variable/variable_creation_dialog.gd +++ b/mirror-godot-app/script/editor/variable/variable_creation_dialog.gd @@ -17,7 +17,7 @@ func open_creation_dialog(node_path: NodePath = ^""): title = tr("Create Variable on '%s'" % node_path) _variable_node_path = ^"" popup_centered() - GameUI.grab_input_lock(self) + GameUI.instance.grab_input_lock(self) func _on_confirmed() -> void: diff --git a/mirror-godot-app/script/editor/variable/variable_creation_menu.gd b/mirror-godot-app/script/editor/variable/variable_creation_menu.gd index 87a07ed6..bd7d8e33 100644 --- a/mirror-godot-app/script/editor/variable/variable_creation_menu.gd +++ b/mirror-godot-app/script/editor/variable/variable_creation_menu.gd @@ -78,4 +78,4 @@ func _on_data_type_selected(data_type_index: int) -> void: func _on_name_line_edit_focus_entered() -> void: - GameUI.grab_input_lock(self) + GameUI.instance.grab_input_lock(self) diff --git a/mirror-godot-app/script/editor/variable/variable_editor.gd b/mirror-godot-app/script/editor/variable/variable_editor.gd index bf99b4fa..5f80a85c 100644 --- a/mirror-godot-app/script/editor/variable/variable_editor.gd +++ b/mirror-godot-app/script/editor/variable/variable_editor.gd @@ -179,7 +179,7 @@ func toggle_variable_editor() -> void: hide() else: show() - GameUI.grab_input_lock(self) + GameUI.instance.grab_input_lock(self) _search.grab_focus() _search.select_all() diff --git a/mirror-godot-app/script/editor/variable/variable_type_editor_dialog.gd b/mirror-godot-app/script/editor/variable/variable_type_editor_dialog.gd index 3d6b9839..d8ffaf30 100644 --- a/mirror-godot-app/script/editor/variable/variable_type_editor_dialog.gd +++ b/mirror-godot-app/script/editor/variable/variable_type_editor_dialog.gd @@ -19,7 +19,7 @@ func edit_variable_type(variable_name: String, current_value: Variant, node_path var index: int = _type_selection_button.get_item_index(variable_type) _type_selection_button.select(index) popup_centered() - GameUI.grab_input_lock(self) + GameUI.instance.grab_input_lock(self) func _on_confirmed() -> void: diff --git a/mirror-godot-app/script/gd/mirror_singleton.gd b/mirror-godot-app/script/gd/mirror_singleton.gd index 03c4ae19..5cc54100 100644 --- a/mirror-godot-app/script/gd/mirror_singleton.gd +++ b/mirror-godot-app/script/gd/mirror_singleton.gd @@ -21,7 +21,7 @@ static func get_friendly_name(value: Variant) -> String: static func print_in_chat(attached_object: Object, message: String, range_radius: float = INF) -> void: - GameUI.chat_ui.send_message_from_object(attached_object, message, range_radius) + GameUI.instance.chat_ui.send_message_from_object(attached_object, message, range_radius) # Global variables. diff --git a/mirror-godot-app/script/network_sync.gd b/mirror-godot-app/script/network_sync.gd index 627b3b7d..15bdbd2e 100644 --- a/mirror-godot-app/script/network_sync.gd +++ b/mirror-godot-app/script/network_sync.gd @@ -845,8 +845,8 @@ func _handle_tmusergdscript_runtime_error_server_to_clients(target_node_path: No func _handle_tmusergdscript_runtime_error_on_clients(script_instance: ScriptInstance, error_message: String, line_number: int) -> void: - if GameUI.creator_ui: - if GameUI.creator_ui.show_error_in_gd_script_editor_if_open(script_instance, line_number, error_message): + if GameUI.instance.creator_ui: + if GameUI.instance.creator_ui.show_error_in_gd_script_editor_if_open(script_instance, line_number, error_message): return # If the script editor is not open, display a notification with a link to open. var obj_name_error: String = error_message @@ -854,7 +854,7 @@ func _handle_tmusergdscript_runtime_error_on_clients(script_instance: ScriptInst obj_name_error = script_instance.target_node.get_space_object_name() + ": " + error_message elif script_instance.target_node is SpaceGlobalScripts: obj_name_error = "Global script: " + error_message - Notify.error("GDScript Error", obj_name_error, GameUI.creator_ui.show_error_in_gd_script_editor_if_open.bind(script_instance, line_number, error_message)) + Notify.error("GDScript Error", obj_name_error, GameUI.instance.creator_ui.show_error_in_gd_script_editor_if_open.bind(script_instance, line_number, error_message)) # Physics. diff --git a/mirror-godot-app/script/visual/blocks/match/hide_scoreboard.gd b/mirror-godot-app/script/visual/blocks/match/hide_scoreboard.gd index 78d17d37..93b59dff 100644 --- a/mirror-godot-app/script/visual/blocks/match/hide_scoreboard.gd +++ b/mirror-godot-app/script/visual/blocks/match/hide_scoreboard.gd @@ -6,14 +6,14 @@ func _execute_callback(_stack_count: int) -> Error: if Zone.is_host(): if target_player is Player: var player_peer_id = target_player.get_peer_id() - GameUI.scoreboard_window.set_scoreboard_shown_network.rpc_id(player_peer_id, false, false, false) + GameUI.instance.scoreboard_window.set_scoreboard_shown_network.rpc_id(player_peer_id, false, false, false) else: - GameUI.scoreboard_window.set_scoreboard_shown(false, false, false) + GameUI.instance.scoreboard_window.set_scoreboard_shown(false, false, false) else: if target_player is Player and target_player != PlayerData.get_local_player(): log_error.emit("Cannot hide the scoreboard on " + target_player.get_player_name() + " from a client-side script.") # On client-side scripts, only hide locally. - GameUI.scoreboard_window.set_scoreboard_shown_network(false, false, false) + GameUI.instance.scoreboard_window.set_scoreboard_shown_network(false, false, false) return OK diff --git a/mirror-godot-app/script/visual/blocks/match/set_scoreboard_title.gd b/mirror-godot-app/script/visual/blocks/match/set_scoreboard_title.gd index 7790cc98..4c66fb54 100644 --- a/mirror-godot-app/script/visual/blocks/match/set_scoreboard_title.gd +++ b/mirror-godot-app/script/visual/blocks/match/set_scoreboard_title.gd @@ -4,9 +4,9 @@ extends ScriptBlockSequenced func _execute_callback(_stack_count: int) -> Error: var new_title: String = inputs[0].value if Zone.is_host(): - GameUI.scoreboard_window.set_scoreboard_title_text(new_title) + GameUI.instance.scoreboard_window.set_scoreboard_title_text(new_title) else: - GameUI.scoreboard_window.set_scoreboard_title_text_network(new_title) + GameUI.instance.scoreboard_window.set_scoreboard_title_text_network(new_title) return OK diff --git a/mirror-godot-app/script/visual/blocks/match/show_scoreboard.gd b/mirror-godot-app/script/visual/blocks/match/show_scoreboard.gd index c3a75a61..c10466cf 100644 --- a/mirror-godot-app/script/visual/blocks/match/show_scoreboard.gd +++ b/mirror-godot-app/script/visual/blocks/match/show_scoreboard.gd @@ -15,14 +15,14 @@ func _execute_callback(_stack_count: int) -> Error: if Zone.is_host(): if target_player is Player: var player_peer_id = target_player.get_peer_id() - GameUI.scoreboard_window.set_scoreboard_shown_network.rpc_id(player_peer_id, true, allow_close, allow_new_match) + GameUI.instance.scoreboard_window.set_scoreboard_shown_network.rpc_id(player_peer_id, true, allow_close, allow_new_match) else: - GameUI.scoreboard_window.set_scoreboard_shown(true, allow_close, allow_new_match) + GameUI.instance.scoreboard_window.set_scoreboard_shown(true, allow_close, allow_new_match) else: if target_player is Player and target_player != PlayerData.get_local_player(): log_error.emit("Cannot show the scoreboard on " + target_player.get_player_name() + " from a client-side script.") # On client-side scripts, only show locally. - GameUI.scoreboard_window.set_scoreboard_shown_network(true, allow_close, allow_new_match) + GameUI.instance.scoreboard_window.set_scoreboard_shown_network(true, allow_close, allow_new_match) return OK diff --git a/mirror-godot-app/script/visual/blocks/misc/print_chat.gd b/mirror-godot-app/script/visual/blocks/misc/print_chat.gd index 77cde9d2..4675766c 100644 --- a/mirror-godot-app/script/visual/blocks/misc/print_chat.gd +++ b/mirror-godot-app/script/visual/blocks/misc/print_chat.gd @@ -14,7 +14,7 @@ func _execute_callback(_stack_count: int) -> Error: var range_radius: float = inputs[1].value if range_radius <= 0.0: range_radius = INF - GameUI.chat_ui.send_message_from_object(attached_object, message, range_radius) + GameUI.instance.chat_ui.send_message_from_object(attached_object, message, range_radius) return OK diff --git a/mirror-godot-app/script/visual/editor/gdscript_code_editor.gd b/mirror-godot-app/script/visual/editor/gdscript_code_editor.gd index 427a2c01..8854d948 100644 --- a/mirror-godot-app/script/visual/editor/gdscript_code_editor.gd +++ b/mirror-godot-app/script/visual/editor/gdscript_code_editor.gd @@ -14,9 +14,9 @@ func _ready() -> void: func _on_visibility_changed() -> void: if self.visible: - GameUI.add_visible_window(self) + GameUI.instance.add_visible_window(self) else: - GameUI.remove_visible_window(self) + GameUI.instance.remove_visible_window(self) func _process(delta: float) -> void: @@ -53,8 +53,8 @@ func _on_code_edit_text_changed(): func _on_focus_entered() -> void: - GameUI.grab_input_lock(self) + GameUI.instance.grab_input_lock(self) func _on_focus_exited() -> void: - GameUI.release_input_lock(self) + GameUI.instance.release_input_lock(self) diff --git a/mirror-godot-app/script/visual/editor/graph/script_block_graph_node.gd b/mirror-godot-app/script/visual/editor/graph/script_block_graph_node.gd index 07db43fb..5ff56ac4 100644 --- a/mirror-godot-app/script/visual/editor/graph/script_block_graph_node.gd +++ b/mirror-godot-app/script/visual/editor/graph/script_block_graph_node.gd @@ -355,8 +355,8 @@ func _get_color_of_type(port_type: int) -> Color: func _on_hoverable_script_block_mouse_entered() -> void: - GameUI.set_hover_tooltip_text(hover_tooltip_text) + GameUI.instance.set_hover_tooltip_text(hover_tooltip_text) func _on_hoverable_script_block_mouse_exited() -> void: - GameUI.hide_hover_tooltip_text() + GameUI.instance.hide_hover_tooltip_text() diff --git a/mirror-godot-app/script/visual/editor/graph/script_block_graph_slot.gd b/mirror-godot-app/script/visual/editor/graph/script_block_graph_slot.gd index e5d4c39b..7adabaa2 100644 --- a/mirror-godot-app/script/visual/editor/graph/script_block_graph_slot.gd +++ b/mirror-godot-app/script/visual/editor/graph/script_block_graph_slot.gd @@ -119,12 +119,12 @@ func _get_port_type_icon(port_type: ScriptBlock.PortType) -> Texture2D: func _on_left_value_mouse_entered() -> void: - GameUI.set_hover_tooltip_text("Click here to edit the " + _left_label.text + " input.") + GameUI.instance.set_hover_tooltip_text("Click here to edit the " + _left_label.text + " input.") func _on_left_sequence_run_icon_mouse_entered() -> void: - GameUI.set_hover_tooltip_text("Click here to run this block. This is useful for testing pieces of your script.") + GameUI.instance.set_hover_tooltip_text("Click here to run this block. This is useful for testing pieces of your script.") func _on_mouse_exited() -> void: - GameUI.hide_hover_tooltip_text() + GameUI.instance.hide_hover_tooltip_text() diff --git a/mirror-godot-app/script/visual/editor/graph/script_block_input_enum_menu.gd b/mirror-godot-app/script/visual/editor/graph/script_block_input_enum_menu.gd index 21fe59ee..4ae7144f 100644 --- a/mirror-godot-app/script/visual/editor/graph/script_block_input_enum_menu.gd +++ b/mirror-godot-app/script/visual/editor/graph/script_block_input_enum_menu.gd @@ -19,7 +19,7 @@ func edit_input_value(graph_node: ScriptBlockGraphNode, input_port: ScriptBlock. for value in enum_values: add_filter_menu_item(value, value) show_menu_at_mouse_position() - GameUI.grab_input_lock(self) + GameUI.instance.grab_input_lock(self) func show_menu_at_mouse_position() -> void: @@ -48,7 +48,7 @@ func _fit_rect_in_size(child_rect: Rect2, parent_size: Vector2) -> Vector2: func _on_enum_value_selected(title: String, _metadata: Variant) -> void: hide() - GameUI.release_input_lock(self) + GameUI.instance.release_input_lock(self) if not is_instance_valid(_edited_input_port): return _edited_input_port.value = title diff --git a/mirror-godot-app/script/visual/editor/script_comment_color_picker_popup.gd b/mirror-godot-app/script/visual/editor/script_comment_color_picker_popup.gd index 9e194ce2..aa416929 100644 --- a/mirror-godot-app/script/visual/editor/script_comment_color_picker_popup.gd +++ b/mirror-godot-app/script/visual/editor/script_comment_color_picker_popup.gd @@ -2,8 +2,8 @@ extends PopupPanel func _on_focus_entered() -> void: - GameUI.grab_input_lock(self) + GameUI.instance.grab_input_lock(self) func _on_focus_exited() -> void: - GameUI.release_input_lock(self) + GameUI.instance.release_input_lock(self) diff --git a/mirror-godot-app/script/visual/visual_script_instance.gd b/mirror-godot-app/script/visual/visual_script_instance.gd index 09c4cac7..e436d0dd 100644 --- a/mirror-godot-app/script/visual/visual_script_instance.gd +++ b/mirror-godot-app/script/visual/visual_script_instance.gd @@ -179,10 +179,10 @@ func _on_block_message(script_block: ScriptBlock, title: String, message: String func _load_self_in_script_editor(script_block: ScriptBlock = null, error_text: String = "") -> void: - # It's unfortunate for ScriptEvent to depend on GameUI, but there isn't + # It's unfortunate for ScriptEvent to depend on GameUI.instance, but there isn't # really a better way. At least we will check if it exists first. - if GameUI.creator_ui: - GameUI.creator_ui.open_visual_script_editor(self, script_block, error_text) + if GameUI.instance.creator_ui: + GameUI.instance.creator_ui.open_visual_script_editor(self, script_block, error_text) func serialize_script_entity_data() -> Dictionary: diff --git a/mirror-godot-app/scripts/assets/asset_data.gd b/mirror-godot-app/scripts/assets/asset_data.gd index 8202aba1..f7ab0c48 100644 --- a/mirror-godot-app/scripts/assets/asset_data.gd +++ b/mirror-godot-app/scripts/assets/asset_data.gd @@ -135,7 +135,7 @@ func _generate_mesh_preview(node: Node, path: String) -> void: # duplicate node so it is not freed from memory after preview is generated. _preview_node = node.duplicate() _asset_preview = _ASSET_PREVIEW_TSCN.instantiate() - GameUI.add_child(_asset_preview) + GameUI.instance.add_child(_asset_preview) # set an offset so it is not on screen. _asset_preview.position.x = -1000 _asset_preview.position.y = -1000 @@ -171,7 +171,7 @@ func _free_previews() -> void: _preview_node.queue_free() _preview_node = null if is_instance_valid(_asset_preview): - GameUI.remove_child(_asset_preview) + GameUI.instance.remove_child(_asset_preview) _asset_preview.queue_free() _asset_preview = null diff --git a/mirror-godot-app/scripts/assets/asset_data_map.gd b/mirror-godot-app/scripts/assets/asset_data_map.gd index 58160d2c..7d8bbdcc 100644 --- a/mirror-godot-app/scripts/assets/asset_data_map.gd +++ b/mirror-godot-app/scripts/assets/asset_data_map.gd @@ -46,7 +46,7 @@ func _generate_mesh_preview(node: Node, path: String) -> void: # duplicate node so it is not freed from memory after preview is generated. _preview_node = node _asset_preview = _ASSET_PREVIEW_TSCN.instantiate() - GameUI.add_child(_asset_preview) + GameUI.instance.add_child(_asset_preview) # set an offset so it is not on screen. diff --git a/mirror-godot-app/scripts/autoload/analytics/app_state.gd b/mirror-godot-app/scripts/autoload/analytics/app_state.gd index b96d75c8..3270b402 100644 --- a/mirror-godot-app/scripts/autoload/analytics/app_state.gd +++ b/mirror-godot-app/scripts/autoload/analytics/app_state.gd @@ -17,13 +17,14 @@ var _current_app_mode: Dictionary = { mode = "MENU", sub_mode = "LOGIN" }: func _ready() -> void: + await GameUI.ui_ready() Zone.client.join_server_start.connect(_on_joining_server) Zone.client.join_server_complete.connect(_on_server_joined) Zone.mode_changed.connect(_on_zone_mode_changed) - if GameUI.main_menu_ui: - GameUI.main_menu_ui.visibility_changed.connect(_on_main_menu_ui_visibility_changed) - GameUI.main_menu_ui.page_changed.connect(main_menu_ui_analytics_update_current_page) - GameUI.login_ui.visibility_changed.connect(_on_login_ui_visibility_changed) + if GameUI.instance.main_menu_ui: + GameUI.instance.main_menu_ui.visibility_changed.connect(_on_main_menu_ui_visibility_changed) + GameUI.instance.main_menu_ui.page_changed.connect(main_menu_ui_analytics_update_current_page) + GameUI.instance.login_ui.visibility_changed.connect(_on_login_ui_visibility_changed) @@ -61,7 +62,7 @@ func join_server_stop() -> void: main_menu_ui_analytics_update_current_page() -func main_menu_ui_analytics_update_current_page(page_name: String = GameUI.main_menu_ui._current_page.name) -> void: +func main_menu_ui_analytics_update_current_page(page_name: String = GameUI.instance.main_menu_ui._current_page.name) -> void: set_app_mode("MENU", page_name.to_upper()) @@ -80,16 +81,16 @@ func _on_zone_mode_changed(new_mode: ZoneClass.ZONE_MODE) -> void: # 1. It correctly says that we are in the main menu always, # not only when we automatically change page to Home # 2. When we close it, it correctly puts us back in the correct SPACE_* AppMode -# TODO MAYBE: listen on a signal on GameUI for when it switches which UI is on top/visible -# Something like : GameUI.main_ui_changed ====> "LOGIN", "MAIN_MENU", etc +# TODO MAYBE: listen on a signal on GameUI.instance for when it switches which UI is on top/visible +# Something like : GameUI.instance.main_ui_changed ====> "LOGIN", "MAIN_MENU", etc func _on_main_menu_ui_visibility_changed() -> void: - if GameUI.main_menu_ui.visible: + if GameUI.instance.main_menu_ui.visible: main_menu_ui_analytics_update_current_page() # If in a space: TODO, find a better check than UI visibility of player label container. - elif GameUI.chat_ui.visible: + elif GameUI.instance.chat_ui.visible: change_app_mode_to_space_mode(Zone.current_mode) func _on_login_ui_visibility_changed() -> void: - if GameUI.login_ui.visible: + if GameUI.instance.login_ui.visible: set_app_mode("MENU", "LOGIN") diff --git a/mirror-godot-app/scripts/autoload/bootup.gd b/mirror-godot-app/scripts/autoload/bootup.gd index 5387952c..1ce3c737 100644 --- a/mirror-godot-app/scripts/autoload/bootup.gd +++ b/mirror-godot-app/scripts/autoload/bootup.gd @@ -5,14 +5,18 @@ extends Node static var popups = [] +func _init(): + GameUI._root_node = get_node("/root/") + func _start_client(): DisplayServer.window_set_title(ProjectSettings.get_setting("application/config/window_name", "The Mirror")) Cursors.setup() if ProjectSettings.get_setting("feature_flags/disable_login", false): LoginService.setup_deeplink_login(get_tree()) else: - GameUI.login_ui.start_login_ui() - GameUI.login_ui.show() + await GameUI.ui_ready() + GameUI.instance.login_ui.start_login_ui() + GameUI.instance.login_ui.show() Deeplinking.setup() await Zone.wait_till_notifications_ready() await Zone.wait_till_deeplink_ready() diff --git a/mirror-godot-app/scripts/autoload/deeplinking.gd b/mirror-godot-app/scripts/autoload/deeplinking.gd index 65ef9847..5a879f99 100644 --- a/mirror-godot-app/scripts/autoload/deeplinking.gd +++ b/mirror-godot-app/scripts/autoload/deeplinking.gd @@ -39,7 +39,7 @@ func _process(_delta: float) -> void: var args: Array = url_data.args if not Net.is_logged_in() and command != _JOIN_AUTHED_SPACE_CMD: Notify.warning("Sign In", "You must sign in to use the link provided, once you sign in I will open the link.") - GameUI.login_ui.login_succeeded.connect(func(): _handle_deeplink_url(url), CONNECT_ONE_SHOT) + GameUI.instance.login_ui.login_succeeded.connect(func(): _handle_deeplink_url(url), CONNECT_ONE_SHOT) print("Processing login...") else: print("Processing deeplink: ", url) diff --git a/mirror-godot-app/scripts/autoload/login.gd b/mirror-godot-app/scripts/autoload/login.gd index b56053bc..eef4292f 100644 --- a/mirror-godot-app/scripts/autoload/login.gd +++ b/mirror-godot-app/scripts/autoload/login.gd @@ -30,13 +30,13 @@ static func get_latest_mirror_profile_or_create_it() -> Dictionary: static func wait_till_login(scene_tree: SceneTree): # it is possible you use the code in this UI in a place where it may not be fully loaded # we ensure we have all the autoloads, and instances configured - if not Firebase or not Firebase.Auth or not GameUI.login_ui: + if not Firebase or not Firebase.Auth or not GameUI.instance.login_ui: await scene_tree.process_frame # now we check are we fully logged into the app if Net.is_fully_logged_in() and Firebase.Auth.is_logged_in(): return # we wait until this is the case since we weren't logged in - await GameUI.login_ui.login_succeeded + await GameUI.instance.login_ui.login_succeeded static func login_as_user_deeplink( diff --git a/mirror-godot-app/scripts/autoload/vr_manager.gd b/mirror-godot-app/scripts/autoload/vr_manager.gd index e7004114..8f6613e3 100644 --- a/mirror-godot-app/scripts/autoload/vr_manager.gd +++ b/mirror-godot-app/scripts/autoload/vr_manager.gd @@ -8,10 +8,14 @@ signal vr_ended var vr_interface: XRInterface var vr_is_active: bool = false +# we can't have static signals so we must declare them here for the GameUI which is now static +signal vr_decision_made func _ready() -> void: vr_interface = XRServer.find_interface('OpenXR') + GameUI.setup_game_ui(get_parent(), vr_interface != null) if not vr_interface: + print_verbose("VR Is not being used or active") return if not vr_interface.is_initialized(): print("OpenXR: Initializing interface") diff --git a/mirror-godot-app/scripts/autoload/zone/client.gd b/mirror-godot-app/scripts/autoload/zone/client.gd index aa251009..0131d268 100644 --- a/mirror-godot-app/scripts/autoload/zone/client.gd +++ b/mirror-godot-app/scripts/autoload/zone/client.gd @@ -166,7 +166,7 @@ func _client_on_connected_to_server() -> void: Analytics.track_event_client(AnalyticsEvent.TYPE.SPACE_JOIN_ATTEMPT_SUCCESS, {"spaceId": _queued_space_id}) Zone.change_to_space_scene() # TODO: Instead of true, determine if the player has creator permissions for the space. - GameUI.on_enter_space(true) + GameUI.instance.on_enter_space(true) var client = Node.new() client.set_name("Client " + str(multiplayer.get_unique_id())) @@ -231,7 +231,7 @@ func access_denied(in_reason: int) -> void: return _disconnect_from_server() Zone.on_exit_space() - GameUI.loading_ui.hide() + GameUI.instance.loading_ui.hide() quit_to_main_menu() if in_reason == Zone.DENIED_REASON.CLIENT_VERSION_MISMATCH: Game.critical_error(JOINER_ERRORS.ACCESS_DENIED, "Server/Client Version Mismatch. Update your game using the itch.io launcher, or reinstall the app from itch.io") @@ -298,16 +298,16 @@ func _client_on_server_disconnected() -> void: func quit_to_main_menu() -> void: last_connection_address = "" last_connection_port = -1 - GameUI.loading_ui.hide() - GameUI.main_menu_ui.show() + GameUI.instance.loading_ui.hide() + GameUI.instance.main_menu_ui.show() _quit_space() ## call this when you need to show the loading screen and are already connecting func _quit_to_loading_screen() -> void: - GameUI.loading_ui.show() - if is_instance_valid(GameUI.main_menu_ui): - GameUI.main_menu_ui.hide() + GameUI.instance.loading_ui.show() + if is_instance_valid(GameUI.instance.main_menu_ui): + GameUI.instance.main_menu_ui.hide() _quit_space() diff --git a/mirror-godot-app/scripts/autoload/zone/match_round_system.gd b/mirror-godot-app/scripts/autoload/zone/match_round_system.gd index 6416a6c2..c8ce397f 100644 --- a/mirror-godot-app/scripts/autoload/zone/match_round_system.gd +++ b/mirror-godot-app/scripts/autoload/zone/match_round_system.gd @@ -63,11 +63,11 @@ func end_match(winning_team_name: String) -> void: if not _is_match_running: Zone.script_network_sync.server_script_print_notify("Match Not Running", "Tried to end the match, but no match was running.", Enums.NotifyStatus.WARNING) return - if GameUI and GameUI.scoreboard_window: + if GameUI.instance and GameUI.instance.scoreboard_window: # This is naive but it works for now. var win_plurality: String = " win!" if winning_team_name.ends_with("s") else " wins!" - GameUI.scoreboard_window.set_scoreboard_title_text(winning_team_name + win_plurality) - GameUI.scoreboard_window.set_scoreboard_shown(true, false, true) + GameUI.instance.scoreboard_window.set_scoreboard_title_text(winning_team_name + win_plurality) + GameUI.instance.scoreboard_window.set_scoreboard_shown(true, false, true) var all_players: Array = Zone.social_manager.get_all_players() for player in all_players: player.set_player_input_allowed(false) @@ -78,8 +78,8 @@ func end_match(winning_team_name: String) -> void: func terminate_match() -> void: _is_match_running = false _is_round_running = false - GameUI.scoreboard_window.set_scoreboard_title_text("Scoreboard") - GameUI.scoreboard_window.set_scoreboard_shown(false, false, false) + GameUI.instance.scoreboard_window.set_scoreboard_title_text("Scoreboard") + GameUI.instance.scoreboard_window.set_scoreboard_shown(false, false, false) var all_players: Array = Zone.social_manager.get_all_players() for player in all_players: player.set_player_input_allowed(true) diff --git a/mirror-godot-app/scripts/autoload/zone/zone.gd b/mirror-godot-app/scripts/autoload/zone/zone.gd index 643e8336..f608720e 100644 --- a/mirror-godot-app/scripts/autoload/zone/zone.gd +++ b/mirror-godot-app/scripts/autoload/zone/zone.gd @@ -266,7 +266,7 @@ func on_exit_space() -> void: social_manager.clear_children() instance_manager.clear_children() change_to_empty_scene() - GameUI.on_exit_space() + GameUI.instance.on_exit_space() print("exit space game ui ran") diff --git a/mirror-godot-app/scripts/game_mode/game_mode.gd b/mirror-godot-app/scripts/game_mode/game_mode.gd index 8915da7e..c1b60589 100644 --- a/mirror-godot-app/scripts/game_mode/game_mode.gd +++ b/mirror-godot-app/scripts/game_mode/game_mode.gd @@ -25,7 +25,7 @@ func _unhandled_input(input_event) -> void: return if input_event.is_pressed(): var should_toggle_build_tools = ( - not GameUI.is_keyboard_needed_for_ui() + not GameUI.instance.is_keyboard_needed_for_ui() and input_event.is_action(&"build_mode_toggle") ) if _current_game_mode == Mode.NORMAL: diff --git a/mirror-godot-app/scripts/space/instance_manager.gd b/mirror-godot-app/scripts/space/instance_manager.gd index 9365c49f..2f9a2a9f 100644 --- a/mirror-godot-app/scripts/space/instance_manager.gd +++ b/mirror-godot-app/scripts/space/instance_manager.gd @@ -299,7 +299,7 @@ func create_space_object(space_object_dictionary: Dictionary, receipt: Dictionar if created_by_local_user: var auto_select: bool = receipt.get("auto_select", false) if auto_select: - GameUI.creator_ui.select_object(instance) + GameUI.instance.creator_ui.select_object(instance) # This function is called by the client to load the space objects diff --git a/mirror-godot-app/scripts/ui/teams_window_container.gd b/mirror-godot-app/scripts/ui/teams_window_container.gd index dae7ef01..fc79d984 100644 --- a/mirror-godot-app/scripts/ui/teams_window_container.gd +++ b/mirror-godot-app/scripts/ui/teams_window_container.gd @@ -24,7 +24,7 @@ func _process(_delta) -> void: if not Zone.client or not Zone.client or not Zone.client.is_client_connected_to_server(): return if Input.is_action_just_pressed(&"team_menu_toggle"): - if GameUI.is_any_full_screen_or_modal_ui_visible([self]): + if GameUI.instance.is_any_full_screen_or_modal_ui_visible([self]): return if get_viewport().gui_get_focus_owner() != null: return diff --git a/mirror-godot-app/test/manual/gizmo/test_gizmo.gd b/mirror-godot-app/test/manual/gizmo/test_gizmo.gd index e54fc047..812e4211 100644 --- a/mirror-godot-app/test/manual/gizmo/test_gizmo.gd +++ b/mirror-godot-app/test/manual/gizmo/test_gizmo.gd @@ -7,10 +7,10 @@ extends Node func _enter_tree(): # TODO: Instead of just deleting this when running the test scene, - # we should make GameUI only instanced when needed on clients. + # we should make GameUI.instance only instanced when needed on clients. # TODO: Also, if this was free instead of queue_free, ToolManager # would currently break, we should make it a child of CreatorUI. - GameUI.queue_free() + GameUI.instance.queue_free() func _ready(): diff --git a/mirror-godot-app/test/manual/inspector/test_inspector.gd b/mirror-godot-app/test/manual/inspector/test_inspector.gd index 8189dfff..dcc0bb0e 100644 --- a/mirror-godot-app/test/manual/inspector/test_inspector.gd +++ b/mirror-godot-app/test/manual/inspector/test_inspector.gd @@ -8,10 +8,10 @@ var _selected_nodes: Array[Node] func _enter_tree(): # TODO: Instead of just deleting this when running the test scene, - # we should make GameUI only instanced when needed on clients. + # we should make GameUI.instance only instanced when needed on clients. # TODO: Also, if this was free instead of queue_free, ToolManager # would currently break, we should make it a child of CreatorUI. - GameUI.queue_free() + GameUI.instance.queue_free() func _ready(): diff --git a/mirror-godot-app/test/unit/test_autoloads.gd b/mirror-godot-app/test/unit/test_autoloads.gd index 1fbbe907..b93a7721 100644 --- a/mirror-godot-app/test/unit/test_autoloads.gd +++ b/mirror-godot-app/test/unit/test_autoloads.gd @@ -16,17 +16,17 @@ func test_autoload_references(): assert_not_null(Zone.social_manager) assert_not_null(Zone.instance_manager) - assert_not_null(GameUI) - assert_not_null(GameUI.creator_ui) - assert_not_null(GameUI.loading_ui) - assert_not_null(GameUI.main_menu_ui) - assert_not_null(GameUI.login_ui) - assert_not_null(GameUI.notifications_ui) + assert_not_null(GameUI.instance) + assert_not_null(GameUI.instance.creator_ui) + assert_not_null(GameUI.instance.loading_ui) + assert_not_null(GameUI.instance.main_menu_ui) + assert_not_null(GameUI.instance.login_ui) + assert_not_null(GameUI.instance.notifications_ui) ## ensures that the loading ui is in front of any of the other pertinent ui func test_loading_ui_order(): - var loading_ui_index = GameUI.loading_ui.get_index() - assert_true(loading_ui_index > GameUI.main_menu_ui.get_index()) - assert_true(loading_ui_index > GameUI.login_ui.get_index()) - assert_true(loading_ui_index > GameUI.creator_ui.get_index()) + var loading_ui_index = GameUI.instance.loading_ui.get_index() + assert_true(loading_ui_index > GameUI.instance.main_menu_ui.get_index()) + assert_true(loading_ui_index > GameUI.instance.login_ui.get_index()) + assert_true(loading_ui_index > GameUI.instance.creator_ui.get_index()) diff --git a/mirror-godot-app/test/unit/test_space_object_visibility.gd b/mirror-godot-app/test/unit/test_space_object_visibility.gd index d633f7ef..672d3fc4 100644 --- a/mirror-godot-app/test/unit/test_space_object_visibility.gd +++ b/mirror-godot-app/test/unit/test_space_object_visibility.gd @@ -83,7 +83,7 @@ func test_shift_d_duplicated_space_object(): return # TODO: fix engine crashes with double Zone.client = double(_CLIENT).new() stub(Zone.client, 'client_send_create_space_object').to_do_nothing() - var selection_helper = GameUI.creator_ui.selection_helper + var selection_helper = GameUI.instance.creator_ui.selection_helper var stubbed_so = _setup_space_object(_SPACE_OBJECT_DATA) selection_helper.select_nodes([stubbed_so]) @@ -113,7 +113,7 @@ func test_copy_space_object(): return # TODO: fix engine crashes with double Zone.client = double(_CLIENT).new() stub(Zone.client, 'client_send_create_space_object').to_do_nothing() - var selection_helper = GameUI.creator_ui.selection_helper + var selection_helper = GameUI.instance.creator_ui.selection_helper var stubbed_so = _setup_space_object(_SPACE_OBJECT_DATA) selection_helper.select_nodes([stubbed_so]) diff --git a/mirror-godot-app/ui/chat/chat_ui.gd b/mirror-godot-app/ui/chat/chat_ui.gd index c77df5e2..b9e15712 100644 --- a/mirror-godot-app/ui/chat/chat_ui.gd +++ b/mirror-godot-app/ui/chat/chat_ui.gd @@ -60,10 +60,10 @@ func _ready() -> void: func _process(delta: float) -> void: _time_since_last_opened += delta - var safe_area_for_gui: Rect2 = GameUI.get_safe_area() + var safe_area_for_gui: Rect2 = GameUI.instance.get_safe_area() var new_position: Vector2 = _initial_position + safe_area_for_gui.position _chat_box.position = new_position - if Input.is_action_just_pressed("player_open_chat", true) and not GameUI.is_any_full_screen_or_modal_ui_visible([self]) and get_viewport().gui_get_focus_owner() == null: + if Input.is_action_just_pressed("player_open_chat", true) and not GameUI.instance.is_any_full_screen_or_modal_ui_visible([self]) and get_viewport().gui_get_focus_owner() == null: _line_edit.grab_focus() if not is_typing_in_chat and _time_since_last_opened > _fade_delay: var visibility_loss_speed = delta * 0.5 @@ -171,7 +171,7 @@ func _handle_player_event_client(message: String) -> void: func _on_line_edit_focus_entered() -> void: is_typing_in_chat = true _reset_chat_transparency() - GameUI.grab_input_lock(self) + GameUI.instance.grab_input_lock(self) func _on_line_edit_focus_exited() -> void: @@ -179,7 +179,7 @@ func _on_line_edit_focus_exited() -> void: _reset_chat_transparency() _scroll_to_bottom() _emoji_menu.hide() - GameUI.release_input_lock(self) + GameUI.instance.release_input_lock(self) func _on_line_edit_text_submitted(text: String) -> void: diff --git a/mirror-godot-app/ui/common/keyboard_grabbing/keyboard_grabbing_confirmation_dialog.gd b/mirror-godot-app/ui/common/keyboard_grabbing/keyboard_grabbing_confirmation_dialog.gd index 901b56e3..bc7e7750 100644 --- a/mirror-godot-app/ui/common/keyboard_grabbing/keyboard_grabbing_confirmation_dialog.gd +++ b/mirror-godot-app/ui/common/keyboard_grabbing/keyboard_grabbing_confirmation_dialog.gd @@ -3,9 +3,9 @@ extends ConfirmationDialog func _on_focus_entered() -> void: - GameUI.grab_input_lock(self) + GameUI.instance.grab_input_lock(self) func _on_focus_exited() -> void: if not get_parent().get_viewport() is AcceptDialog: - GameUI.release_input_lock(self) + GameUI.instance.release_input_lock(self) diff --git a/mirror-godot-app/ui/common/keyboard_grabbing/keyboard_grabbing_line_edit.gd b/mirror-godot-app/ui/common/keyboard_grabbing/keyboard_grabbing_line_edit.gd index a8131821..f581468c 100644 --- a/mirror-godot-app/ui/common/keyboard_grabbing/keyboard_grabbing_line_edit.gd +++ b/mirror-godot-app/ui/common/keyboard_grabbing/keyboard_grabbing_line_edit.gd @@ -3,9 +3,9 @@ extends LineEdit func _on_focus_entered() -> void: - GameUI.grab_input_lock(self) + GameUI.instance.grab_input_lock(self) func _on_focus_exited() -> void: if not get_viewport() is AcceptDialog: - GameUI.release_input_lock(self) + GameUI.instance.release_input_lock(self) diff --git a/mirror-godot-app/ui/game/GameUIStatic.gd b/mirror-godot-app/ui/game/GameUIStatic.gd new file mode 100644 index 00000000..fae2c760 --- /dev/null +++ b/mirror-godot-app/ui/game/GameUIStatic.gd @@ -0,0 +1,11 @@ +extends Node + + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + pass # Replace with function body. + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta: float) -> void: + pass diff --git a/mirror-godot-app/ui/game/crosshair/crosshair.gd b/mirror-godot-app/ui/game/crosshair/crosshair.gd index 8d7b61e0..e8dd0083 100644 --- a/mirror-godot-app/ui/game/crosshair/crosshair.gd +++ b/mirror-godot-app/ui/game/crosshair/crosshair.gd @@ -27,7 +27,7 @@ func _process(delta: float) -> void: if equipable and equipable.has_method("get_bullet_spread"): var crosshair_size: float = rad_to_deg(equipable.get_bullet_spread()) * _spread_multiplier crosshair_size = clampf(crosshair_size, _minimum_size, _maximum_size) - GameUI.crosshair.custom_minimum_size = lerp(GameUI.crosshair.custom_minimum_size, Vector2.ONE * crosshair_size, delta * _lerp_speed) + GameUI.instance.crosshair.custom_minimum_size = lerp(GameUI.instance.crosshair.custom_minimum_size, Vector2.ONE * crosshair_size, delta * _lerp_speed) _update_crosshair_colors() diff --git a/mirror-godot-app/ui/game/game_ui.tscn b/mirror-godot-app/ui/game/game_ui.tscn index bf1f197e..18749564 100644 --- a/mirror-godot-app/ui/game/game_ui.tscn +++ b/mirror-godot-app/ui/game/game_ui.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=28 format=3 uid="uid://bpn5kipaabot1"] -[ext_resource type="Script" path="res://ui/game/game_ui.gd" id="1_2ryxh"] +[ext_resource type="Script" path="res://ui/game/game_ui_instance.gd" id="1_2ryxh"] [ext_resource type="PackedScene" uid="uid://pdt3sfnghnqp" path="res://ui/login/login_ui.tscn" id="2"] [ext_resource type="PackedScene" uid="uid://vep713eampf5" path="res://creator/drag_input/drag_detector.tscn" id="2_455td"] [ext_resource type="PackedScene" uid="uid://bompdcbpjbtli" path="res://ui/chat/chat_ui.tscn" id="2_a0jw6"] diff --git a/mirror-godot-app/ui/game/game_ui.gd b/mirror-godot-app/ui/game/game_ui_instance.gd similarity index 97% rename from mirror-godot-app/ui/game/game_ui.gd rename to mirror-godot-app/ui/game/game_ui_instance.gd index 5d4a449c..1bb6410c 100644 --- a/mirror-godot-app/ui/game/game_ui.gd +++ b/mirror-godot-app/ui/game/game_ui_instance.gd @@ -29,12 +29,23 @@ var should_display_space_listings = ProjectSettings.get_setting("feature_flags/e var visible_windows: Dictionary = {} +var _is_configured = false +signal ready_called + +func wait_till_ready(): + if _is_configured: + return + await ready_called + + func _ready() -> void: assert(teams_handler) main_menu_ui.setup(self) creator_ui.setup(drag_detector) hotbar.setup(creator_ui) cinematic_mode.setup(self) + _is_configured = true + ready_called.emit() func _process(_delta) -> void: diff --git a/mirror-godot-app/ui/game/game_ui_static.gd b/mirror-godot-app/ui/game/game_ui_static.gd new file mode 100644 index 00000000..99c36f64 --- /dev/null +++ b/mirror-godot-app/ui/game/game_ui_static.gd @@ -0,0 +1,50 @@ +extends Node +class_name GameUI + +## Why does this class exist? Well you may have guessed that we have VR support. +## We need UI in the VR instance of the game. +## In VR we require the Node Layout to be: +## - SubViewport -> GameUI.instance +## In non VR mode we require the Node Layout to be: +## - GameUI.instance +## To clarify in short, this code sucks becauseit fixes an arch issue and bypasses it. + +## We don't always want every bit of UI in a Sub Viewport or all the VR nodes applied to the game when VR isn't needing to be active. +## So this file will dynamically allow you to configure under ANY node type so this allows VR/AR implementation to be clean +## While also allowing us to completely turn it off in the menu should we desire this. + +static var readonly_singleton_instance = preload("res://ui/game/game_ui.tscn") +static var _internal_instance = null # this is the actual data +static var _root_node = null +static var instance: + get: + await ui_ready() + assert(_internal_instance != null) + assert(_internal_instance.get_parent() != null) + return _internal_instance + set(v): + push_error("You can't re-assign the Game UI singleton.") + + +static func ui_ready() -> void: + if _internal_instance != null and _internal_instance.get_parent() != null: + return + while _internal_instance.get_parent() == null or _root_node == null: + await _root_node.get_tree().create_timer(0.1).timeout + print("Waiting...") + await _internal_instance.wait_till_ready() + if not _vr_decided: + await VRManager.vr_decision_made + +static var _vr_decided = false +static func setup_game_ui(root_node: Node, is_vr: bool): + _root_node = root_node + if _internal_instance == null: + # read the node, and add it to the root of the game + _internal_instance = readonly_singleton_instance.instantiate() + _internal_instance.set_name("instance") + root_node.add_child.call_deferred(_internal_instance) + while _internal_instance.get_parent() == null: + await root_node.get_tree().create_timer(0.1).timeout + VRManager.vr_decision_made.emit() + _vr_decided = true diff --git a/mirror-godot-app/ui/game/health/health_display.gd b/mirror-godot-app/ui/game/health/health_display.gd index 0404819d..0d2755ec 100644 --- a/mirror-godot-app/ui/game/health/health_display.gd +++ b/mirror-godot-app/ui/game/health/health_display.gd @@ -71,8 +71,8 @@ func update_visibility_by_space_var( func _space_var_updated(variable_name: String, variable_value: Variant) -> void: if variable_name in [player_damage_is_enabled]: var str_enableness = update_visibility_by_space_var(variable_value) - if GameUI and GameUI.chat_ui: - GameUI.chat_ui.add_message_clientside("Player damage is now [i]%s[/i] on this space" % str_enableness) + if GameUI.instance and GameUI.instance.chat_ui: + GameUI.instance.chat_ui.add_message_clientside("Player damage is now [i]%s[/i] on this space" % str_enableness) func try_hide() -> void: @@ -87,5 +87,5 @@ func try_show() -> void: if not are_variables_ready: await Zone.script_network_sync.variables_ready var str_enableness = self.update_visibility_by_space_var() - if GameUI and GameUI.chat_ui: - GameUI.chat_ui.add_message_clientside("Player damage is [i]%s[/i] on this space" % str_enableness) + if GameUI.instance and GameUI.instance.chat_ui: + GameUI.instance.chat_ui.add_message_clientside("Player damage is [i]%s[/i] on this space" % str_enableness) diff --git a/mirror-godot-app/ui/game/loading_ui.gd b/mirror-godot-app/ui/game/loading_ui.gd index bf05a91a..87690781 100644 --- a/mirror-godot-app/ui/game/loading_ui.gd +++ b/mirror-godot-app/ui/game/loading_ui.gd @@ -36,8 +36,8 @@ func set_loading_image(image: Texture2D) -> void: func _on_join_server_start() -> void: _progress_animation.play("Loading") - if GameUI.main_menu_ui: - GameUI.main_menu_ui.hide() + if GameUI.instance.main_menu_ui: + GameUI.instance.main_menu_ui.hide() show() func _on_join_server_complete() -> void: @@ -55,5 +55,5 @@ func _on_join_server_status_changed(text: String) -> void: func _on_cancel_button_pressed() -> void: Zone.client.cancel_join_request() - GameUI.main_menu_ui.show() + GameUI.instance.main_menu_ui.show() hide() diff --git a/mirror-godot-app/ui/hover_text/scripts/hoverable_button.gd b/mirror-godot-app/ui/hover_text/scripts/hoverable_button.gd index 23e511b9..8c02a74e 100644 --- a/mirror-godot-app/ui/hover_text/scripts/hoverable_button.gd +++ b/mirror-godot-app/ui/hover_text/scripts/hoverable_button.gd @@ -10,12 +10,12 @@ extends Button func _on_hoverable_button_mouse_entered() -> void: if hover_tooltip_text == "": return - GameUI.set_hover_tooltip_text(hover_tooltip_text) + GameUI.instance.set_hover_tooltip_text(hover_tooltip_text) func _on_hoverable_button_mouse_exited() -> void: - GameUI.hide_hover_tooltip_text() + GameUI.instance.hide_hover_tooltip_text() func _on_hoverable_button_pressed() -> void: - GameUI.hide_hover_tooltip_text() + GameUI.instance.hide_hover_tooltip_text() diff --git a/mirror-godot-app/ui/hover_text/scripts/hoverable_checkbox.gd b/mirror-godot-app/ui/hover_text/scripts/hoverable_checkbox.gd index b95bbd1d..8218b11c 100644 --- a/mirror-godot-app/ui/hover_text/scripts/hoverable_checkbox.gd +++ b/mirror-godot-app/ui/hover_text/scripts/hoverable_checkbox.gd @@ -10,8 +10,8 @@ extends CheckBox func _on_hoverable_checkbox_mouse_entered() -> void: if hover_tooltip_text == "": return - GameUI.set_hover_tooltip_text(hover_tooltip_text) + GameUI.instance.set_hover_tooltip_text(hover_tooltip_text) func _on_hoverable_checkbox_mouse_exited() -> void: - GameUI.hide_hover_tooltip_text() + GameUI.instance.hide_hover_tooltip_text() diff --git a/mirror-godot-app/ui/hover_text/scripts/hoverable_label.gd b/mirror-godot-app/ui/hover_text/scripts/hoverable_label.gd index 0db32bd9..0cd93272 100644 --- a/mirror-godot-app/ui/hover_text/scripts/hoverable_label.gd +++ b/mirror-godot-app/ui/hover_text/scripts/hoverable_label.gd @@ -10,8 +10,8 @@ extends Label func _on_hoverable_label_mouse_entered() -> void: if hover_tooltip_text == "": return - GameUI.set_hover_tooltip_text(hover_tooltip_text) + GameUI.instance.set_hover_tooltip_text(hover_tooltip_text) func _on_hoverable_label_mouse_exited() -> void: - GameUI.hide_hover_tooltip_text() + GameUI.instance.hide_hover_tooltip_text() diff --git a/mirror-godot-app/ui/login/login_ui.gd b/mirror-godot-app/ui/login/login_ui.gd index fc7a2b6e..bffaa1bc 100644 --- a/mirror-godot-app/ui/login/login_ui.gd +++ b/mirror-godot-app/ui/login/login_ui.gd @@ -114,13 +114,13 @@ func _guest_signup_succeeded(acc: Dictionary) -> void: static func wait_till_login(scene_tree: SceneTree): # it is possible you use the code in this UI in a place where it may not be fully loaded # we ensure we have all the autoloads, and instances configured - if not Firebase or not Firebase.Auth or not GameUI.login_ui: + if not Firebase or not Firebase.Auth or not GameUI.instance.login_ui: await scene_tree.process_frame # now we check are we fully logged into the app if Net.is_fully_logged_in() and Firebase.Auth.is_logged_in(): return # we wait until this is the case since we weren't logged in - await GameUI.login_ui.login_succeeded + await GameUI.instance.login_ui.login_succeeded ## hide the login ui pane diff --git a/mirror-godot-app/ui/main_menu/common/space_panel.gd b/mirror-godot-app/ui/main_menu/common/space_panel.gd index e5187897..a2334257 100644 --- a/mirror-godot-app/ui/main_menu/common/space_panel.gd +++ b/mirror-godot-app/ui/main_menu/common/space_panel.gd @@ -151,7 +151,7 @@ func _join_space(build_mode = false) -> void: Zone.client.start_join_zone_by_space_id(_id) else: Zone.client.start_join_play_space_by_space_id(_id) - GameUI.loading_ui.set_loading_image(_preview_image.texture) + GameUI.instance.loading_ui.set_loading_image(_preview_image.texture) ## receiver method for the button was pressed that triggers entering a space diff --git a/mirror-godot-app/ui/main_menu/end_preview_button.gd b/mirror-godot-app/ui/main_menu/end_preview_button.gd index 51b1900f..4cfecdbf 100644 --- a/mirror-godot-app/ui/main_menu/end_preview_button.gd +++ b/mirror-godot-app/ui/main_menu/end_preview_button.gd @@ -12,4 +12,4 @@ func _on_zone_mode_changed(new_zone_mode) -> void: func _on_end_preview_button_pressed() -> void: Zone.client_send_mode_change(Zone.ZONE_MODE.EDIT) - GameUI.main_menu_ui.hide() + GameUI.instance.main_menu_ui.hide() diff --git a/mirror-godot-app/ui/main_menu/main_menu_ui.gd b/mirror-godot-app/ui/main_menu/main_menu_ui.gd index 599a2eac..2518d522 100644 --- a/mirror-godot-app/ui/main_menu/main_menu_ui.gd +++ b/mirror-godot-app/ui/main_menu/main_menu_ui.gd @@ -109,7 +109,7 @@ func toggle_main_menu_open(show_space_settings: bool = false) -> void: change_page(&"Discover") change_subpage(&"ViewSpace", Zone.space) change_subpage(&"EditSpace", Zone.space) - elif GameUI.should_display_space_listings: + elif GameUI.instance.should_display_space_listings: change_page(&"Home") change_subpage(&"HomeSpaceSelect") show() @@ -130,14 +130,14 @@ func _setup_pages_and_subpages() -> void: for subpage in subpages.get_children(): subpage.hide() page_names.append(page.name) - if not GameUI.should_display_space_listings: + if not GameUI.instance.should_display_space_listings: whitelisted_page_names = ["Avatar", "Settings"] _header_menu.populate_page_buttons(page_names, whitelisted_page_names) # Setups up the default pages func _show_default_page() -> void: - if GameUI.should_display_space_listings: + if GameUI.instance.should_display_space_listings: _current_page = get_page_from_name("Home") else: _current_page = get_page_from_name("Avatar") @@ -261,7 +261,7 @@ func _on_close_window_pressed() -> void: func _on_help_button_pressed() -> void: - GameUI.user_tutorial.show_tutorial_type(UserTutorial.Tutorial_Type.HOME) + GameUI.instance.user_tutorial.show_tutorial_type(UserTutorial.Tutorial_Type.HOME) func _on_back_button_pressed() -> void: diff --git a/mirror-godot-app/ui/main_menu/pages/avatar/avatar.gd b/mirror-godot-app/ui/main_menu/pages/avatar/avatar.gd index 1a00ffa1..87caa3f3 100644 --- a/mirror-godot-app/ui/main_menu/pages/avatar/avatar.gd +++ b/mirror-godot-app/ui/main_menu/pages/avatar/avatar.gd @@ -168,7 +168,7 @@ func _on_continue_with_avatar_pressed() -> void: Notify.info(tr("Can't confirm changes\n to your avatar"), tr("Your avatar might have been successfully changed. Retry to make sure.")) elif user_profile["avatarUrl"] != old_profile.get("avatarUrl", ""): Notify.success(tr("Your avatar successfully changed"), tr("This change will be applied on your next connection to any server")) - if GameUI.should_display_space_listings: + if GameUI.instance.should_display_space_listings: request_change_page.emit(&"Home") else: Notify.info(tr("No changes to your avatar"), tr("Your avatar was already set to that same avatar")) diff --git a/mirror-godot-app/ui/main_menu/pages/edit_space/basic_settings.gd b/mirror-godot-app/ui/main_menu/pages/edit_space/basic_settings.gd index 611eb427..57ea6d33 100644 --- a/mirror-godot-app/ui/main_menu/pages/edit_space/basic_settings.gd +++ b/mirror-godot-app/ui/main_menu/pages/edit_space/basic_settings.gd @@ -110,8 +110,8 @@ func _on_delete_space_confirmation_dialog_confirmed(): if promise.is_error(): Notify.error(tr("Space Deletion Failed"), promise.get_error_message()) else: - GameUI.main_menu_ui.cleanup_history() - GameUI.main_menu_ui.show_default_subpage() + GameUI.instance.main_menu_ui.cleanup_history() + GameUI.instance.main_menu_ui.show_default_subpage() Notify.success(tr("Space Deleted"), tr("Space deleted successfully.")) @@ -184,7 +184,7 @@ func _on_space_image_updated(promise: Promise, image_index: int): func _on_cancel_button_pressed(): - GameUI.main_menu_ui.history_go_back() + GameUI.instance.main_menu_ui.history_go_back() func _on_publish_button_pressed(): diff --git a/mirror-godot-app/ui/main_menu/pages/edit_space/edit_space.gd b/mirror-godot-app/ui/main_menu/pages/edit_space/edit_space.gd index 6118d702..f0ebcdd5 100644 --- a/mirror-godot-app/ui/main_menu/pages/edit_space/edit_space.gd +++ b/mirror-godot-app/ui/main_menu/pages/edit_space/edit_space.gd @@ -29,7 +29,7 @@ func populate(space: Dictionary) -> void: func _on_back_button_pressed(): - GameUI.main_menu_ui.history_go_back() + GameUI.instance.main_menu_ui.history_go_back() func _on_tab_button_pressed(button: Button, switch_to_tab: Container): diff --git a/mirror-godot-app/ui/main_menu/pages/home_page.gd b/mirror-godot-app/ui/main_menu/pages/home_page.gd index b45d61b0..b824efcc 100644 --- a/mirror-godot-app/ui/main_menu/pages/home_page.gd +++ b/mirror-godot-app/ui/main_menu/pages/home_page.gd @@ -9,7 +9,7 @@ extends Control func _on_view_my_spaces_pressed(): - GameUI.main_menu_ui.change_page(&"My_Spaces") + GameUI.instance.main_menu_ui.change_page(&"My_Spaces") func _on_reload_pressed(): diff --git a/mirror-godot-app/ui/main_menu/pages/home_page_section.gd b/mirror-godot-app/ui/main_menu/pages/home_page_section.gd index 2f22d377..dea31158 100644 --- a/mirror-godot-app/ui/main_menu/pages/home_page_section.gd +++ b/mirror-godot-app/ui/main_menu/pages/home_page_section.gd @@ -154,13 +154,13 @@ func _populate_items(items_data: Array, max_items_number: int) -> void: func _on_create_pressed() -> void: - GameUI.main_menu_ui.change_page(&"My_Spaces") - GameUI.main_menu_ui.change_subpage(&"SelectTemplate") + GameUI.instance.main_menu_ui.change_page(&"My_Spaces") + GameUI.instance.main_menu_ui.change_subpage(&"SelectTemplate") _audio_stream_player_click.play() func _on_space_pressed(space: Dictionary) -> void: - GameUI.main_menu_ui.change_subpage(&"ViewSpace", space) + GameUI.instance.main_menu_ui.change_subpage(&"ViewSpace", space) _audio_stream_player_click.play() var _currently_populating = false diff --git a/mirror-godot-app/ui/main_menu/pages/my_spaces.gd b/mirror-godot-app/ui/main_menu/pages/my_spaces.gd index 8286689c..65b964d0 100644 --- a/mirror-godot-app/ui/main_menu/pages/my_spaces.gd +++ b/mirror-godot-app/ui/main_menu/pages/my_spaces.gd @@ -18,8 +18,8 @@ func _ready() -> void: func _on_template_selected(template: Dictionary) -> void: - GameUI.main_menu_ui.change_page(&"My_Spaces") - GameUI.main_menu_ui.change_subpage(&"CreateSpace", template) + GameUI.instance.main_menu_ui.change_page(&"My_Spaces") + GameUI.instance.main_menu_ui.change_subpage(&"CreateSpace", template) func _on_template_cancel_pressed() -> void: @@ -50,16 +50,16 @@ func _on_finalize_create_pressed(data: Dictionary) -> void: data["template_id"], {"name": data["name"]} ) - GameUI.main_menu_ui.hide() - GameUI.loading_ui.populate(data) - GameUI.loading_ui.populate_status("Creating space") - GameUI.loading_ui.show() + GameUI.instance.main_menu_ui.hide() + GameUI.instance.loading_ui.populate(data) + GameUI.instance.loading_ui.populate_status("Creating space") + GameUI.instance.loading_ui.show() var space_data = await promise.wait_till_fulfilled() if promise.is_error(): Notify.error(tr("Space Creation Failed"), promise.get_error_message()) - GameUI.loading_ui.hide() - GameUI.main_menu_ui.show() + GameUI.instance.loading_ui.hide() + GameUI.instance.main_menu_ui.show() return Zone.client.quit_to_main_menu() - GameUI.loading_ui.populate_status("Joining space") + GameUI.instance.loading_ui.populate_status("Joining space") Zone.client.start_join_zone_by_space_id(space_data["id"]) diff --git a/mirror-godot-app/ui/main_menu/pages/space_select.gd b/mirror-godot-app/ui/main_menu/pages/space_select.gd index 3a2d652b..e8481b62 100644 --- a/mirror-godot-app/ui/main_menu/pages/space_select.gd +++ b/mirror-godot-app/ui/main_menu/pages/space_select.gd @@ -171,13 +171,13 @@ func _on_space_item_added(panel: Control) -> void: func _on_create_pressed() -> void: - GameUI.main_menu_ui.change_page(&"My_Spaces") - GameUI.main_menu_ui.change_subpage(&"SelectTemplate") + GameUI.instance.main_menu_ui.change_page(&"My_Spaces") + GameUI.instance.main_menu_ui.change_subpage(&"SelectTemplate") _audio_stream_player.play() func _on_space_pressed(space: Dictionary) -> void: - GameUI.main_menu_ui.change_subpage("ViewSpace", space) + GameUI.instance.main_menu_ui.change_subpage("ViewSpace", space) _audio_stream_player.play() diff --git a/mirror-godot-app/ui/main_menu/pages/view_space.gd b/mirror-godot-app/ui/main_menu/pages/view_space.gd index 7a9e2582..e2cd8889 100644 --- a/mirror-godot-app/ui/main_menu/pages/view_space.gd +++ b/mirror-godot-app/ui/main_menu/pages/view_space.gd @@ -37,7 +37,7 @@ func _construct_space_url(space_id: String) -> String: func _on_cancel_pressed() -> void: - GameUI.main_menu_ui.history_go_back() + GameUI.instance.main_menu_ui.history_go_back() func _load_avg_space_rating() -> void: @@ -100,7 +100,7 @@ func _preprocess_description(desciption: String) -> String: func populate(space: Dictionary) -> void: - _back_button.visible = GameUI.should_display_space_listings + _back_button.visible = GameUI.instance.should_display_space_listings # cache space _space = Net.space_client.spaces.get(space.get("_id"), space) # always get newest data _entity_action_rating_id = "" @@ -168,7 +168,7 @@ func _on_build_button_pressed(): return Zone.client.quit_to_main_menu() Zone.client.start_join_zone_by_space_id(space_id) - GameUI.loading_ui.set_loading_image(_space_image.texture) + GameUI.instance.loading_ui.set_loading_image(_space_image.texture) # do not call this excessively, we only need to call it when a user publishes @@ -191,7 +191,7 @@ func _on_play_published_space() -> void: return Zone.client.quit_to_main_menu() Zone.client.start_join_play_space_by_space_id(space_id) - GameUI.loading_ui.set_loading_image(_space_image.texture) + GameUI.instance.loading_ui.set_loading_image(_space_image.texture) func _on_copy_url_button_pressed(): @@ -204,7 +204,7 @@ func _get_space_id(space) -> String: func _on_space_settings_button_pressed(): - GameUI.main_menu_ui.change_subpage("EditSpace", _space) + GameUI.instance.main_menu_ui.change_subpage("EditSpace", _space) func _on_star_rating_value_changed(value): @@ -246,8 +246,8 @@ func _on_create_play_server_play_server_created(play_server_id): func _on_description_label_meta_clicked(meta): - GameUI.main_menu_ui.change_page(&"Build") - GameUI.main_menu_ui.change_subpage(&"DiscoverSpaceSelect", meta) + GameUI.instance.main_menu_ui.change_page(&"Build") + GameUI.instance.main_menu_ui.change_subpage(&"DiscoverSpaceSelect", meta) func _on_publish_space_window_space_version_published(): diff --git a/mirror-godot-app/ui/notifications/notify.gd b/mirror-godot-app/ui/notifications/notify.gd index f9046d24..8f337984 100644 --- a/mirror-godot-app/ui/notifications/notify.gd +++ b/mirror-godot-app/ui/notifications/notify.gd @@ -1,4 +1,4 @@ -## Notify: Autoload singleton for notifications, not dependent on GameUI. +## Notify: Autoload singleton for notifications, not dependent on GameUI.instance. extends Node @@ -6,9 +6,10 @@ var _notifications_ui: NotificationsUI = null func _ready() -> void: + ## TODO: Fix this to use a signal to wait for the UI, this code is dumb await get_tree().process_frame - if Zone.is_client() and has_node(^"/root/GameUI"): - _notifications_ui = get_node(^"/root/GameUI").notifications_ui + if Zone.is_client() and has_node(^"/root/GameUI/instance"): + _notifications_ui = get_node(^"/root/GameUI/instance").notifications_ui Zone.notifications_ready = true Zone.notifications_started.emit() diff --git a/mirror-godot-app/ui/restore_space/restore_space_window.gd b/mirror-godot-app/ui/restore_space/restore_space_window.gd index fa3bf569..789ba27f 100644 --- a/mirror-godot-app/ui/restore_space/restore_space_window.gd +++ b/mirror-godot-app/ui/restore_space/restore_space_window.gd @@ -60,7 +60,7 @@ func _on_restore_button_pressed() -> void: _restore_button.disabled = false return _loading_spinner_button.visible = true - GameUI.creator_ui.clear_selection() + GameUI.instance.creator_ui.clear_selection() Zone.space_restore.restore_from_space_version.rpc_id(Zone.SERVER_PEER_ID, space_version_id) diff --git a/mirror-godot-app/ui/teams/scoreboard_window.gd b/mirror-godot-app/ui/teams/scoreboard_window.gd index 488a5e10..46a069ee 100644 --- a/mirror-godot-app/ui/teams/scoreboard_window.gd +++ b/mirror-godot-app/ui/teams/scoreboard_window.gd @@ -80,7 +80,7 @@ func _process(_delta: float) -> void: visible = false return visible = _force_shown or ( - not GameUI.is_keyboard_needed_for_ui() + not GameUI.instance.is_keyboard_needed_for_ui() and Input.is_action_pressed(&"scoreboard_visible") and is_scoreboard_shortcut_enabled() )