fix: savegame picker layout, refactoring

This commit is contained in:
tiger tiger tiger 2025-12-13 20:11:51 +01:00
parent 7c755d8edb
commit 7741409668
11 changed files with 459 additions and 408 deletions

View File

@ -14,6 +14,8 @@ source_file="res://base-environments/transition/import/textures/garage_floor_rou
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
@ -21,6 +23,10 @@ mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false

View File

@ -9,10 +9,12 @@ func show_settings(id: int = -1):
await $AnimationPlayer.animation_finished
if not id == -1:
$TabContainer.current_tab = id
State.pass_stage_to($TabContainer)
func vanish():
State.save_settings()
$AnimationPlayer.play("vanish")
await $AnimationPlayer.animation_finished
get_parent_control().visible = false
#func _input(event: InputEvent) -> void:
# print(event)

File diff suppressed because one or more lines are too long

View File

@ -305,7 +305,7 @@ func remove_sticky_note() -> StickyNote:
return former_child
func exchange_sticky_note_with(new_note: StickyNote) -> StickyNote:
var tmp = remove_sticky_note()
var tmp := remove_sticky_note()
attach_sticky_note(new_note)
return tmp

View File

@ -1,4 +1,4 @@
extends Node
extends Node
class_name GlobalState
#region configuration
@ -150,7 +150,7 @@ var ssil_enable:bool = false:
set(value):
ssil_enable = value
environment_settings_changed.emit()
var sdfgi_enable:bool = false:
set(value):
sdfgi_enable = value
@ -265,31 +265,33 @@ var focus_locked: bool = false
# Intented for use when an actor wants focus for itself, can reclaim focus, thus dropping the stack that focused.
func take_stage(actor: Object, reclaim: bool = false) -> bool:
if focus_locked or Scenes.current_sequence != -1: return false
if reclaim:
stage_list.front().has_stage = false
if stage_list.has(actor):
while stage_list.pop_front() != actor: break
actor.has_stage = true
stage_list.push_front(actor)
return actor.has_stage
push_warning(actor, " wanted to reclaim focus, but was not on list.")
return pass_stage_to(actor)
print_debug("DEPRECATED: take_stage ", actor);
return false
#if focus_locked or Scenes.current_sequence != -1: return false
#if reclaim:
# stage_list.front().has_stage = false
# if stage_list.has(actor):
# while stage_list.pop_front() != actor: break
# actor.has_stage = true
# stage_list.push_front(actor)
# return actor.has_stage
# push_warning(actor, " wanted to reclaim focus, but was not on list.")
#return pass_stage_to(actor)
# Element no longer wants focus, if Element itself is also dropped, this option can be chosen aswell.
func leave_stage(actor:Object) -> bool:
if stage_list[0] == actor:
actor.has_stage = false
focus_locked = false
stage_list.erase(actor)
if stage_list != []:
stage_list.front().has_stage = true
else:
get_tree().quit()
print_debug("DEPRECATED: leave_stage ", actor);
return false
#if stage_list[0] == actor:
# actor.has_stage = false
# focus_locked = false
#stage_list.erase(actor)
#if stage_list != []:
# stage_list.front().has_stage = true
#else:
# get_tree().quit()
#return false
# Used to put a new target on top of the Focus Stack.
func pass_stage_to(target:Object, force = false, lock_focus = false) -> bool:

View File

@ -28,7 +28,7 @@ func execute() -> String:
load_game_button.disabled = not save_game_handle.has_existing_saves()
save_game_handle.visible = save_game_handle.has_existing_saves()
#save_game_handle.visible = save_game_handle.has_existing_saves()
_activate()
var result = await _next_room
@ -73,13 +73,11 @@ func _choose(choice: String) -> void:
func _activate() -> void:
save_game_handle.visible = false
for child: Control in $PanelContainer.get_children():
child.focus_mode = Control.FOCUS_ALL
child.modulate = Color.WHITE
child.mouse_filter = Control.MOUSE_FILTER_STOP
if continue_button.visible:
continue_button.grab_focus()
else:
@ -87,8 +85,6 @@ func _activate() -> void:
func _deactivate() -> void:
save_game_handle.visible = false
for child: Control in $PanelContainer.get_children():
child.focus_mode = FOCUS_NONE
child.modulate = Color.WEB_GRAY

View File

@ -1,258 +1,18 @@
[gd_scene load_steps=22 format=3 uid="uid://b51wdql4mby47"]
[gd_scene load_steps=12 format=3 uid="uid://b51wdql4mby47"]
[ext_resource type="Theme" uid="uid://b056fn288p8ha" path="res://logic-scenes/themes/handwriting.theme" id="1_2dg4n"]
[ext_resource type="Script" uid="uid://c3o65t2rwpbtn" path="res://ui/menu_main/main_menu.gd" id="2_rm576"]
[ext_resource type="Texture2D" uid="uid://dedg31cqac3n0" path="res://import/interface-elements/frame-of-mind-logo.png" id="3_cm266"]
[ext_resource type="PackedScene" uid="uid://gmxenhavh1lp" path="res://ui/menu_main/video_settings.tscn" id="3_f0dcd"]
[ext_resource type="Texture2D" uid="uid://bu6o68w763512" path="res://import/interface-elements/game-of-thoughts.png" id="4_g8g3n"]
[ext_resource type="Script" uid="uid://cxton1pffwxk4" path="res://code/button_themer.gd" id="4_iotk1"]
[ext_resource type="Script" uid="uid://sa15wakvpj2e" path="res://dev-util/bug_button.gd" id="4_j5v2v"]
[ext_resource type="Script" uid="uid://byiih47fi6740" path="res://dev-util/settings_popup.gd" id="4_k8jo0"]
[ext_resource type="PackedScene" uid="uid://dfhkfocy8axb8" path="res://ui/menu_main/audio_settings.tscn" id="4_o07mg"]
[ext_resource type="Script" uid="uid://dqq0wq3dvbnjs" path="res://dev-util/i18n_texture_rect.gd" id="5_8u0te"]
[ext_resource type="Script" uid="uid://0tb763w0vfv7" path="res://tab_container.gd" id="5_lhfti"]
[ext_resource type="PackedScene" uid="uid://b3wlecqvelh22" path="res://ui/menu_main/accessibility_settings.tscn" id="6_875a3"]
[ext_resource type="Texture2D" uid="uid://bv1o2xo71wvp6" path="res://import/interface-elements/gedanken-spiel.png" id="6_g8g3n"]
[ext_resource type="PackedScene" uid="uid://dxwqkxq6qjk7i" path="res://ui/menu_main/gameplay_settings.tscn" id="6_p7ypt"]
[ext_resource type="PackedScene" uid="uid://chal0ioagspx0" path="res://ui/menu_main/content_settings.tscn" id="7_pnd48"]
[ext_resource type="Script" uid="uid://dugfwcvp7i01k" path="res://ui/menu_main/save_game_list.gd" id="8_o0cpj"]
[ext_resource type="PackedScene" uid="uid://cvetdhqpr18ad" path="res://ui/settings_popup/settings_popup.tscn" id="9_vhfai"]
[ext_resource type="PackedScene" uid="uid://bsjc1ry0qpe61" path="res://ui/save_game_list/save_game_list.tscn" id="10_vhfai"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_njt06"]
[sub_resource type="Animation" id="Animation_3pjwp"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("../../Decoration/decoration:modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 0)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("../../Decoration/decoration:rotation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [1.26885]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("..:modulate")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 0)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("../..:scale")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(1, 0.57)]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("../..:self_modulate")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 0)]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("../..:visible")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
[sub_resource type="Animation" id="Animation_i4c5w"]
resource_name = "reveal"
length = 2.0
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("../../Decoration/decoration:modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0.4, 1.03333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("../../Decoration/decoration:rotation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0.0333333, 1.76667),
"transitions": PackedFloat32Array(0.353554, 1),
"update": 0,
"values": [0.610865, 0.347321]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("..:modulate")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0.266667, 0.533333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("../..:scale")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.866667),
"transitions": PackedFloat32Array(0.277392, 1),
"update": 0,
"values": [Vector2(1, 0.57), Vector2(1, 1)]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("../..:self_modulate")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0, 1.03333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("../..:visible")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
[sub_resource type="Animation" id="Animation_a3iyq"]
resource_name = "vanish"
length = 1.5
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("../..:self_modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0.333333, 0.633333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("../..:scale")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(1, 1)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("../../Decoration/decoration:modulate")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0.133333, 1.46667),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("../../Decoration/decoration:rotation")
tracks/3/interp = 2
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.266667, 1.43333),
"transitions": PackedFloat32Array(1, 2.21914, 1),
"update": 0,
"values": [0.347507, 0.174533, 1.03847]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("..:modulate")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0.1, 0.433333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("../..:visible")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0, 1.5),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [true, false]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_lmxul"]
_data = {
&"RESET": SubResource("Animation_3pjwp"),
&"reveal": SubResource("Animation_i4c5w"),
&"vanish": SubResource("Animation_a3iyq")
}
[node name="MainMenu" type="Panel"]
anchors_preset = 15
anchor_right = 1.0
@ -369,92 +129,13 @@ grow_horizontal = 2
grow_vertical = 2
mouse_filter = 0
[node name="SettingsPopup" type="PanelContainer" parent="SettingsContainer"]
unique_name_in_owner = true
visible = false
self_modulate = Color(1, 1, 1, 0)
layout_mode = 2
script = ExtResource("4_k8jo0")
[node name="AnimationPlayer" type="AnimationPlayer" parent="SettingsContainer/SettingsPopup"]
root_node = NodePath("../TabContainer/Video Settings")
libraries = {
&"": SubResource("AnimationLibrary_lmxul")
}
autoplay = "RESET"
[node name="Decoration" type="Control" parent="SettingsContainer/SettingsPopup"]
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
[node name="decoration" type="PanelContainer" parent="SettingsContainer/SettingsPopup/Decoration"]
modulate = Color(1, 1, 1, 0)
layout_mode = 0
offset_left = -374.0
offset_top = -378.5
offset_right = 365.0
offset_bottom = 374.5
grow_horizontal = 2
grow_vertical = 2
rotation = 1.26885
pivot_offset = Vector2(374, 378.5)
[node name="TabContainer" type="TabContainer" parent="SettingsContainer/SettingsPopup"]
modulate = Color(1, 1, 1, 0)
layout_mode = 2
current_tab = 0
use_hidden_tabs_for_min_size = true
script = ExtResource("5_lhfti")
[node name="Accessibility" parent="SettingsContainer/SettingsPopup/TabContainer" instance=ExtResource("6_875a3")]
[node name="SettingsPopup" parent="SettingsContainer" instance=ExtResource("9_vhfai")]
unique_name_in_owner = true
layout_mode = 2
[node name="Video Settings" parent="SettingsContainer/SettingsPopup/TabContainer" instance=ExtResource("3_f0dcd")]
unique_name_in_owner = true
visible = false
layout_mode = 2
metadata/_tab_index = 1
[node name="Audio Settings" parent="SettingsContainer/SettingsPopup/TabContainer" instance=ExtResource("4_o07mg")]
unique_name_in_owner = true
visible = false
layout_mode = 2
metadata/_tab_index = 2
[node name="Gameplay Settings" parent="SettingsContainer/SettingsPopup/TabContainer" instance=ExtResource("6_p7ypt")]
unique_name_in_owner = true
visible = false
layout_mode = 2
metadata/_tab_index = 3
[node name="Content Notes" parent="SettingsContainer/SettingsPopup/TabContainer" instance=ExtResource("7_pnd48")]
unique_name_in_owner = true
visible = false
layout_mode = 2
metadata/_tab_index = 4
[node name="ColorRect" type="ColorRect" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0, 0, 0, 0.5019608)
[node name="SaveGameList" type="CenterContainer" parent="ColorRect"]
[node name="SaveGameList" parent="." instance=ExtResource("10_vhfai")]
unique_name_in_owner = true
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
script = ExtResource("8_o0cpj")
metadata/_custom_type_script = "uid://dugfwcvp7i01k"
[node name="CenterContainer" type="CenterContainer" parent="."]
visible = false

View File

@ -1,4 +1,4 @@
class_name SaveGameList extends CenterContainer
class_name SaveGameList extends Control
signal _picked(save_game: SaveGame)
@ -7,7 +7,8 @@ var save_buttons: Array[SaveGameDisplay]
@export var update_display: bool:
set(value):
_load_games()
var scroll_container: ScrollContainer
@onready var list_container: VBoxContainer = %ListContainer
func _validate_property(property: Dictionary) -> void:
if property.name == "saves":
@ -15,8 +16,9 @@ func _validate_property(property: Dictionary) -> void:
func _ready() -> void:
_close()
_load_games()
hide()
set_process_input(false)
func _ensure_directory() -> void:
var dir := DirAccess.open(State.user_saves_path)
@ -56,18 +58,12 @@ func _sort_saves() -> void:
func _rebuild_buttons() -> void:
save_buttons = []
if scroll_container != null:
scroll_container.queue_free()
scroll_container = ScrollContainer.new()
scroll_container.horizontal_scroll_mode = ScrollContainer.SCROLL_MODE_DISABLED
scroll_container.custom_minimum_size = Vector2(0, ProjectSettings.get_setting("display/window/size/viewport_height") - 256)
add_child(scroll_container)
for child in list_container.get_children():
child.queue_free()
var save_box := VBoxContainer.new()
save_box.add_theme_constant_override("separation", 16)
scroll_container.add_child(save_box)
list_container.add_child(save_box)
for i in range(saves.size()):
var new_button := SaveGameDisplay.new(saves[i], i+1)
@ -96,26 +92,24 @@ func cancel()->void:
# This function is called when the user us supposed to choose a slot to load or create a new game.
func pick_save_slot() -> SaveGame:
await _open()
await open()
var result = await _picked
await _close()
await close()
return result
# TODO: ugh, godot tweens are the wurst
func _open() -> void:
get_parent_control().show()
func open() -> void:
show()
set_process_input(true)
save_buttons[0].grab_focus()
modulate = Color.TRANSPARENT
visible = true
var tween := get_tree().create_tween()
tween.tween_property(self, "modulate", Color.WHITE, 0.5)
await tween.finished
set_process_input(true)
func _close() -> void:
func close() -> void:
set_process_input(false)
var tween := get_tree().create_tween()
tween.tween_property(self, "modulate", Color.TRANSPARENT, 0.5)
await tween.finished
visible = false
get_parent_control().hide()
hide()

View File

@ -47,7 +47,7 @@ var has_stage:bool = false:
var fps_enabled: bool:
set(value):
fps_enabled = value
@onready var fps_selector: SpinBox = %MaxFps
@export var enable_hdr: bool = false:
@ -93,9 +93,9 @@ var has_changed: bool = false:
func _ready() -> void:
load_settings()
propagate_settings()
fullscreen_selector.item_selected.connect(func(value): window_mode = select_id_to_window_mode(value))
scale_selector.value_changed.connect(func(value): render_scale = value)
upscale_selector.item_selected.connect(func(value): upscale_mode = value)
@ -103,15 +103,15 @@ func _ready() -> void:
shadow_selector.item_selected.connect(func(value): shadow_quality = value)
msaa_selector.item_selected.connect(func(value): msaa = value)
vsync_selector.item_selected.connect(func(value): vsync_mode = value)
scale_selector.value_changed.connect(func(value): render_scale= value)
fps_selector.value_changed.connect(func(value): max_fps = value)
fps_enabler.toggled.connect(func(value): fps_enabled = value)
changed.connect(func(): has_changed = true)
preset_selected = preset_selected
%ConfirmButton.pressed.connect(_on_confirm_button_pressed)
%ExitButton.pressed.connect(_on_exit_button_pressed)
%ConfirmExit.pressed.connect(_on_exit_confirmed)
@ -122,17 +122,17 @@ func _ready() -> void:
%QualityPreset.pressed.connect(_on_quality_preset_pressed)
func load_settings():
if FileAccess.file_exists(settings_path):
var file = FileAccess.open(settings_path, FileAccess.READ)
var raw_json = FileAccess.get_file_as_string(settings_path)
file.close()
var parsed: Dictionary = JSON.parse_string(raw_json)
for key in parsed.keys():
if key in self:
set(key, parsed[key])
else:
if Steam.isSteamRunningOnSteamDeck():
_on_performance_preset_pressed()
@ -165,18 +165,18 @@ func save_settings():
"vsync_mod": vsync_mode,
"preset_selected": preset_selected
}
var file = FileAccess.open(settings_path, FileAccess.WRITE)
file.store_string(JSON.stringify(out_dict))
file.close()
has_changed = false
func _on_exit_confirmed() -> void:
leave_stage.emit()
State.leave_stage(self)
func _on_exit_button_pressed() -> void:
if has_changed:
$Popup.show()
@ -197,7 +197,7 @@ func _on_confirm_button_pressed() -> void:
0:
State.ssil_enable = false
State.sdfgi_enable = false
1:
1:
State.ssil_enable = false
State.sdfgi_enable = true
ProjectSettings.set_setting("rendering/global_illumination/sdfgi/probe_ray_count", 8)
@ -218,16 +218,16 @@ func _on_confirm_button_pressed() -> void:
RenderingServer.directional_soft_shadow_filter_set_quality(shadow_quality*2+1)
ProjectSettings.set_setting("rendering/lights_and_shadows/directional_shadow/soft_shadow_filter_quality", shadow_quality)
RenderingServer.positional_soft_shadow_filter_set_quality(shadow_quality*2+1)
ProjectSettings.set_setting("rendering/anti_aliasing/quality/msaa_3d", msaa)
ProjectSettings.set_setting("display/window/vsync/vsync_mode", vsync_mode)
save_settings()
func _on_performance_preset_pressed() -> void:
ignore_changes = true
has_changed = true
render_scale = 0.8
max_fps = 60
fps_enabled = true
@ -235,18 +235,18 @@ func _on_performance_preset_pressed() -> void:
shadow_quality = 0
msaa = 0
vsync_mode = DisplayServer.VSyncMode.VSYNC_DISABLED
propagate_settings()
changed.emit()
ignore_changes = false
preset_selected = 1
func _on_balanced_preset_pressed() -> void:
ignore_changes = true
has_changed = true
render_scale = 1
max_fps = 60
fps_enabled = true
@ -254,18 +254,18 @@ func _on_balanced_preset_pressed() -> void:
shadow_quality = 1
msaa = 1
vsync_mode = DisplayServer.VSyncMode.VSYNC_ENABLED
propagate_settings()
changed.emit()
ignore_changes = false
preset_selected = 2
func _on_quality_preset_pressed() -> void:
ignore_changes = true
has_changed = true
render_scale = 1
max_fps = 60
fps_enabled = false
@ -273,12 +273,12 @@ func _on_quality_preset_pressed() -> void:
shadow_quality = 2
msaa = 3
vsync_mode = DisplayServer.VSyncMode.VSYNC_ENABLED
propagate_settings()
changed.emit()
ignore_changes = false
preset_selected = 3
func window_mode_to_select_id(mode: DisplayServer.WindowMode) -> int:

View File

@ -0,0 +1,63 @@
[gd_scene load_steps=2 format=3 uid="uid://bsjc1ry0qpe61"]
[ext_resource type="Script" uid="uid://dugfwcvp7i01k" path="res://ui/menu_main/save_game_list.gd" id="1_w1a7u"]
[node name="SaveGameList" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_force_pass_scroll_events = false
script = ExtResource("1_w1a7u")
[node name="ColorRect" type="ColorRect" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0, 0, 0, 0.5019608)
[node name="MarginContainer" type="MarginContainer" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/margin_left = 320
theme_override_constants/margin_top = 100
theme_override_constants/margin_right = 320
theme_override_constants/margin_bottom = 100
[node name="ColorRect" type="ColorRect" parent="MarginContainer"]
layout_mode = 2
color = Color(0, 0, 0, 0.2509804)
[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"]
layout_mode = 2
[node name="ScrollContainer" type="ScrollContainer" parent="MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
follow_focus = true
[node name="ListContainer" type="VBoxContainer" parent="MarginContainer/VBoxContainer/ScrollContainer"]
unique_name_in_owner = true
clip_contents = true
layout_mode = 2
size_flags_horizontal = 6
size_flags_vertical = 3
[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer"]
layout_mode = 2
alignment = 2
[node name="Button" type="Button" parent="MarginContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
text = "Zurück"

View File

@ -0,0 +1,307 @@
[gd_scene load_steps=12 format=3 uid="uid://cvetdhqpr18ad"]
[ext_resource type="Script" uid="uid://byiih47fi6740" path="res://dev-util/settings_popup.gd" id="1_87f5w"]
[ext_resource type="Script" uid="uid://0tb763w0vfv7" path="res://tab_container.gd" id="2_3fpo3"]
[ext_resource type="PackedScene" uid="uid://b3wlecqvelh22" path="res://ui/menu_main/accessibility_settings.tscn" id="3_x8md3"]
[ext_resource type="PackedScene" uid="uid://gmxenhavh1lp" path="res://ui/menu_main/video_settings.tscn" id="4_vsgh1"]
[ext_resource type="PackedScene" uid="uid://dfhkfocy8axb8" path="res://ui/menu_main/audio_settings.tscn" id="5_kaera"]
[ext_resource type="PackedScene" uid="uid://dxwqkxq6qjk7i" path="res://ui/menu_main/gameplay_settings.tscn" id="6_e4y1h"]
[ext_resource type="PackedScene" uid="uid://chal0ioagspx0" path="res://ui/menu_main/content_settings.tscn" id="7_5phyg"]
[sub_resource type="Animation" id="Animation_3pjwp"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("../../Decoration/decoration:modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 0)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("../../Decoration/decoration:rotation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [1.26885]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("..:modulate")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 0)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("../..:scale")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(1, 0.57)]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("../..:self_modulate")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 0)]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("../..:visible")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
[sub_resource type="Animation" id="Animation_i4c5w"]
resource_name = "reveal"
length = 2.0
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("../../Decoration/decoration:modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0.4, 1.03333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("../../Decoration/decoration:rotation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0.0333333, 1.76667),
"transitions": PackedFloat32Array(0.353554, 1),
"update": 0,
"values": [0.610865, 0.347321]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("..:modulate")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0.266667, 0.533333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("../..:scale")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.866667),
"transitions": PackedFloat32Array(0.277392, 1),
"update": 0,
"values": [Vector2(1, 0.57), Vector2(1, 1)]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("../..:self_modulate")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0, 1.03333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("../..:visible")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
[sub_resource type="Animation" id="Animation_a3iyq"]
resource_name = "vanish"
length = 1.5
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("../..:self_modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0.333333, 0.633333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("../..:scale")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(1, 1)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("../../Decoration/decoration:modulate")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0.133333, 1.46667),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("../../Decoration/decoration:rotation")
tracks/3/interp = 2
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.266667, 1.43333),
"transitions": PackedFloat32Array(1, 2.21914, 1),
"update": 0,
"values": [0.347507, 0.174533, 1.03847]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("..:modulate")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0.1, 0.433333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("../..:visible")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0, 1.5),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [true, false]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_lmxul"]
_data = {
&"RESET": SubResource("Animation_3pjwp"),
&"reveal": SubResource("Animation_i4c5w"),
&"vanish": SubResource("Animation_a3iyq")
}
[node name="SettingsPopup" type="PanelContainer"]
visible = false
self_modulate = Color(1, 1, 1, 0)
script = ExtResource("1_87f5w")
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
root_node = NodePath("../TabContainer/Video Settings")
libraries = {
&"": SubResource("AnimationLibrary_lmxul")
}
autoplay = "RESET"
[node name="Decoration" type="Control" parent="."]
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
[node name="decoration" type="PanelContainer" parent="Decoration"]
modulate = Color(1, 1, 1, 0)
layout_mode = 0
offset_left = -374.0
offset_top = -378.5
offset_right = 365.0
offset_bottom = 374.5
grow_horizontal = 2
grow_vertical = 2
rotation = 1.26885
pivot_offset = Vector2(374, 378.5)
[node name="TabContainer" type="TabContainer" parent="."]
modulate = Color(1, 1, 1, 0)
layout_mode = 2
current_tab = 0
use_hidden_tabs_for_min_size = true
script = ExtResource("2_3fpo3")
[node name="Accessibility" parent="TabContainer" instance=ExtResource("3_x8md3")]
unique_name_in_owner = true
layout_mode = 2
[node name="Video Settings" parent="TabContainer" instance=ExtResource("4_vsgh1")]
unique_name_in_owner = true
visible = false
layout_mode = 2
metadata/_tab_index = 1
[node name="Audio Settings" parent="TabContainer" instance=ExtResource("5_kaera")]
unique_name_in_owner = true
visible = false
layout_mode = 2
metadata/_tab_index = 2
[node name="Gameplay Settings" parent="TabContainer" instance=ExtResource("6_e4y1h")]
unique_name_in_owner = true
visible = false
layout_mode = 2
metadata/_tab_index = 3
[node name="Content Notes" parent="TabContainer" instance=ExtResource("7_5phyg")]
unique_name_in_owner = true
visible = false
layout_mode = 2
metadata/_tab_index = 4