2026-03-05 20:13:45 +03:00
|
|
|
extends Node
|
2026-09-30 08:08:27 +03:00
|
|
|
const E = preload("res://world/owniverse/math/exact.gd")
|
2026-03-05 20:13:45 +03:00
|
|
|
|
2026-09-21 20:42:40 +03:00
|
|
|
const SPEED_LIMIT: int = 6
|
2026-03-30 00:48:20 +03:00
|
|
|
|
2026-09-13 22:57:25 +03:00
|
|
|
# Write a readable diagnostic copy next to the encrypted save. Never used for loading.
|
|
|
|
|
var save_plaintext_copy: bool = true
|
|
|
|
|
|
2026-03-05 20:13:45 +03:00
|
|
|
var Settings: Dictionary = {
|
|
|
|
|
"filename": "save-0001",
|
|
|
|
|
"sound_volume": 1.0,
|
2026-10-03 13:21:53 +03:00
|
|
|
"music_volume": 1.0,
|
|
|
|
|
"sound_enabled": true,
|
|
|
|
|
"music_enabled": true,
|
2026-03-05 20:13:45 +03:00
|
|
|
"language": "en",
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# TODO getter setter for locale
|
|
|
|
|
|
2026-10-03 11:06:52 +03:00
|
|
|
#var Locales: Dictionary = {}
|
2026-03-30 00:48:20 +03:00
|
|
|
var Locale = "en"
|
|
|
|
|
|
2026-04-08 00:23:22 +03:00
|
|
|
var OwniverseEntities: Dictionary = {}
|
|
|
|
|
var OwniverseItems: Dictionary = {}
|
2026-04-05 23:26:43 +03:00
|
|
|
var Templates: Dictionary = {}
|
2026-09-15 23:05:05 +03:00
|
|
|
var LifeRules: Dictionary = {}
|
|
|
|
|
var CivilizationRules: Dictionary = {}
|
2026-04-05 23:26:43 +03:00
|
|
|
|
2026-10-03 13:21:53 +03:00
|
|
|
var Music: Dictionary = {}
|
|
|
|
|
var Effects: Dictionary = {}
|
|
|
|
|
|
2026-08-02 22:56:54 +03:00
|
|
|
var batch_count: float = 40.0 # must be even not odd
|
2026-07-21 23:54:17 +03:00
|
|
|
|
2026-03-30 00:48:20 +03:00
|
|
|
|
2026-10-03 11:06:52 +03:00
|
|
|
#func get_localized_item_description(item_id: String, item: String) -> String:
|
|
|
|
|
#if Locales[Locale].has(item_id):
|
|
|
|
|
#return Locales[Locale][item_id][item]
|
|
|
|
|
#return ""
|
2026-03-30 00:48:20 +03:00
|
|
|
|
2026-04-05 23:26:43 +03:00
|
|
|
|
2026-09-15 22:01:45 +03:00
|
|
|
# Russian templates include the class; legacy English keys omit it.
|
|
|
|
|
func get_template(id: String, category: String, field: String) -> Dictionary:
|
|
|
|
|
var rows: Dictionary = Templates.get(Locale, {})
|
|
|
|
|
for key in [id + "." + category + "." + field, id + "." + field]:
|
|
|
|
|
if rows.has(key):
|
|
|
|
|
return rows[key]
|
|
|
|
|
return {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func render_template(row: Dictionary, variables: Dictionary) -> String:
|
|
|
|
|
var result: String = str(row.get("text", ""))
|
|
|
|
|
for i in range(5):
|
|
|
|
|
var variable: String = str(row.get("value" + str(i), "")).strip_edges()
|
|
|
|
|
var value: String = str(variables.get(variable, "—")) if variable != "" else ""
|
|
|
|
|
result = result.replace("%value" + str(i) + "%", value)
|
|
|
|
|
return result.replace("<br>", "\n").replace("[p]", "\n")
|
|
|
|
|
|
|
|
|
|
|
2026-04-08 00:23:22 +03:00
|
|
|
func get_description(item_id: String, items: Array = []) -> String:
|
2026-09-15 22:01:45 +03:00
|
|
|
var row: Dictionary = Templates.get(Locale, {}).get(item_id, {})
|
|
|
|
|
var variables: Dictionary = {}
|
|
|
|
|
for i in mini(items.size(), 5):
|
|
|
|
|
variables[str(row.get("value" + str(i), ""))] = items[i]
|
|
|
|
|
return render_template(row, variables)
|
2026-04-05 23:26:43 +03:00
|
|
|
|
|
|
|
|
|
2026-09-30 08:08:27 +03:00
|
|
|
func format_number(value, digits: int = 0) -> String:
|
|
|
|
|
return E.grouped(value, digits)
|
2026-06-03 23:26:44 +03:00
|
|
|
|
|
|
|
|
|
2026-03-05 20:13:45 +03:00
|
|
|
func _ready() -> void:
|
2026-03-30 00:48:20 +03:00
|
|
|
|
2026-10-03 11:06:52 +03:00
|
|
|
LifeRules = OwniverseLifeRuleLoader.get_data()
|
|
|
|
|
OwniverseEntities = OwniverseEntityLoader.get_data()
|
|
|
|
|
OwniverseItems = OwniverseItemLoader.get_data()
|
|
|
|
|
Templates = OwniverseTemplateLoader.get_data()
|
|
|
|
|
CivilizationRules = OwniverseCivilizationRuleLoader.get_data()
|
2026-03-05 20:13:45 +03:00
|
|
|
|
2026-10-03 13:21:53 +03:00
|
|
|
Music = OwniverseAudioLoader.get_music()
|
|
|
|
|
Effects = OwniverseAudioLoader.get_effects()
|
|
|
|
|
|
2026-05-05 23:49:12 +03:00
|
|
|
|
|
|
|
|
func _read_folder_list(folder_name: String) -> void:
|
|
|
|
|
var dir := DirAccess.open(folder_name)
|
|
|
|
|
if dir == null: printerr("Could not open folder: ", folder_name); return
|
|
|
|
|
dir.list_dir_begin()
|
|
|
|
|
for file: String in dir.get_files():
|
|
|
|
|
print(" → ", file)
|
|
|
|
|
|
|
|
|
|
|
2026-03-05 20:13:45 +03:00
|
|
|
func _print_dict(dict_to_print: Dictionary):
|
|
|
|
|
for d in dict_to_print:
|
|
|
|
|
print(d, " → ", dict_to_print[d])
|