aboutsummaryrefslogtreecommitdiff
path: root/game/src/Autoload
diff options
context:
space:
mode:
author Hop311 <Hop3114@gmail.com>2023-05-10 22:53:56 +0200
committer GitHub <noreply@github.com>2023-05-10 22:53:56 +0200
commitbd08b517ed8e3a42de981b7173a99fa362134021 (patch)
tree2a9a0816b571946c7d9fb00b49fc74203101c3ab /game/src/Autoload
parent088a6ada0468f0bf73e8b9a5bb92e59ac2739fae (diff)
parent8a59cb15b58f512f27f01a71248feef4777e3a41 (diff)
Merge pull request #109 from Nemrav/gui-scaling
Add UI scaling through menu option
Diffstat (limited to 'game/src/Autoload')
-rw-r--r--game/src/Autoload/GuiScale.gd62
-rw-r--r--game/src/Autoload/Resolution.gd14
2 files changed, 69 insertions, 7 deletions
diff --git a/game/src/Autoload/GuiScale.gd b/game/src/Autoload/GuiScale.gd
new file mode 100644
index 0000000..afd73df
--- /dev/null
+++ b/game/src/Autoload/GuiScale.gd
@@ -0,0 +1,62 @@
+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
index 35ecbb3..56aa4a5 100644
--- a/game/src/Autoload/Resolution.gd
+++ b/game/src/Autoload/Resolution.gd
@@ -9,13 +9,13 @@ 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): &""
+ 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