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/mode=0
compress/high_quality=false compress/high_quality=false
compress/lossy_quality=0.7 compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1 compress/hdr_compression=1
compress/normal_map=0 compress/normal_map=0
compress/channel_pack=0 compress/channel_pack=0
@ -21,6 +23,10 @@ mipmaps/generate=false
mipmaps/limit=-1 mipmaps/limit=-1
roughness/mode=0 roughness/mode=0
roughness/src_normal="" 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/fix_alpha_border=true
process/premult_alpha=false process/premult_alpha=false
process/normal_map_invert_y=false process/normal_map_invert_y=false

View File

@ -9,10 +9,12 @@ func show_settings(id: int = -1):
await $AnimationPlayer.animation_finished await $AnimationPlayer.animation_finished
if not id == -1: if not id == -1:
$TabContainer.current_tab = id $TabContainer.current_tab = id
State.pass_stage_to($TabContainer)
func vanish(): func vanish():
State.save_settings() State.save_settings()
$AnimationPlayer.play("vanish") $AnimationPlayer.play("vanish")
await $AnimationPlayer.animation_finished await $AnimationPlayer.animation_finished
get_parent_control().visible = false 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 return former_child
func exchange_sticky_note_with(new_note: StickyNote) -> StickyNote: func exchange_sticky_note_with(new_note: StickyNote) -> StickyNote:
var tmp = remove_sticky_note() var tmp := remove_sticky_note()
attach_sticky_note(new_note) attach_sticky_note(new_note)
return tmp return tmp

View File

@ -1,4 +1,4 @@
extends Node extends Node
class_name GlobalState class_name GlobalState
#region configuration #region configuration
@ -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. # 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: func take_stage(actor: Object, reclaim: bool = false) -> bool:
if focus_locked or Scenes.current_sequence != -1: return false print_debug("DEPRECATED: take_stage ", actor);
if reclaim: return false
stage_list.front().has_stage = false #if focus_locked or Scenes.current_sequence != -1: return false
if stage_list.has(actor): #if reclaim:
while stage_list.pop_front() != actor: break # stage_list.front().has_stage = false
actor.has_stage = true # if stage_list.has(actor):
stage_list.push_front(actor) # while stage_list.pop_front() != actor: break
return actor.has_stage # actor.has_stage = true
push_warning(actor, " wanted to reclaim focus, but was not on list.") # stage_list.push_front(actor)
return pass_stage_to(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. # Element no longer wants focus, if Element itself is also dropped, this option can be chosen aswell.
func leave_stage(actor:Object) -> bool: func leave_stage(actor:Object) -> bool:
print_debug("DEPRECATED: leave_stage ", actor);
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 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. # Used to put a new target on top of the Focus Stack.
func pass_stage_to(target:Object, force = false, lock_focus = false) -> bool: 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() 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() _activate()
var result = await _next_room var result = await _next_room
@ -73,8 +73,6 @@ func _choose(choice: String) -> void:
func _activate() -> void: func _activate() -> void:
save_game_handle.visible = false
for child: Control in $PanelContainer.get_children(): for child: Control in $PanelContainer.get_children():
child.focus_mode = Control.FOCUS_ALL child.focus_mode = Control.FOCUS_ALL
child.modulate = Color.WHITE child.modulate = Color.WHITE
@ -87,8 +85,6 @@ func _activate() -> void:
func _deactivate() -> void: func _deactivate() -> void:
save_game_handle.visible = false
for child: Control in $PanelContainer.get_children(): for child: Control in $PanelContainer.get_children():
child.focus_mode = FOCUS_NONE child.focus_mode = FOCUS_NONE
child.modulate = Color.WEB_GRAY 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="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="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="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="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://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://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://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="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://cvetdhqpr18ad" path="res://ui/settings_popup/settings_popup.tscn" id="9_vhfai"]
[ext_resource type="PackedScene" uid="uid://chal0ioagspx0" path="res://ui/menu_main/content_settings.tscn" id="7_pnd48"] [ext_resource type="PackedScene" uid="uid://bsjc1ry0qpe61" path="res://ui/save_game_list/save_game_list.tscn" id="10_vhfai"]
[ext_resource type="Script" uid="uid://dugfwcvp7i01k" path="res://ui/menu_main/save_game_list.gd" id="8_o0cpj"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_njt06"] [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"] [node name="MainMenu" type="Panel"]
anchors_preset = 15 anchors_preset = 15
anchor_right = 1.0 anchor_right = 1.0
@ -369,92 +129,13 @@ grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
mouse_filter = 0 mouse_filter = 0
[node name="SettingsPopup" type="PanelContainer" parent="SettingsContainer"] [node name="SettingsPopup" parent="SettingsContainer" instance=ExtResource("9_vhfai")]
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")]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
[node name="Video Settings" parent="SettingsContainer/SettingsPopup/TabContainer" instance=ExtResource("3_f0dcd")] [node name="SaveGameList" parent="." instance=ExtResource("10_vhfai")]
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"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 1 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="."] [node name="CenterContainer" type="CenterContainer" parent="."]
visible = false visible = false

View File

@ -1,4 +1,4 @@
class_name SaveGameList extends CenterContainer class_name SaveGameList extends Control
signal _picked(save_game: SaveGame) signal _picked(save_game: SaveGame)
@ -7,7 +7,8 @@ var save_buttons: Array[SaveGameDisplay]
@export var update_display: bool: @export var update_display: bool:
set(value): set(value):
_load_games() _load_games()
var scroll_container: ScrollContainer
@onready var list_container: VBoxContainer = %ListContainer
func _validate_property(property: Dictionary) -> void: func _validate_property(property: Dictionary) -> void:
if property.name == "saves": if property.name == "saves":
@ -15,8 +16,9 @@ func _validate_property(property: Dictionary) -> void:
func _ready() -> void: func _ready() -> void:
_close()
_load_games() _load_games()
hide()
set_process_input(false)
func _ensure_directory() -> void: func _ensure_directory() -> void:
var dir := DirAccess.open(State.user_saves_path) var dir := DirAccess.open(State.user_saves_path)
@ -56,18 +58,12 @@ func _sort_saves() -> void:
func _rebuild_buttons() -> void: func _rebuild_buttons() -> void:
save_buttons = [] save_buttons = []
if scroll_container != null: for child in list_container.get_children():
scroll_container.queue_free() child.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)
var save_box := VBoxContainer.new() var save_box := VBoxContainer.new()
save_box.add_theme_constant_override("separation", 16) 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()): for i in range(saves.size()):
var new_button := SaveGameDisplay.new(saves[i], i+1) 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. # 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: func pick_save_slot() -> SaveGame:
await _open() await open()
var result = await _picked var result = await _picked
await _close() await close()
return result return result
# TODO: ugh, godot tweens are the wurst # TODO: ugh, godot tweens are the wurst
func _open() -> void: func open() -> void:
get_parent_control().show() show()
set_process_input(true)
save_buttons[0].grab_focus() save_buttons[0].grab_focus()
modulate = Color.TRANSPARENT modulate = Color.TRANSPARENT
visible = true
var tween := get_tree().create_tween() var tween := get_tree().create_tween()
tween.tween_property(self, "modulate", Color.WHITE, 0.5) tween.tween_property(self, "modulate", Color.WHITE, 0.5)
await tween.finished await tween.finished
set_process_input(true)
func _close() -> void: func close() -> void:
set_process_input(false) set_process_input(false)
var tween := get_tree().create_tween() var tween := get_tree().create_tween()
tween.tween_property(self, "modulate", Color.TRANSPARENT, 0.5) tween.tween_property(self, "modulate", Color.TRANSPARENT, 0.5)
await tween.finished await tween.finished
visible = false hide()
get_parent_control().hide()

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