46 lines
1.3 KiB
GDScript
46 lines
1.3 KiB
GDScript
class_name Folder
|
|
extends RefCounted
|
|
## Папка секции. Хранит только id файлов; сами файлы — в FileRegistry.
|
|
##
|
|
## `reserved` — счётчик слотов, зарезервированных под ещё не завершённые
|
|
## загрузки. В save не пишется: после перезапуска незавершённых загрузок нет.
|
|
|
|
var id: String = ""
|
|
var section: String = ""
|
|
var name: String = ""
|
|
var file_ids: Array[String] = []
|
|
|
|
## Служебное: зарезервированные слоты (в файл сохранения не попадает).
|
|
var reserved: int = 0
|
|
|
|
|
|
func count() -> int:
|
|
return file_ids.size()
|
|
|
|
|
|
## Свободно ли место с учётом резерваций.
|
|
func has_free_slot(capacity: int = 16) -> bool:
|
|
return count() + reserved < capacity
|
|
|
|
|
|
func to_dict() -> Dictionary:
|
|
return {
|
|
"id": id,
|
|
"section": section,
|
|
"name": name,
|
|
"file_ids": file_ids.duplicate(),
|
|
}
|
|
|
|
|
|
static func from_dict(d: Dictionary):
|
|
var f = new()
|
|
f.id = str(d.get("id", ""))
|
|
f.section = str(d.get("section", ""))
|
|
f.name = str(d.get("name", ""))
|
|
var raw = d.get("file_ids", [])
|
|
if raw is Array:
|
|
for value in raw:
|
|
f.file_ids.append(str(value))
|
|
f.reserved = 0
|
|
return f
|