132 lines
3.9 KiB
GDScript
132 lines
3.9 KiB
GDScript
class_name SaveGameDisplay extends Button
|
|
|
|
signal delete_requested
|
|
|
|
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 = ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"]
|
|
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 = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
|
|
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()
|
|
info.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
|
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.completed_sequences, save.total_connections]
|
|
#Secrets found: 1/4
|
|
|
|
info.add_child(room)
|
|
info.add_child(state)
|
|
info.size_flags_vertical = Control.SIZE_SHRINK_CENTER
|
|
|
|
# Delete button anchored to bottom right
|
|
var delete_button := Button.new()
|
|
delete_button.text = "Delete"
|
|
delete_button.size_flags_vertical = Control.SIZE_SHRINK_END
|
|
delete_button.pressed.connect(func():
|
|
delete_requested.emit()
|
|
get_viewport().set_input_as_handled()
|
|
)
|
|
base_container.add_child(delete_button)
|
|
|
|
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)
|