From cef940108fe15752c3ef66f43f5169403fa2f71d Mon Sep 17 00:00:00 2001 From: Spartan322 Date: Sat, 3 Jun 2023 14:37:10 -0400 Subject: Reorganize the file structure of the files in `game/src` --- game/src/Autoload/Arguments/ArgumentOption.gd | 60 ------ game/src/Autoload/Arguments/ArgumentParser.gd | 267 ------------------------ game/src/Autoload/Arguments/ArgumentParser.tscn | 32 --- game/src/Autoload/Events.gd | 45 ---- game/src/Autoload/Events/GameDebug.gd | 21 -- game/src/Autoload/Events/Localisation.gd | 30 --- game/src/Autoload/Events/Options.gd | 30 --- game/src/Autoload/Events/ShaderManager.gd | 48 ----- game/src/Autoload/GuiScale.gd | 62 ------ game/src/Autoload/Resolution.gd | 101 --------- game/src/Autoload/SaveManager.gd | 55 ----- game/src/Autoload/SoundManager.gd | 42 ---- 12 files changed, 793 deletions(-) delete mode 100644 game/src/Autoload/Arguments/ArgumentOption.gd delete mode 100644 game/src/Autoload/Arguments/ArgumentParser.gd delete mode 100644 game/src/Autoload/Arguments/ArgumentParser.tscn delete mode 100644 game/src/Autoload/Events.gd delete mode 100644 game/src/Autoload/Events/GameDebug.gd delete mode 100644 game/src/Autoload/Events/Localisation.gd delete mode 100644 game/src/Autoload/Events/Options.gd delete mode 100644 game/src/Autoload/Events/ShaderManager.gd delete mode 100644 game/src/Autoload/GuiScale.gd delete mode 100644 game/src/Autoload/Resolution.gd delete mode 100644 game/src/Autoload/SaveManager.gd delete mode 100644 game/src/Autoload/SoundManager.gd (limited to 'game/src/Autoload') diff --git a/game/src/Autoload/Arguments/ArgumentOption.gd b/game/src/Autoload/Arguments/ArgumentOption.gd deleted file mode 100644 index f14cef0..0000000 --- a/game/src/Autoload/Arguments/ArgumentOption.gd +++ /dev/null @@ -1,60 +0,0 @@ -@tool -class_name ArgumentOption -extends Resource - -@export var name : StringName -@export var aliases : Array[StringName] = [] -@export var type : Variant.Type : - get: return type - set(v): - type = v - match v: - TYPE_BOOL: default_value = false - TYPE_INT: default_value = 0 - TYPE_FLOAT: default_value = 0.0 - TYPE_STRING: default_value = "" - TYPE_STRING_NAME: default_value = &"" - TYPE_COLOR: default_value = Color() - _: default_value = null - notify_property_list_changed() -var default_value -@export var description : String - -func _init(_name = "", _type = TYPE_NIL, _description = "", default = null): - name = _name - type = _type - if default != null and typeof(default) == type: - default_value = default - description = _description - -func add_alias(alias : StringName) -> ArgumentOption: - aliases.append(alias) - return self - -func get_type_string() -> StringName: - match type: - TYPE_NIL: return "null" - TYPE_BOOL: return "boolean" - TYPE_INT: return "integer" - TYPE_FLOAT: return "float" - TYPE_STRING, TYPE_STRING_NAME: return "string" - TYPE_COLOR: return "color" - return "" - -func _get(property): - if property == "default_value": return default_value - -func _set(property, value): - if property == "default_value": - default_value = value - return true - -func _get_property_list(): - var properties := [] - - properties.append({ - "name": "default_value", - "type": type - }) - - return properties diff --git a/game/src/Autoload/Arguments/ArgumentParser.gd b/game/src/Autoload/Arguments/ArgumentParser.gd deleted file mode 100644 index ce89dd8..0000000 --- a/game/src/Autoload/Arguments/ArgumentParser.gd +++ /dev/null @@ -1,267 +0,0 @@ -@tool -extends Node - -const argument_setting_path := &"openvic/data/arguments" - -@export var option_array : Array[ArgumentOption] = [ - ArgumentOption.new( - "help", - TYPE_BOOL, - "Displays help and quits.", - false - ).add_alias(&"h") -] - -const color_name_array : PackedStringArray =[ - "aliceblue", "antiquewhite", "aqua", "aquamarine", - "azure", "beige", "bisque", "black", "blanchedalmond", - "blue", "blueviolet", "brown", "burlywood", "cadetblue", - "chartreuse", "chocolate", "coral", "cornflower", "cornsilk", - "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", - "darkgray", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen", - "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", - "darkslateblue", "darkslategray", "darkturquoise", "darkviolet", - "deeppink", "deepskyblue", "dimgray", "dodgerblue", "firebrick", - "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", - "gold", "goldenrod", "gray", "green", "greenyellow", "honeydew", - "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", - "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", - "lightcyan", "lightgoldenrod", "lightgray", "lightgreen", "lightpink", - "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", - "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", - "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", - "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", - "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", - "mistyrose", "moccasin", "navajowhite", "navyblue", "oldlace", "olive", - "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", - "palegreen", "paleturquoise", "palevioletred", "papayawhip", - "peachpuff", "peru", "pink", "plum", "powderblue", "purple", - "rebeccapurple", "red", "rosybrown", "royalblue", "saddlebrown", - "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", - "skyblue", "slateblue", "slategray", "snow", "springgreen", "steelblue", - "tan", "teal", "thistle", "tomato", "transparent", "turquoise", "violet", - "webgray", "webgreen", "webmaroon", "webpurple", "wheat", "white", - "whitesmoke", "yellow", "yellowgreen" -] - -func _parse_value(arg_name : StringName, value_string : String, type : Variant.Type) -> Variant: - match type: - TYPE_NIL: return null - TYPE_BOOL: - value_string = value_string.to_lower() - if value_string == "true" or value_string == "t" or value_string == "yes" or value_string == "y": - return true - if value_string == "false" or value_string == "f" or value_string == "no" or value_string == "n": - return false - push_error("'%s' must be a valid boolean, '%s' is an invalid value." % [arg_name, value_string]) - return null - TYPE_INT: - if value_string.is_valid_int(): - return value_string.to_int() - push_error("'%s' must be a valid integer, '%s' is an invalid value." % [arg_name, value_string]) - return null - TYPE_FLOAT: - if value_string.is_valid_float(): - return value_string.to_float() - push_error("'%s' must be a valid float, '%s' is an invalid value." % [arg_name, value_string]) - return null - TYPE_STRING, TYPE_STRING_NAME: - return value_string - TYPE_COLOR: - if Color.html_is_valid(value_string) or value_string.to_lower() in color_name_array: - return Color.from_string(value_string, Color()) - push_error("'%s' must be an html Color or Color name, '%s' is an invalid value." % [arg_name, value_string]) - return null - # Unsupported types - TYPE_VECTOR2, \ - TYPE_VECTOR2I, \ - TYPE_VECTOR3, \ - TYPE_VECTOR3I, \ - TYPE_VECTOR4, \ - TYPE_VECTOR4I, \ - TYPE_RECT2, \ - TYPE_RECT2I: - push_warning("Value type '%s' may not be supported." % type) - var data_array = value_string.lstrip("(").rstrip(")").split(",", false) - for index in range(data_array.size()): - data_array[index] = " " + data_array[index].strip_edges() - match type: - TYPE_VECTOR2: - if data_array.size() != 2: - push_error("'%s' value must be a Vector2, '%s' is an invalid value." % [arg_name, value_string]) - return null - return str_to_var("Vector2(%s )" % ",".join(data_array)) - TYPE_VECTOR2I: - if data_array.size() != 2: - push_error("'%s' value must be a Vector2i, '%s' is an invalid value." % [arg_name, value_string]) - return null - return str_to_var("Vector2i(%s )" % ",".join(data_array)) - TYPE_VECTOR3: - if data_array.size() != 2: - push_error("'%s' value must be a Vector3, '%s' is an invalid value." % [arg_name, value_string]) - return null - return str_to_var("Vector3(%s )" % ",".join(data_array)) - TYPE_VECTOR3I: - if data_array.size() != 2: - push_error("'%s' value must be a Vector3i, '%s' is an invalid value." % [arg_name, value_string]) - return null - return str_to_var("Vector3i(%s )" % ",".join(data_array)) - TYPE_VECTOR4: - if data_array.size() != 2: - push_error("'%s' value must be a Vector4, '%s' is an invalid value." % [arg_name, value_string]) - return null - return str_to_var("Vector4(%s )" % ",".join(data_array)) - TYPE_VECTOR4I: - if data_array.size() != 2: - push_error("'%s' value must be a Vector4i, '%s' is an invalid value." % [arg_name, value_string]) - return null - return str_to_var("Vector4i(%s )" % ",".join(data_array)) - TYPE_RECT2: - if data_array.size() != 2: - push_error("'%s' value must be a Rect2, '%s' is an invalid value." % [arg_name, value_string]) - return null - return str_to_var("Rect2(%s )" % ",".join(data_array)) - TYPE_RECT2I: - if data_array.size() != 2: - push_error("'%s' value must be a Rect2i, '%s' is an invalid value." % [arg_name, value_string]) - return null - return str_to_var("Rect2i(%s )" % ",".join(data_array)) - _: - push_error("'%s' value of type '%s' requested but could not be parsed." % [arg_name, type]) - return null - - return null - -# Missing types -# TYPE_TRANSFORM2D = 11 -# TYPE_VECTOR4 = 12 -# TYPE_VECTOR4I = 13 -# TYPE_PLANE = 14 -# TYPE_QUATERNION = 15 -# TYPE_AABB = 16 -# TYPE_BASIS = 17 -# TYPE_TRANSFORM3D = 18 -# TYPE_PROJECTION = 19 -# TYPE_NODE_PATH = 22 -# TYPE_RID = 23 -# TYPE_OBJECT = 24 -# TYPE_CALLABLE = 25 -# TYPE_SIGNAL = 26 -# TYPE_DICTIONARY = 27 -# TYPE_ARRAY = 28 -# TYPE_PACKED_BYTE_ARRAY = 29 -# TYPE_PACKED_INT32_ARRAY = 30 -# TYPE_PACKED_INT64_ARRAY = 31 -# TYPE_PACKED_FLOAT32_ARRAY = 32 -# TYPE_PACKED_FLOAT64_ARRAY = 33 -# TYPE_PACKED_STRING_ARRAY = 34 -# TYPE_PACKED_VECTOR2_ARRAY = 35 -# TYPE_PACKED_VECTOR3_ARRAY = 36 -# TYPE_PACKED_COLOR_ARRAY = 37 - -func _parse_argument_list(dictionary : Dictionary, arg_list : PackedStringArray) -> Dictionary: - var current_key : String = "" - var current_option : ArgumentOption = null - for arg in arg_list: - if current_option != null and not arg.begins_with("-"): - var result = _parse_value(current_key, arg, current_option.type) - if result != null: - dictionary[current_option.name] = result - current_option = null - continue - - if current_option != null: - push_warning("Valid argument '%s' was not set as a value, skipping." % current_key) - - if arg.begins_with("-"): - current_option = null - arg = arg.substr(1) - var key := &"" - var value := &"" - - # Support for Unix shorthand of multiple boolean arguments - # eg: "-abc" means a == true, b == true, c == true - if arg.length() > 1 and arg[0] != "-" and arg[1] != "=": - for c in arg: - for o in option_array: - if o.aliases.any(func(v): return c == v): - dictionary[o.name] = true - continue - - # Support for = key/value split - # eg: "-v=5" and "--value=5" means v == 5 and value == 5 - var first_equal := arg.find("=") - if first_equal > -1: - key = arg.substr(0, first_equal - 1) - value = arg.substr(first_equal + 1) - else: - key = arg - - # Removes - for full name arguments - if key.begins_with("-"): - key = key.substr(1) - - for o in option_array: - if key == o.name or o.aliases.any(func(v): return key == v): - current_option = o - break - - if current_option == null: - push_warning("Invalid argument '%s' found, skipping." % key) - continue - - current_key = key - if first_equal > -1: - var arg_result = _parse_value(key, value, current_option.type) - if arg_result != null: - dictionary[current_option.name] = arg_result - current_option = null - - return dictionary - -func _print_help(): - var project_name : StringName = ProjectSettings.get_setting_with_override(&"application/config/name") - var project_version : String = _GIT_INFO_.tag - var project_hash : String = _GIT_INFO_.short_hash - var project_website : String = "https://openvic.com" - var project_description : String = ProjectSettings.get_setting_with_override(&"application/config/description") - print_rich( -""" -%s - %s - %s - %s -%s - -%s - -Options: -""" - % [ - project_name, - project_version, - project_hash, - project_website, - project_description, - "usage: %s [options]" % OS.get_executable_path().get_file() - ] - ) - for option in option_array: - print_rich(" --%s%s%s" % [ - (option.name + (",-%s" % (",-".join(option.aliases)) if option.aliases.size() > 0 else "")).rpad(45), - ("Type: %s - Default Value: %s" % [option.get_type_string(), option.default_value]).rpad(45), - option.description - ]) -func _ready(): - if Engine.is_editor_hint(): return - - var argument_dictionary : Dictionary = {} - if ProjectSettings.has_setting(argument_setting_path): - argument_dictionary = ProjectSettings.get_setting_with_override(argument_setting_path) - for option in option_array: - argument_dictionary[option.name] = option.default_value - - _parse_argument_list(argument_dictionary, OS.get_cmdline_args()) - _parse_argument_list(argument_dictionary, OS.get_cmdline_user_args()) - - ProjectSettings.set_setting(argument_setting_path, argument_dictionary) - if argument_dictionary[&"help"]: - _print_help() - get_tree().quit() diff --git a/game/src/Autoload/Arguments/ArgumentParser.tscn b/game/src/Autoload/Arguments/ArgumentParser.tscn deleted file mode 100644 index 8fda8f1..0000000 --- a/game/src/Autoload/Arguments/ArgumentParser.tscn +++ /dev/null @@ -1,32 +0,0 @@ -[gd_scene load_steps=6 format=3 uid="uid://dayjmgc34tqo6"] - -[ext_resource type="Script" path="res://src/Autoload/Arguments/ArgumentParser.gd" id="1_pc7xr"] -[ext_resource type="Script" path="res://src/Autoload/Arguments/ArgumentOption.gd" id="2_4hguj"] - -[sub_resource type="Resource" id="Resource_tq3y4"] -script = ExtResource("2_4hguj") -name = &"help" -aliases = Array[StringName]([&"h"]) -type = 1 -description = "Displays help and quits." -default_value = false - -[sub_resource type="Resource" id="Resource_j1to4"] -script = ExtResource("2_4hguj") -name = &"game-debug" -aliases = Array[StringName]([&"d", &"-debug", &"-debug-mode"]) -type = 1 -description = "Start in debug mode." -default_value = false - -[sub_resource type="Resource" id="Resource_tiax1"] -script = ExtResource("2_4hguj") -name = &"compatibility-mode" -aliases = Array[StringName]([&"-compat"]) -type = 4 -description = "Load Victoria 2 assets from this path." -default_value = "" - -[node name="ArgumentParser" type="Node"] -script = ExtResource("1_pc7xr") -option_array = Array[ExtResource("2_4hguj")]([SubResource("Resource_tq3y4"), SubResource("Resource_j1to4"), SubResource("Resource_tiax1")]) diff --git a/game/src/Autoload/Events.gd b/game/src/Autoload/Events.gd deleted file mode 100644 index 4387cc7..0000000 --- a/game/src/Autoload/Events.gd +++ /dev/null @@ -1,45 +0,0 @@ -extends Node - -var GameDebug = preload("Events/GameDebug.gd").new() -var Options = preload("Events/Options.gd").new() -var Localisation = preload("Events/Localisation.gd").new() -var ShaderManager = preload("Events/ShaderManager.gd").new() - -var _define_filepaths_dict : Dictionary = { - GameSingleton.get_province_identifier_file_key(): "res://common/map/provinces.json", - GameSingleton.get_water_province_file_key(): "res://common/map/water.json", - GameSingleton.get_region_file_key(): "res://common/map/regions.json", - GameSingleton.get_terrain_variant_file_key(): "res://common/map/terrain.json", - GameSingleton.get_terrain_texture_dir_key(): "res://art/terrain/", - GameSingleton.get_province_image_file_key(): "res://common/map/provinces.png", - GameSingleton.get_terrain_image_file_key(): "res://common/map/terrain.png", - GameSingleton.get_goods_file_key(): "res://common/goods.json", - GameSingleton.get_good_icons_dir_key(): "res://art/economy/goods" -} - -# REQUIREMENTS -# * FS-333, FS-334, FS-335, FS-341 -func _ready(): - GameSingleton.setup_logger() - - # Set this to your Vic2 install dir or a mod's dir to enable compatibility mode - # (this won't work for mods which rely on vanilla map assets, copy missing assets - # into the mod's dir for a temporary fix) - # Usage: OpenVic --compatibility-mode - - var compatibility_mode_path : String - if ProjectSettings.has_setting(ArgumentParser.argument_setting_path): - var arg_dictionary : Dictionary = ProjectSettings.get_setting(ArgumentParser.argument_setting_path) - compatibility_mode_path = arg_dictionary.get(&"compatibility-mode", compatibility_mode_path) - - var start := Time.get_ticks_usec() - - if compatibility_mode_path: - if GameSingleton.load_defines_compatibility_mode(compatibility_mode_path) != OK: - push_error("Errors loading game defines!") - else: - if GameSingleton.load_defines(_define_filepaths_dict) != OK: - push_error("Errors loading game defines!") - - var end := Time.get_ticks_usec() - print("Loading took ", float(end - start) / 1000000, " seconds") diff --git a/game/src/Autoload/Events/GameDebug.gd b/game/src/Autoload/Events/GameDebug.gd deleted file mode 100644 index df7a23a..0000000 --- a/game/src/Autoload/Events/GameDebug.gd +++ /dev/null @@ -1,21 +0,0 @@ -extends RefCounted - -# REQUIREMENTS: -# * SS-56 -func _init(): - for engine_args in OS.get_cmdline_args(): - match(engine_args): - "--game-debug": - set_debug_mode(true) - - for engine_args in OS.get_cmdline_user_args(): - match(engine_args): - "--game-debug", "-d", "--debug", "--debug-mode": - set_debug_mode(true) - -func set_debug_mode(value : bool) -> void: - ProjectSettings.set_setting("openvic/debug/enabled", value) - print("Set debug mode to: ", value) - -func is_debug_mode() -> bool: - return ProjectSettings.get_setting("openvic/debug/enabled", false) diff --git a/game/src/Autoload/Events/Localisation.gd b/game/src/Autoload/Events/Localisation.gd deleted file mode 100644 index eda7e51..0000000 --- a/game/src/Autoload/Events/Localisation.gd +++ /dev/null @@ -1,30 +0,0 @@ -extends RefCounted - -# REQUIREMENTS -# * SS-59, SS-60, SS-61 -func get_default_locale() -> String: - var locales := TranslationServer.get_loaded_locales() - var default_locale := OS.get_locale() - if default_locale in locales: - return default_locale - var default_language := OS.get_locale_language() - for locale in locales: - if locale.begins_with(default_language): - return default_language - return ProjectSettings.get_setting("internationalization/locale/fallback", "en_GB") - -func load_localisation(dir_path : String) -> void: - if LoadLocalisation.load_localisation_dir(dir_path) == OK: - print("loaded locales: ", TranslationServer.get_loaded_locales()) - else: - push_error("Failed to load localisation directory: ", dir_path) - -# REQUIREMENTS -# * SS-57 -# * FS-17 -func _init(): - var localisation_dir_path : String = ProjectSettings.get_setting("internationalization/locale/localisation_path", "") - if localisation_dir_path.is_empty(): - push_error("Missing localisation_path setting!") - else: - load_localisation(localisation_dir_path) diff --git a/game/src/Autoload/Events/Options.gd b/game/src/Autoload/Events/Options.gd deleted file mode 100644 index fbeccef..0000000 --- a/game/src/Autoload/Events/Options.gd +++ /dev/null @@ -1,30 +0,0 @@ -extends RefCounted - -signal save_settings(save_file: ConfigFile) -signal load_settings(load_file: ConfigFile) -signal reset_settings() - -func load_settings_from_file() -> void: - load_settings.emit(_settings_file) - -# REQUIREMENTS -# * SS-11 -func save_settings_to_file() -> void: - save_settings.emit(_settings_file) - _settings_file.save(_settings_file_path) - -func try_reset_settings() -> void: - reset_settings.emit() - -const settings_file_path_setting : String = "openvic/settings/settings_file_path" -const settings_file_path_default : String = "user://settings.cfg" - -var _settings_file_path : String = ProjectSettings.get_setting(settings_file_path_setting, settings_file_path_default) -var _settings_file := ConfigFile.new() - -# REQUIREMENTS -# * SS-9 -# * UIFUN-7 -func _init(): - if FileAccess.file_exists(_settings_file_path): - _settings_file.load(_settings_file_path) diff --git a/game/src/Autoload/Events/ShaderManager.gd b/game/src/Autoload/Events/ShaderManager.gd deleted file mode 100644 index a503c52..0000000 --- a/game/src/Autoload/Events/ShaderManager.gd +++ /dev/null @@ -1,48 +0,0 @@ -extends RefCounted - -const param_province_shape_tex : StringName = &"province_shape_tex" -const param_province_shape_subdivisions : StringName = &"province_shape_subdivisions" -const param_province_colour_tex : StringName = &"province_colour_tex" -const param_hover_index : StringName = &"hover_index" -const param_selected_index : StringName = &"selected_index" -const param_terrain_tex : StringName = &"terrain_tex" -const param_terrain_tile_factor : StringName = &"terrain_tile_factor" - -func set_up_shader(material : Material, add_cosmetic_textures : bool) -> Error: - # Shader Material - if material == null: - push_error("material is null!") - return FAILED - if not material is ShaderMaterial: - push_error("Invalid map mesh material class: ", material.get_class()) - return FAILED - var shader_material : ShaderMaterial = material - - # Province shape texture - var province_shape_texture := GameSingleton.get_province_shape_texture() - if province_shape_texture == null: - push_error("Failed to get province shape texture!") - return FAILED - shader_material.set_shader_parameter(param_province_shape_tex, province_shape_texture) - var subdivisions := GameSingleton.get_province_shape_image_subdivisions() - if subdivisions.x < 1 or subdivisions.y < 1: - push_error("Invalid province shape image subdivision: ", subdivisions.x, "x", subdivisions.y) - return FAILED - shader_material.set_shader_parameter(param_province_shape_subdivisions, Vector2(subdivisions)) - - if add_cosmetic_textures: - # Province colour texture - var map_province_colour_texture := GameSingleton.get_province_colour_texture() - if map_province_colour_texture == null: - push_error("Failed to get province colour image!") - return FAILED - shader_material.set_shader_parameter(param_province_colour_tex, map_province_colour_texture) - - # Terrain texture - var terrain_texture := GameSingleton.get_terrain_texture() - if terrain_texture == null: - push_error("Failed to get terrain texture!") - return FAILED - shader_material.set_shader_parameter(param_terrain_tex, terrain_texture) - - return OK diff --git a/game/src/Autoload/GuiScale.gd b/game/src/Autoload/GuiScale.gd deleted file mode 100644 index afd73df..0000000 --- a/game/src/Autoload/GuiScale.gd +++ /dev/null @@ -1,62 +0,0 @@ -extends Node - -const error_guiscale : float = -1.0 - -@export -var minimum_guiscale : float = 0.1 - -const _starting_guiscales : Dictionary = { - float(0.5) : &"0.5x", - float(0.75): &"0.75x", - float(1) : &"1x", - float(1.5) : &"1.5x", - float(2) : &"2x", -} - -var _guiscales: Dictionary - -#Similar to Resolution.gd, but we don't bother checking for strings from files -#and we have floats instead of vector2 integers - -func _ready(): - assert(minimum_guiscale > 0, "Minimum gui scale must be positive") - for guiscale_value in _starting_guiscales: - add_guiscale(guiscale_value, _starting_guiscales[guiscale_value]) - assert(not _guiscales.is_empty(), "No valid starting gui scales!") - -func has_guiscale(guiscale_value : float) -> bool: - return guiscale_value in _guiscales - -func add_guiscale(guiscale_value: float, guiscale_name: StringName=&"") -> bool: - if has_guiscale(guiscale_value): return true - var scale_dict := { value = guiscale_value } - if not guiscale_name.is_empty(): - scale_dict.display_name = guiscale_name - else: - scale_dict.display_name = StringName("%sx" % guiscale_value) - if guiscale_value < minimum_guiscale: - push_error("GUI scale %s is smaller than the minimum %s" % [scale_dict.display_name, minimum_guiscale]) - return false - _guiscales[guiscale_value] = scale_dict - return true - -#returns floats -func get_guiscale_value_list() -> Array: - var list := _guiscales.keys() - list.sort_custom(func(a, b): return a > b) - return list - -func get_guiscale_display_name(guiscale_value : float) -> StringName: - return _guiscales.get(guiscale_value, {display_name = &"unknown gui scale"}).display_name - -func get_current_guiscale() -> float: - return get_tree().root.content_scale_factor - -func set_guiscale(guiscale:float) -> void: - print("New GUI scale: %f" % guiscale) - if not has_guiscale(guiscale): - push_warning("Setting GUI Scale to non-standard value %sx" % [guiscale]) - get_tree().root.content_scale_factor = guiscale - -func reset_guiscale() -> void: - set_guiscale(get_current_guiscale()) diff --git a/game/src/Autoload/Resolution.gd b/game/src/Autoload/Resolution.gd deleted file mode 100644 index c973ba9..0000000 --- a/game/src/Autoload/Resolution.gd +++ /dev/null @@ -1,101 +0,0 @@ -extends Node - -signal resolution_added(value : Vector2i, name : StringName, display_name : StringName) -signal resolution_changed(value : Vector2i) -signal window_mode_changed(value : Window.Mode) - -const error_resolution : Vector2i = Vector2i(-1,-1) - -@export -var minimum_resolution : Vector2i = Vector2i(1,1) - -const _starting_resolutions : Dictionary = { - Vector2i(3840,2160): &"4K", - Vector2i(2560,1080): &"UW1080p", - Vector2i(1920,1080): &"1080p", - Vector2i(1366,768) : &"", - Vector2i(1536,864) : &"", - Vector2i(1280,720) : &"720p", - Vector2i(1440,900) : &"", - Vector2i(1600,900) : &"", - Vector2i(1024,600) : &"", - Vector2i(800,600) : &"" -} - -var _resolutions : Dictionary - -const _regex_pattern : String = "(\\d+)\\s*[xX,]\\s*(\\d+)" -var _regex : RegEx - -func _ready(): - assert(minimum_resolution.x > 0 and minimum_resolution.y > 0, "Minimum resolution must be positive!") - for resolution_value in _starting_resolutions: - add_resolution(resolution_value, _starting_resolutions[resolution_value]) - assert(not _resolutions.is_empty(), "No valid starting resolutions!") - - _regex = RegEx.new() - var err := _regex.compile(_regex_pattern) - assert(err == OK, "Resolution RegEx failed to compile!") - - -func has_resolution(resolution_value : Vector2i) -> bool: - return resolution_value in _resolutions - -func add_resolution(resolution_value : Vector2i, resolution_name : StringName = &"") -> bool: - if has_resolution(resolution_value): return true - var res_dict := { value = resolution_value, name = &"" } - var display_name := "%sx%s" % [resolution_value.x, resolution_value.y] - if not resolution_name.is_empty(): - res_dict.name = resolution_name - display_name = "%s (%s)" % [display_name, resolution_name] - res_dict.display_name = StringName(display_name) - if resolution_value.x < minimum_resolution.x or resolution_value.y < minimum_resolution.y: - push_error("Resolution %s is smaller than minimum (%sx%s)" % [res_dict.display_name, minimum_resolution.x, minimum_resolution.y]) - return false - resolution_added.emit(resolution_value, resolution_name, display_name) - _resolutions[resolution_value] = res_dict - return true - -func get_resolution_value_list() -> Array: - var list := _resolutions.keys() - list.sort_custom(func(a, b): return a > b) - return list - -func get_resolution_name(resolution_value : Vector2i) -> StringName: - return _resolutions.get(resolution_value, { name = &"unknown resolution" }).name - -func get_resolution_display_name(resolution_value : Vector2i) -> StringName: - return _resolutions.get(resolution_value, { display_name = &"unknown resolution" }).display_name - -func get_resolution_value_from_string(resolution_string : String) -> Vector2i: - if not resolution_string.is_empty(): - for resolution in _resolutions.values(): - if resolution_string == resolution.name or resolution_string == resolution.display_name: - return resolution.value - var result := _regex.search(resolution_string) - if result: return Vector2i(result.get_string(1).to_int(), result.get_string(2).to_int()) - return error_resolution - -func get_current_resolution() -> Vector2i: - var window := get_viewport().get_window() - match window.mode: - Window.MODE_EXCLUSIVE_FULLSCREEN, Window.MODE_FULLSCREEN: - return window.content_scale_size - _: - return window.size - -func set_resolution(resolution : Vector2i) -> void: - if not has_resolution(resolution): - push_warning("Setting resolution to non-standard value %sx%s" % [resolution.x, resolution.y]) - var window := get_viewport().get_window() - if get_current_resolution() != resolution: - resolution_changed.emit(resolution) - match window.mode: - Window.MODE_EXCLUSIVE_FULLSCREEN, Window.MODE_FULLSCREEN: - window.content_scale_size = resolution - _: - window.size = resolution - window.content_scale_size = Vector2i(0,0) - -func reset_resolution() -> void: - set_resolution(get_current_resolution()) diff --git a/game/src/Autoload/SaveManager.gd b/game/src/Autoload/SaveManager.gd deleted file mode 100644 index fb7806b..0000000 --- a/game/src/Autoload/SaveManager.gd +++ /dev/null @@ -1,55 +0,0 @@ -extends Node - -# Requirements -# * FS-28 -const save_directory_setting := &"openvic/data/saves_directory" - -var current_save : SaveResource -var current_session_tag : StringName - -var _save_dictionary : Dictionary = {} -var _dirty_save : SaveResource - -func _ready(): - var saves_dir_path : String = ProjectSettings.get_setting_with_override(save_directory_setting) - assert(saves_dir_path != null, "'%s' setting could not be found." % save_directory_setting) - - DirAccess.make_dir_recursive_absolute(saves_dir_path) - var saves_dir := DirAccess.open(saves_dir_path) - for file in saves_dir.get_files(): - var save := SaveResource.new() - save.load_save(saves_dir_path.path_join(file)) - add_or_replace_save(save, true) - -func get_save_file_name(save_name : StringName, session_tag : StringName = current_session_tag) -> StringName: - return ("%s - %s" % [save_name, session_tag]).validate_filename() - -func make_new_save(save_name : String, session_tag : StringName = current_session_tag) -> SaveResource: - var file_name := get_save_file_name(save_name, session_tag) + ".tres" - var new_save := SaveResource.new() - new_save.set_file_path(save_name, ProjectSettings.get_setting_with_override(save_directory_setting).path_join(file_name)) - print(new_save.file_path) - new_save.session_tag = session_tag - return new_save - -func has_save(save_name : StringName, session_tag : StringName = current_session_tag) -> bool: - return _save_dictionary.has(get_save_file_name(save_name, session_tag)) - -func add_or_replace_save(save : SaveResource, ignore_dirty : bool = false) -> void: - var binded_func := _on_save_deleted_or_moved.bind(save) - save.deleted.connect(binded_func) - save.trash_moved.connect(binded_func) - _save_dictionary[get_save_file_name(save.save_name, save.session_tag)] = save - if not ignore_dirty: - _dirty_save = save - -func delete_save(save : SaveResource) -> void: - save.delete() - -func flush_save() -> void: - if _dirty_save == null: return - _dirty_save.flush_save() - _dirty_save = null - -func _on_save_deleted_or_moved(save : SaveResource) -> void: - _save_dictionary.erase(get_save_file_name(save.save_name, save.session_tag)) diff --git a/game/src/Autoload/SoundManager.gd b/game/src/Autoload/SoundManager.gd deleted file mode 100644 index c58ce1a..0000000 --- a/game/src/Autoload/SoundManager.gd +++ /dev/null @@ -1,42 +0,0 @@ -extends Node - -# REQUIREMENTS: -# * SS-68 - -const _audio_directory_path : StringName = &"res://audio/sfx/" - -var _loaded_sound : Dictionary = {} - -var _bus_to_stream_player : Dictionary = {} - -# REQUIREMENTS: -# * SND-10 -func _ready(): - var dir = DirAccess.open(_audio_directory_path) - for fname in dir.get_files(): - match fname.get_extension(): - "ogg", "wav", "mp3": - _loaded_sound[fname.get_basename()] = load(_audio_directory_path.path_join(fname)) # SND-10 - -func play_stream(sound : AudioStream, bus_type : String) -> void: - var player : AudioStreamPlayer = _bus_to_stream_player.get(bus_type) - if player == null: - player = AudioStreamPlayer.new() - player.bus = bus_type - player.stream = AudioStreamPolyphonic.new() - _bus_to_stream_player[bus_type] = player - add_child(player) - player.play() - var poly_playback : AudioStreamPlaybackPolyphonic = player.get_stream_playback() - poly_playback.play_stream(sound) - -func play(sound : String, bus_type : String) -> void: - play_stream(_loaded_sound[sound], bus_type) - -# REQUIREMENTS: -# * SND-7 -func play_effect_stream(sound : AudioStream) -> void: - play_stream(sound, "SFX") - -func play_effect(sound : String) -> void: - play(sound, "SFX") -- cgit v1.2.3-56-ga3b1