From 1ed5c2a4d9b45a42a5e108f5b68b859ff10af1db Mon Sep 17 00:00:00 2001 From: Tusharjamdade Date: Sat, 31 Jan 2026 12:34:07 +0000 Subject: [PATCH] feat: add level title indicator to display current EDA pattern --- Scripts/level.gd | 96 +++++++++++++++++++++++++++++++++--------- Scripts/level_title.gd | 37 ++++++++++++++++ 2 files changed, 112 insertions(+), 21 deletions(-) create mode 100644 Scripts/level_title.gd diff --git a/Scripts/level.gd b/Scripts/level.gd index 19b15b6..7e45efb 100644 --- a/Scripts/level.gd +++ b/Scripts/level.gd @@ -1,51 +1,105 @@ extends Node -var sinkBoxMatchNeeded=[false,true,true,false] + +# Configuration: UI Display Names +var level_display_names = { + "basicEventFlow": "Basic Event Flow", + "boxClick": "Event Filtering & Interaction", + "multiSink": "Fan-Out Pattern (Multi-Sink)", + "dlqPattern": "Dead Letter Queue Pattern" +} + +var sinkBoxMatchNeeded = [false, true, true, false] var sinkBoxMatchPresent var sinkUsed -var dlsRequired=[false,false,false,true] +var dlsRequired = [false, false, false, true] var dlsUsed -var totalbox=[2,2,3] +var totalbox = [2, 2, 3] var nextLevel -var levels=["basicEventFlow","boxClick","multiSink","dlqPattern"] -var levelind=0 +var levels = ["basicEventFlow", "boxClick", "multiSink", "dlqPattern"] +var levelind = 0 + +var _title_overlay: CanvasLayer + +func _ready(): + var OverlayScript = load("res://Scripts/level_title.gd") + if OverlayScript: + _title_overlay = OverlayScript.new() + add_child(_title_overlay) + # Update the text immediately on load + _update_level_title() + else: + print("Error: Could not load level_title.gd") func initialise(): - sinkBoxMatchPresent=true - sinkUsed=false - totalbox=0 - nextLevel=false - dlsUsed=false + sinkBoxMatchPresent = true + sinkUsed = false + totalbox = 0 + nextLevel = false + dlsUsed = false + + # Update the UI whenever the level resets + _update_level_title() -func next_level(): +func next_level(): + # Check Win Conditions based on current level requirements if sinkUsed: if not sinkBoxMatchNeeded[levelind] and not dlsRequired[levelind]: - print("if next level entered",sinkBoxMatchNeeded,dlsRequired) - nextLevel=true + print("if next level entered", sinkBoxMatchNeeded, dlsRequired) + nextLevel = true elif sinkBoxMatchNeeded[levelind] and sinkBoxMatchPresent: - print("elif next level entered",sinkBoxMatchNeeded,sinkBoxMatchPresent) - nextLevel=true + print("elif next level entered", sinkBoxMatchNeeded, sinkBoxMatchPresent) + nextLevel = true elif dlsRequired[levelind] and dlsUsed: - print("elif dls",dlsUsed) - nextLevel=true + print("elif dls", dlsUsed) + nextLevel = true var message_display = preload("res://Scenes/message_display.tscn").instantiate() add_child(message_display) message_display.z_index = 999 + if nextLevel: print("success") message_display.show_message("Success") await message_display.show_message_for_duration(2.0) message_display.visible = false - levelind+=1 - if levelind!=levels.size(): - var next_level_path="res://Scenes/"+levels[levelind]+".tscn" + + levelind += 1 + + if levelind != levels.size(): + var next_level_path = "res://Scenes/" + levels[levelind] + ".tscn" get_tree().change_scene_to_file(next_level_path) - ConveyerController.initialise() + + if ConveyerController.has_method("initialise"): + ConveyerController.initialise() + + # Reset Level Logic + initialise() else: print("End of Levels.") get_tree().change_scene_to_file("res://Scenes/end_of_all_levels.tscn") + + # Hide the top-left UI on the final screen + if _title_overlay: + _title_overlay.set_visible_state(false) else: print("Failed. Try Again") message_display.show_message("Failed. Try Again") await message_display.show_message_for_duration(2.0) message_display.visible = false + +func _update_level_title(): + if not _title_overlay: return + + # Ensure UI is visible + _title_overlay.set_visible_state(true) + + if levelind < levels.size(): + var internal_name = levels[levelind] + var display_text = internal_name + + if level_display_names.has(internal_name): + display_text = level_display_names[internal_name] + + _title_overlay.update_text("Pattern: " + display_text) + else: + _title_overlay.set_visible_state(false) \ No newline at end of file diff --git a/Scripts/level_title.gd b/Scripts/level_title.gd new file mode 100644 index 0000000..7fd9b4a --- /dev/null +++ b/Scripts/level_title.gd @@ -0,0 +1,37 @@ +extends CanvasLayer + +var _title_label: Label + +func _ready(): + name = "LevelTitleOverlay" + + _title_label = Label.new() + add_child(_title_label) + + _title_label.anchors_preset = Control.PRESET_TOP_LEFT + _title_label.position = Vector2(20, 80) + _title_label.grow_horizontal = Control.GROW_DIRECTION_END + _title_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_LEFT + _title_label.vertical_alignment = VERTICAL_ALIGNMENT_CENTER + + var settings = LabelSettings.new() + settings.font_size = 22 + + settings.outline_size = 5 + settings.outline_color = Color(0.05, 0.05, 0.05, 1) + + settings.shadow_size = 4 + settings.shadow_color = Color(0, 0, 0, 0.4) + settings.shadow_offset = Vector2(2, 2) + + settings.font_color = Color(1, 0.9, 0.6, 1) + + _title_label.label_settings = settings + +func update_text(text: String): + _title_label.text = text + _title_label.set_anchors_preset(Control.PRESET_TOP_LEFT) + _title_label.position = Vector2(20, 80) + +func set_visible_state(is_visible: bool): + visible = is_visible \ No newline at end of file