|
1 | 1 | extends HBoxContainer |
2 | 2 |
|
3 | | -var levels: Dictionary |
4 | | -var level |
| 3 | +var levels = [ |
| 4 | + BubbleSort, |
| 5 | +] |
| 6 | +var level: ComparisonSort |
5 | 7 |
|
6 | 8 | func _ready(): |
7 | | - # Load level data |
8 | | - var descriptions = File.new() |
9 | | - descriptions.open("res://assets/levels.json", File.READ) |
10 | | - levels = parse_json(descriptions.get_as_text()) |
11 | | - # Dynamically add buttons |
| 9 | + # Dynamically load level data |
12 | 10 | for level in levels: |
13 | 11 | var button = Button.new() |
14 | | - button.text = level |
| 12 | + button.text = level.TITLE |
15 | 13 | button.align = Button.ALIGN_LEFT |
16 | 14 | button.connect("focus_entered", self, "_on_Button_focus_changed") |
17 | | - button.connect("pressed", self, "_on_Button_pressed", [level]) |
| 15 | + button.connect("pressed", self, "_on_Button_pressed", [level.TITLE]) |
18 | 16 | $LevelsBorder/Levels.add_child(button) |
19 | 17 | # Automatically focus on first button |
20 | 18 | $LevelsBorder/Levels.get_child(0).grab_focus() |
21 | 19 |
|
22 | 20 | func _on_Button_focus_changed(): |
23 | | - var name = get_focus_owner().text |
24 | | - $Preview/InfoBorder/Info/Description.text = levels[name]["about"] |
25 | | - level = get_level(name).new(ArrayModel.new(10)) |
| 21 | + level = get_level(get_focus_owner().text).new(ArrayModel.new(10)) |
26 | 22 | level.active = false |
| 23 | + $Preview/InfoBorder/Info/Description.text = level.ABOUT.replace("\n", " ") |
27 | 24 | # Start over when simulation is finished |
28 | 25 | level.connect("done", self, "_on_Button_focus_changed") |
29 | 26 | # Replace old display with new |
30 | 27 | for child in $Preview/Display.get_children(): |
31 | 28 | child.queue_free() |
32 | 29 | $Preview/Display.add_child(ArrayView.new(level)) |
33 | 30 |
|
34 | | -func _on_Button_pressed(level): |
35 | | - scene.change_scene("res://scenes/play.tscn", |
36 | | - {"name": level, "level": get_level(level)}) |
| 31 | +func _on_Button_pressed(title): |
| 32 | + scene.change_scene("res://scenes/play.tscn", {"level": get_level(title)}) |
37 | 33 |
|
38 | | -func get_level(level): |
39 | | - match level: |
40 | | - "BUBBLE SORT": |
41 | | - return BubbleSort |
| 34 | +func get_level(title): |
| 35 | + for level in levels: |
| 36 | + if level.TITLE == title: |
| 37 | + return level |
42 | 38 |
|
43 | 39 | func _on_Timer_timeout(): |
44 | 40 | level.next() |
0 commit comments