Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
96 changes: 75 additions & 21 deletions Scripts/level.gd
Original file line number Diff line number Diff line change
@@ -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)
37 changes: 37 additions & 0 deletions Scripts/level_title.gd
Original file line number Diff line number Diff line change
@@ -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