diff --git a/disk.gd b/disk.gd index 8b9c616..584a618 100644 --- a/disk.gd +++ b/disk.gd @@ -7,5 +7,5 @@ func _ready() -> void: func _on_picked_up() -> void: %Player2D.give_disk(disk_num) - %Player2D.give_objective("disk%d" % disk_num, "Install data disk %d" % disk_num) + %Player2D.give_objective("disk%d" % disk_num, disk_num, "Install data disk %d" % disk_num) print("Picked up disk ", disk_num) diff --git a/objectives_label.gd b/objectives_label.gd index c766a16..430c947 100644 --- a/objectives_label.gd +++ b/objectives_label.gd @@ -3,6 +3,6 @@ extends RichTextLabel # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: var new_text = "OBJECTIVES:\n" - for objective in %Player2D.objectives: - new_text = new_text + %Player2D.objectives[objective] + "\n" + for objective in %Player2D.get_current_objectives(): + new_text = new_text + objective + "\n" text = new_text diff --git a/pharaoh.gd b/pharaoh.gd index 274967a..2f7418c 100644 --- a/pharaoh.gd +++ b/pharaoh.gd @@ -36,4 +36,4 @@ func _on_interacted() -> void: if (not wanted_disk) or %Player2D.has_disk(wanted_disk): return - %Player2D.give_objective("disk%d" % wanted_disk, "Locate data disk %d" % wanted_disk) + %Player2D.give_objective("disk%d" % wanted_disk, wanted_disk, "Locate data disk %d" % wanted_disk) diff --git a/player_2d.gd b/player_2d.gd index 66a4438..6f11c18 100644 --- a/player_2d.gd +++ b/player_2d.gd @@ -52,14 +52,26 @@ func take_disk(disk_num) -> bool: func has_disk(disk_num: int) -> bool: return disk_num in data_disks -func give_objective(id: String, description: String) -> void: - objectives[id] = description +func give_objective(id: String, priority: int, description: String) -> void: + objectives[id] = { + "priority": priority, + "description": description, + "completed": false + } func has_objective(id: String) -> bool: - return objectives.has(id) + return objectives.has(id) and not objectives[id].completed + +func get_current_objectives() -> Array[String]: + var current_objectives = objectives.values() + current_objectives.sort_custom(func(a, b): return a.priority < b.priority) + return current_objectives.filter(func(objective): return not objective.completed).map(func(objective): return objective.description) func complete_objective(id: String) -> bool: - return objectives.erase(id) + if not has_objective(id): + return false + objectives[id].completed = true + return true func on_teleport(): refresh_jump(1)