diff options
author | Hop311 <Hop3114@gmail.com> | 2023-05-10 22:53:56 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-10 22:53:56 +0200 |
commit | bd08b517ed8e3a42de981b7173a99fa362134021 (patch) | |
tree | 2a9a0816b571946c7d9fb00b49fc74203101c3ab /game/src/Autoload | |
parent | 088a6ada0468f0bf73e8b9a5bb92e59ac2739fae (diff) | |
parent | 8a59cb15b58f512f27f01a71248feef4777e3a41 (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.gd | 62 | ||||
-rw-r--r-- | game/src/Autoload/Resolution.gd | 14 |
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 |