From 65ba9d2960e442dbc685dc4a6abca029f08fb750 Mon Sep 17 00:00:00 2001 From: Nikolai Fedorov Date: Thu, 23 Apr 2026 14:35:59 +0300 Subject: [PATCH] fix tutorial --- scripts/Enemy.gd | 1 + scripts/Main.gd | 50 +++++++++++++++++++++++++++++------------------- 2 files changed, 31 insertions(+), 20 deletions(-) diff --git a/scripts/Enemy.gd b/scripts/Enemy.gd index 25e133a..630f839 100644 --- a/scripts/Enemy.gd +++ b/scripts/Enemy.gd @@ -59,6 +59,7 @@ const CONTACT_CD = 0.7 const AIR_FRICTION = 0.86 func _ready() -> void: + process_mode = Node.PROCESS_MODE_PAUSABLE add_to_group("enemies") mat = mesh_node.material_override.duplicate() as StandardMaterial3D mesh_node.material_override = mat diff --git a/scripts/Main.gd b/scripts/Main.gd index d6636a5..47cc8d0 100644 --- a/scripts/Main.gd +++ b/scripts/Main.gd @@ -31,9 +31,8 @@ var upgrading: bool = false var tutorial_canvas: CanvasLayer var tutorial_image: TextureRect var tutorial_hint: Label -var tutorial_active: bool = false var tutorial_hint_ready: bool = false -var tutorial_timer: float = 0.0 +var tutorial_active: bool = false var tutorial_on_dismiss: Callable = Callable() var shown_tutorials: Dictionary = {} @@ -50,7 +49,6 @@ var upgrade_panel: Panel var gameover_panel: Panel func _ready() -> void: - process_mode = Node.PROCESS_MODE_ALWAYS _spawn_level() _create_camera() _create_ui() @@ -63,12 +61,8 @@ func _ready() -> void: show_tutorial("Tutorial_StartGame", _start_game) func _input(event: InputEvent) -> void: - if tutorial_active and tutorial_hint_ready: - var mb := event as InputEventMouseButton - if mb != null and mb.button_index == MOUSE_BUTTON_LEFT and mb.pressed: - _dismiss_tutorial() - return - + if tutorial_active: + return var motion := event as InputEventMouseMotion if motion != null and Input.mouse_mode == Input.MOUSE_MODE_CAPTURED: cam_yaw -= motion.relative.x * MOUSE_SENS @@ -98,12 +92,6 @@ func _create_camera() -> void: add_child(camera) func _process(delta: float) -> void: - if tutorial_active: - tutorial_timer -= delta - if tutorial_timer <= 0.0 and not tutorial_hint_ready: - tutorial_hint_ready = true - tutorial_hint.visible = true - return if is_instance_valid(player): var yaw_r: float = deg_to_rad(cam_yaw) var pitch_r: float = deg_to_rad(cam_pitch) @@ -397,6 +385,26 @@ func _create_tutorial_overlay() -> void: tutorial_hint.visible = false tutorial_canvas.add_child(tutorial_hint) + var click_cap := Control.new() + click_cap.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT) + click_cap.mouse_filter = Control.MOUSE_FILTER_STOP + click_cap.process_mode = Node.PROCESS_MODE_ALWAYS + click_cap.connect("gui_input", _on_tutorial_input) + tutorial_canvas.add_child(click_cap) + +func _on_tutorial_input(event: InputEvent) -> void: + if not tutorial_hint_ready: + return + var mb := event as InputEventMouseButton + if mb != null and mb.button_index == MOUSE_BUTTON_LEFT and mb.pressed: + _dismiss_tutorial() + +func _set_enemies_paused(paused: bool) -> void: + var mode := Node.PROCESS_MODE_DISABLED if paused else Node.PROCESS_MODE_PAUSABLE + for e in get_tree().get_nodes_in_group("enemies"): + (e as Node).process_mode = mode + spawn_timer.paused = paused + func show_tutorial(key: String, on_dismiss: Callable = Callable()) -> void: if shown_tutorials.get(key, false): if on_dismiss.is_valid(): @@ -406,17 +414,19 @@ func show_tutorial(key: String, on_dismiss: Callable = Callable()) -> void: var path := "res://assets/%s.jpeg" % key tutorial_image.texture = load(path) if ResourceLoader.exists(path) else null tutorial_on_dismiss = on_dismiss - tutorial_active = true tutorial_hint_ready = false - tutorial_timer = 3.0 tutorial_hint.visible = false tutorial_canvas.visible = true - get_tree().paused = true + tutorial_active = true + _set_enemies_paused(true) + await get_tree().create_timer(3.0).timeout + tutorial_hint.visible = true + tutorial_hint_ready = true func _dismiss_tutorial() -> void: - tutorial_active = false tutorial_canvas.visible = false - get_tree().paused = false + tutorial_active = false + _set_enemies_paused(false) if tutorial_on_dismiss.is_valid(): tutorial_on_dismiss.call()