@tool class_name SaveGameDisplay extends Button var _is_built: bool = false @export var save: SaveGame: set(new_save): save = new_save if _is_built: rebuild() @export var id: int: set(new_id): id = new_id if _is_built: rebuild() func _init(new_save: SaveGame = SaveGame.new(), new_id: int = 0) -> void: self.save = new_save self.id = new_id func _ready() -> void: save.changed.connect(rebuild) rebuild() _is_built = true func rebuild(): for child in get_children(true): remove_child(child) child.queue_free() if not save.is_valid: disabled = true text = "Slot %d corrupted." % id else: disabled = false text = "" var base_container := HBoxContainer.new() base_container.alignment = BoxContainer.ALIGNMENT_CENTER add_child(base_container) var texture := TextureRect.new() texture.texture = save.thumbnail texture.size_flags_vertical = Control.SIZE_SHRINK_CENTER base_container.add_child(texture) var heading_split := HSplitContainer.new() var heading := Label.new() heading.text = "Slot %d" % id heading.theme_type_variation = "HeaderLarge" var localised_date_time: String var localised_weekday: PackedStringArray var date_time: Dictionary = Time.get_datetime_dict_from_unix_time(save.last_saved) match TranslationServer.get_locale(): "de": localised_weekday = ["Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"] localised_date_time = "%s, %d.%d.%d um %d:%02d" % [localised_weekday[date_time["weekday"]], date_time["day"], date_time["month"], date_time["year"], date_time["hour"], date_time["minute"] ] _: localised_weekday = ["Monday", "Tuseday", "Wensday", "Thursday", "Friday", "Saturday", "Sunday"] localised_date_time = "%s, %d/%d/%d - %d:%02d (%s)" % [localised_weekday[date_time["weekday"]], date_time["day"], date_time["month"], date_time["year"], date_time["hour"] % 12 if date_time["hour"] % 12 > 1 else 12 if date_time["hour"] == 12 or date_time["minute"] == 0 else 0, date_time["minute"], "AM" if date_time["hour"] < 12 else "PM"] var time_label := Label.new() time_label.text = localised_date_time if not save.current_room == State.rooms.NULL else "Start new game" var info:= VBoxContainer.new() base_container.add_child(info) info.add_child(heading_split) heading_split.add_child(heading) heading_split.add_child(time_label) var room:= Label.new() room.theme_type_variation = "HeaderMedium" match save.current_room: State.rooms.NULL: room.text = "Empty Slot" State.rooms.YOUTH: if save.mementos_complete == 0: room.text = "Youth Room" else: room.text = "Intro Sequence" State.rooms.TRANSITION: room.text = "Transitioning to Adulthood" State.rooms.ADULTHOOD: room.text = "Exploring Adulthood" State.rooms.ENDING: room.text = "Ending" var state: = Label.new() state.text = TranslationServer.translate((""" Mementos collected: %d/4 Connections found: %d/8 """).strip_edges()) % [save.calculate_completed_sequences(), save.calculate_total_connections()] #Secrets found: 1/4 info.add_child(room) info.add_child(state) info.size_flags_vertical = Control.SIZE_SHRINK_CENTER theme_type_variation = "SaveButton" call_deferred("resize") func resize(): custom_minimum_size = get_child(0, true).get_combined_minimum_size() + Vector2(64, 32) get_child(0, true).position = Vector2(32, 16)