adding thunder and video settings

This commit is contained in:
betalars 2024-09-27 22:02:28 +02:00
parent 1e0719011a
commit c2d3ce2265
5 changed files with 926 additions and 13 deletions

View File

@ -1,7 +1,20 @@
[gd_scene load_steps=6 format=3 uid="uid://bwc2wp7tckm7t"]
[gd_scene load_steps=7 format=3 uid="uid://bwc2wp7tckm7t"]
[ext_resource type="PackedScene" uid="uid://c2uf5vwe2rdbd" path="res://base-environments/youth_room/import/cheeky-city.glb" id="1_yckvd"]
[sub_resource type="GDScript" id="GDScript_bfd5g"]
script/source = "@tool
extends Node3D
@export var light_energy:float = 0:
set(value):
light_energy = value
if is_inside_tree():
light.light_energy = light_energy
@onready var light := $DirectionalLight3D
"
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_6f36u"]
sky_top_color = Color(0.101961, 0.0666667, 0.054902, 1)
sky_horizon_color = Color(0.0627451, 0.054902, 0.0823529, 1)
@ -25,6 +38,7 @@ glow_strength = 0.7
glow_bloom = 0.5
glow_blend_mode = 1
glow_hdr_threshold = 0.0
glow_hdr_scale = 0.0
fog_light_color = Color(0.258824, 0.184314, 0.101961, 1)
fog_density = 0.03
fog_aerial_perspective = 0.94
@ -42,6 +56,8 @@ dof_blur_far_distance = 0.01
dof_blur_far_transition = 20.0
[node name="outside" type="Node3D"]
script = SubResource("GDScript_bfd5g")
light_energy = 10.0
[node name="cheeky-city" parent="." instance=ExtResource("1_yckvd")]
transform = Transform3D(20, 0, 0, 0, 20, 0, 0, 0, 20, 0, 0, 0)
@ -54,6 +70,22 @@ light_size = 0.279
omni_range = 16.0
omni_attenuation = 0.112656
[node name="OmniLight3D8" type="OmniLight3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -11.2251, -0.256757, 4.38324)
light_color = Color(0.8, 0.603922, 0.392157, 1)
light_energy = 0.2
light_size = 0.279
omni_range = 16.0
omni_attenuation = 0.112656
[node name="OmniLight3D7" type="OmniLight3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.654726, -3.32103, 7.06207)
light_color = Color(0.570621, 0.67174, 0.659698, 1)
light_energy = 0.2
light_size = 0.279
omni_range = 16.0
omni_attenuation = 0.112656
[node name="OmniLight3D2" type="OmniLight3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 40.5472, -0.232839, -32.886)
light_color = Color(0.67451, 0.619608, 0.517647, 1)
@ -97,7 +129,7 @@ environment = SubResource("Environment_fld35")
camera_attributes = SubResource("CameraAttributesPractical_ulrlw")
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(0.65453, -0.526846, 0.54224, 0, 0.717215, 0.696852, -0.756036, -0.456111, 0.469438, 0, 0, 0)
transform = Transform3D(-0.653881, 0.379921, 0.654294, 0.745388, 0.471786, 0.470972, -0.129755, 0.795662, -0.591681, 0, 0, 0)
light_color = Color(0.92549, 0.94902, 0.980392, 1)
light_energy = 0.0
light_angular_distance = 20.0

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=127 format=4 uid="uid://b3b0gyvklqn50"]
[gd_scene load_steps=131 format=4 uid="uid://b3b0gyvklqn50"]
[ext_resource type="Script" path="res://base-environments/youth_room/room_handle.gd" id="1_aitp0"]
[ext_resource type="PackedScene" uid="uid://c0i4ydmxtxfho" path="res://base-environments/youth_room/import/youth_room.glb" id="1_jf3oi"]
@ -1805,6 +1805,211 @@ radius = 0.469631
[sub_resource type="ViewportTexture" id="ViewportTexture_hdmps"]
viewport_path = NodePath("logic/Mind Board/UiWrapper/UiSprite/SubViewport")
[sub_resource type="Animation" id="Animation_xum02"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("visuals/DirectionalLight3D:visible")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("visuals/DirectionalLight3D:light_energy")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [20.0]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("visuals/OmniLight3D:visible")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("visuals/OmniLight3D:light_energy")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [3.0]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("visuals/OmniLight3D:position")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(3.73188, 2.33544, 4.04756)]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("visuals/DirectionalLight3D:rotation")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(-0.170518, -0.366744, -0.433319)]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("WorldEnvironment/window_glass/SubViewport/outside:light_energy")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [0.0]
}
[sub_resource type="Animation" id="Animation_3ms6b"]
resource_name = "lighting_and_thunder"
length = 20.0
tracks/0/type = "audio"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("sfx/thunder")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"clips": [{
"end_offset": 0.0,
"start_offset": 0.0,
"stream": ExtResource("3_wcypa")
}],
"times": PackedFloat32Array(0.3)
}
tracks/0/use_blend = true
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("visuals/DirectionalLight3D:visible")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0.0333338, 0.2, 0.3, 0.8, 2.2),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1),
"update": 1,
"values": [false, true, false, true, false]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("visuals/DirectionalLight3D:light_energy")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.333333, 0.666667, 1.93333),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"update": 0,
"values": [20.0, 20.0, 4.0, 0.0]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("visuals/OmniLight3D:visible")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0.166667, 0.2, 0.233333, 0.4),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"update": 1,
"values": [false, true, false, true]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("visuals/OmniLight3D:light_energy")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0.2, 0.466667, 1.76667),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [1.0, 3.0, 0.0]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("visuals/OmniLight3D:position")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0.2, 0.3, 0.366667, 0.633333, 2.7),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1),
"update": 0,
"values": [Vector3(1.94233, 1.40877, -0.723383), Vector3(1.94233, 1.40877, -0.723383), Vector3(2.26083, 2.78047, 4.02356), Vector3(3.73188, 2.33544, 4.04756), Vector3(-1.28952, 2.33544, 4.04756)]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("visuals/DirectionalLight3D:rotation")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0.133333, 2.1),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector3(-0.170518, -0.366744, -0.433319), Vector3(-0.170518, 0.137901, -0.433319)]
}
tracks/7/type = "value"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("WorldEnvironment/window_glass/SubViewport/outside:light_energy")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0, 0.2, 0.333333, 0.4, 2),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1),
"update": 0,
"values": [0.0, 20.0, 0.0, 5.0, 0.0]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_vwrt1"]
_data = {
"RESET": SubResource("Animation_xum02"),
"lighting_and_thunder": SubResource("Animation_3ms6b")
}
[sub_resource type="GDScript" id="GDScript_j63gy"]
script/source = "extends AnimationPlayer
func _process(delta: float) -> void:
if Input.is_action_just_pressed(\"ui_focus_next\"):
stop()
play(\"lighting_and_thunder\")
"
[sub_resource type="GDScript" id="GDScript_35dmj"]
script/source = "extends SpotLight3D
@ -2019,11 +2224,13 @@ ssao_radius = 1.24
ssao_intensity = 3.09
ssao_power = 1.91184
ssao_detail = 3.0
ssil_intensity = 0.72
ssil_normal_rejection = 0.56
ssil_enabled = true
ssil_radius = 2.0
ssil_intensity = 0.5
ssil_normal_rejection = 0.8
sdfgi_enabled = true
sdfgi_use_occlusion = true
sdfgi_cascades = 3
sdfgi_read_sky_light = false
sdfgi_min_cell_size = 0.0664062
glow_enabled = true
glow_levels/2 = 0.3
@ -2054,6 +2261,7 @@ auto_exposure_min_sensitivity = 100.0
script/source = "extends WorldEnvironment
func _ready():
State.environment_settings_changed.connect(_on_environment_settings_update)
focus_env()
func focus_env():
@ -2072,6 +2280,10 @@ func play_scene(_id: int, _repeat):
func _on_picker_cards_picked(_cards):
focus_env()
func _on_environment_settings_update():
environment.ssil_enabled = State.ssil_enable
environment.sdfgi_enabled = State.sdfgi_enable
"
[sub_resource type="ArrayMesh" id="ArrayMesh_laf32"]
@ -3060,10 +3272,16 @@ item_name = "Mind Board"
transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, 0, 0, 0)
shape = SubResource("CapsuleShape3D_72g2i")
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
libraries = {
"": SubResource("AnimationLibrary_vwrt1")
}
script = SubResource("GDScript_j63gy")
[node name="sfx" type="Node3D" parent="."]
[node name="rain on window" type="AudioStreamPlayer3D" parent="sfx"]
transform = Transform3D(-0.410985, -0.460061, 0.787042, -0.904759, 0.311726, -0.290238, -0.111814, -0.831367, -0.544359, 3.06375, 1.7366, -0.351724)
transform = Transform3D(-0.410985, -0.460061, 0.787042, -0.904759, 0.311726, -0.290238, -0.111814, -0.831367, -0.544359, 3.06375, 1.7366, -0.735096)
stream = ExtResource("2_3haaq")
attenuation_model = 1
volume_db = -15.367
@ -3075,7 +3293,7 @@ emission_angle_filter_attenuation_db = -19.6
[node name="thunder" type="AudioStreamPlayer3D" parent="sfx"]
transform = Transform3D(-0.410985, -0.460061, 0.787042, -0.904759, 0.311726, -0.290238, -0.111814, -0.831367, -0.544359, -0.248397, 4.34956, 8.85405)
stream = ExtResource("3_wcypa")
panning_strength = 0.3
bus = &"sfx"
[node name="distant_rain" type="AudioStreamPlayer3D" parent="sfx"]
@ -3087,6 +3305,56 @@ bus = &"outside-rain"
[node name="visuals" type="Node3D" parent="."]
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="visuals"]
cast_shadow = 3
calculate_tangents = false
[node name="CSGBox3D" type="CSGBox3D" parent="visuals/CSGCombiner3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.34613, 1.23087, 2.97923)
size = Vector3(5.26758, 2.69583, 0.137207)
[node name="CSGBox3D2" type="CSGBox3D" parent="visuals/CSGCombiner3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.441227, 2.48778, 0.766643)
size = Vector3(3.47876, 0.182022, 4.56238)
[node name="CSGBox3D6" type="CSGBox3D" parent="visuals/CSGCombiner3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.21313, 1.23861, 0.766643)
size = Vector3(0.170044, 2.68037, 4.56238)
[node name="CSGBox3D4" type="CSGBox3D" parent="visuals/CSGCombiner3D"]
transform = Transform3D(0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 0, 0, 1, 3.1589, 1.73312, 0.766643)
size = Vector3(2.57013, 0.182022, 4.56238)
[node name="CSGBox3D5" type="CSGBox3D" parent="visuals/CSGCombiner3D"]
transform = Transform3D(0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 0, 0, 1, 3.09781, 1.7764, -0.332882)
operation = 2
size = Vector3(1.25306, 0.312046, 0.893661)
[node name="CSGBox3D3" type="CSGBox3D" parent="visuals/CSGCombiner3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.977913, 1.52551, 2.97298)
operation = 2
calculate_tangents = false
flip_faces = true
size = Vector3(1.74371, 1.18614, 0.271545)
[node name="OmniLight3D" type="OmniLight3D" parent="visuals"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.73188, 2.33544, 4.04756)
visible = false
light_energy = 3.0
light_size = 2.0
light_specular = 0.2
shadow_enabled = true
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="visuals"]
transform = Transform3D(0.821674, 0.447187, -0.353377, -0.413796, 0.894414, 0.169693, 0.39195, 0.00679388, 0.919961, 0.866179, 2.88055, 4.51936)
visible = false
light_color = Color(0.81982, 0.935491, 0.980381, 1)
light_energy = 20.0
light_angular_distance = 2.0
shadow_enabled = true
directional_shadow_mode = 1
sky_mode = 1
[node name="lights" type="Node3D" parent="visuals"]
[node name="desk_light" type="SpotLight3D" parent="visuals/lights"]
@ -3111,7 +3379,6 @@ light_specular = 0.0
shadow_enabled = true
shadow_bias = 0.01
shadow_normal_bias = 5.78
shadow_blur = 0.5
omni_attenuation = 1.51572
[node name="shade_light" type="OmniLight3D" parent="visuals/lights/desk_light"]
@ -3167,14 +3434,16 @@ box_projection = true
enable_shadows = true
cull_mask = 1
mesh_lod_threshold = 0.0
ambient_mode = 0
[node name="door_probe" type="ReflectionProbe" parent="visuals/lighting aids"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.587879, 1.71708, -0.403385)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.587879, 1.51607, -0.403385)
max_distance = 5.0
size = Vector3(3.31181, 3.24101, 2.95173)
origin_offset = Vector3(0, -0.625, 0)
box_projection = true
enable_shadows = true
ambient_mode = 0
[node name="lower_bunkbed_probe" type="ReflectionProbe" parent="visuals/lighting aids"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.58996, 0.192757, -0.633191)
@ -3183,20 +3452,26 @@ size = Vector3(2.58293, 1.36611, 3.1946)
origin_offset = Vector3(-0.718262, 0, 0.460938)
box_projection = true
enable_shadows = true
ambient_mode = 0
[node name="upper_bunkbed_probe" type="ReflectionProbe" parent="visuals/lighting aids"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.14632, 1.55788, -0.232231)
intensity = 0.5
max_distance = 5.0
size = Vector3(1.81269, 1.61006, 2.62172)
origin_offset = Vector3(-0.133301, 0.105469, -0.11377)
box_projection = true
interior = true
enable_shadows = true
ambient_mode = 0
[node name="desk_probe" type="ReflectionProbe" parent="visuals/lighting aids"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.539355, 1.28256, 1.24151)
max_distance = 5.0
size = Vector3(1.22007, 1.24704, 2)
origin_offset = Vector3(0, -0.438, 0)
box_projection = true
enable_shadows = true
ambient_mode = 0
[node name="vfx" type="Node3D" parent="visuals"]
@ -3256,6 +3531,7 @@ script = SubResource("GDScript_rfgs6")
[node name="outside" parent="WorldEnvironment/window_glass/SubViewport" instance=ExtResource("32_2vgep")]
transform = Transform3D(-1, 0, -1.50996e-07, 0, 1, 0, 1.50996e-07, 0, -1, 0.906618, 1.33684, 2.65628)
light_energy = 0.0
[node name="SceneUI" type="Control" parent="."]
visible = false
@ -3313,8 +3589,6 @@ light_array = Array[Vector3]([Vector3(-0.545, 0.915, 1.035), Vector3(-0.47, 0.85
[connection signal="body_exited" from="logic/Bed and Ladders/reset_failover" to="logic/PlayerController" method="_on_bed_exit"]
[connection signal="pressed" from="logic/UI/ending_button" to="logic/UI/ending_button" method="hide"]
[connection signal="pressed" from="logic/UI/ending_button" to="logic/UI/ending" method="show"]
[connection signal="cards_picked" from="logic/UI/picker" to="logic/UI/board" method="populate_board"]
[connection signal="cards_picked" from="logic/UI/picker" to="WorldEnvironment" method="_on_picker_cards_picked"]
[connection signal="board_completed" from="logic/UI/board" to="logic/UI/ending_button" method="show"]
[connection signal="skip" from="logic/ScenePlayer/childhood/PanelContainer/skip_control" to="logic/ScenePlayer" method="on_childhood_done"]
[connection signal="skip" from="logic/ScenePlayer/childhood/PanelContainer/skip_control" to="logic/ScenePlayer" method="play" binds= ["RESET"]]

View File

@ -0,0 +1,247 @@
extends TabBar
signal changed
var has_stage:bool = false:
set(stage):
has_stage = stage
visible = has_stage
preset_selected = preset_selected
@export_file(".json") var settings_path = "user://video_settings.json"
@export_enum("None", "Performance", "Balanced", "Quality") var preset_selected:int = 2:
set(value):
preset_selected = value
if has_stage:
match preset_selected:
1: %PerformancePreset.grab_focus()
2: %BalancedPreset.grab_focus()
3: %QualityPreset.grab_focus()
_: %FullscreenMode.grab_focus()
@export var window_mode: DisplayServer.WindowMode = DisplayServer.WindowMode.WINDOW_MODE_FULLSCREEN:
set(value):
window_mode = value
changed.emit()
@onready var fullscreen_selector: OptionButton = %FullscreenMode
@export_range(0.5, 2) var render_scale: float = 1:
set(value):
render_scale = value
changed.emit()
@onready var scale_selector: SpinBox = %RenderScale
@export var upscale_mode: RenderingServer.ViewportScaling3DMode = RenderingServer.ViewportScaling3DMode.VIEWPORT_SCALING_3D_MODE_BILINEAR :
set(value):
upscale_mode = value
changed.emit()
@onready var upscale_selector: OptionButton = %SuperResolution
@export_range(30, 144) var max_fps: int = 60:
set(value):
max_fps = value
changed.emit()
@onready var fps_enabler: CheckBox = %EnableFps
var fps_enabled: bool:
set(value):
print("toggle")
fps_enabled = value
@onready var fps_selector: SpinBox = %MaxFps
@onready var fps_placeholder:PanelContainer = %FPSPlaceholder
@export_enum("low", "medium", "high", "ultra") var lighting_quality: int = 3:
set(value):
lighting_quality = value
changed.emit()
@onready var lightning_selector: OptionButton = %LightingQuality
@export_enum("low", "medium", "high") var shadow_quality: int = 3:
set(value):
shadow_quality = value
changed.emit()
@onready var shadow_selector: OptionButton = %ShadowQuality
@export_enum("no", "1x", "2x", "4x", "8x") var texture_filtering:int = 3:
set(value):
texture_filtering = value
changed.emit()
@onready var texture_selector: OptionButton = %TextureFiltering
@export_enum("no", "1x", "2x", "4x") var msaa = 0:
set(value):
msaa = value
changed.emit()
@onready var msaa_selector: OptionButton = %AntiAlaising
@export var vsync_mode: DisplayServer.VSyncMode = DisplayServer.VSyncMode.VSYNC_ENABLED:
set(value):
vsync_mode = value
changed.emit()
@onready var vsync_selector: OptionButton = %vSync
var has_changed: bool = false:
set(value):
has_changed = value
preset_selected = 0
func _ready() -> void:
load_settings()
propagate_settings()
fullscreen_selector.item_selected.connect(func(value): window_mode = value)
scale_selector.value_changed.connect(func(value): render_scale = value)
upscale_selector.item_selected.connect(func(value): upscale_mode = value)
lightning_selector.item_selected.connect(func(value): lighting_quality = value)
shadow_selector.item_selected.connect(func(value): shadow_quality = value)
texture_selector.item_selected.connect(func(value): texture_filtering = 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
%ConfirmExit.pressed.connect(_on_exit_confirmed)
%ConfirmSave.pressed.connect(_on_confirm_button_pressed)
%ConfirmAbort.pressed.connect($Popup.hide)
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)
print(parsed)
for key in parsed.keys():
set(key, parsed[key])
for property in get_property_list():
if parsed.has(property.name):
if typeof(parsed[property.name]) == property.type:
set(property.name, parsed[property.name])
func propagate_settings():
fullscreen_selector.select(window_mode)
scale_selector.value = render_scale
upscale_selector.select(upscale_mode)
fps_enabler.button_pressed = fps_enabled
fps_selector.value = max_fps
lightning_selector.select(lighting_quality)
shadow_selector.select(shadow_quality)
texture_selector.select(texture_filtering)
msaa_selector.select(msaa)
vsync_selector.select(vsync_mode)
func save_settings():
var out_dict = {
"window_mode": window_mode,
"render_scale": render_scale,
"upscale_mode": upscale_mode,
"max_fps": max_fps,
"lighting_quality": lighting_quality,
"shadow_quality": shadow_quality,
"texture_filtering": texture_filtering,
"msaa": msaa,
"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()
func _on_exit_confirmed() -> void:
State.leave_stage(self)
func _on_exit_button_pressed() -> void:
if has_changed:
$Popup.show()
else:
State.leave_stage(self)
func _on_confirm_button_pressed() -> void:
ProjectSettings.set_setting("display/window/size/mode", fullscreen_selector)
ProjectSettings.set_setting("rendering/scaling_3d/scale", render_scale)
ProjectSettings.set_setting("rendering/scaling_3d/mode", upscale_mode)
ProjectSettings.set_setting("application/run/max_fps", max_fps if fps_enabled else 0)
match lighting_quality:
0:
State.ssil_enable = false
State.sdfgi_enable = false
ProjectSettings.set_setting("rendering/shading/overrides/force_lambert_over_burley", true)
1:
State.ssil_enable = false
State.sdfgi_enable = true
ProjectSettings.set_setting("rendering/global_illumination/sdfgi/probe_ray_count", 8)
ProjectSettings.set_setting("rendering/shading/overrides/force_lambert_over_burley", true)
2:
State.ssil_enable = false
State.sdfgi_enable = true
ProjectSettings.set_setting("rendering/global_illumination/sdfgi/probe_ray_count", 16)
ProjectSettings.set_setting("rendering/shading/overrides/force_lambert_over_burley", false)
3:
State.ssil_enable = true
State.sdfgi_enable = true
ProjectSettings.set_setting("rendering/global_illumination/sdfgi/probe_ray_count", 32)
ProjectSettings.set_setting("rendering/shading/overrides/force_lambert_over_burley", false)
ProjectSettings.set_setting("rendering/lights_and_shadows/positional_shadow/soft_shadow_filter_quality", shadow_quality)
ProjectSettings.set_setting("rendering/lights_and_shadows/directional_shadow/soft_shadow_filter_quality", shadow_quality)
ProjectSettings.set_setting("rendering/textures/default_filters/anisotropic_filtering_level", texture_filtering)
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:
render_scale = 0.8
max_fps = 60
fps_enabled = true
lighting_quality = 0
shadow_quality = 0
texture_filtering = 1
msaa = 0
vsync_mode = 0
propagate_settings()
preset_selected = 1
func _on_balanced_preset_pressed() -> void:
render_scale = 1
max_fps = 60
fps_enabled = true
lighting_quality = 2
shadow_quality = 1
texture_filtering = 3
msaa = 1
vsync_mode = 1
propagate_settings()
preset_selected = 2
func _on_quality_preset_pressed() -> void:
render_scale = 1
max_fps = 60
fps_enabled = false
lighting_quality = 3
shadow_quality = 2
texture_filtering = 4
msaa = 3
vsync_mode = 1
propagate_settings()
preset_selected = 3

View File

@ -0,0 +1,350 @@
[gd_scene load_steps=3 format=3 uid="uid://gmxenhavh1lp"]
[ext_resource type="Script" path="res://logic-scenes/main menu/video_settings.gd" id="1_sii8g"]
[sub_resource type="GDScript" id="GDScript_24hb5"]
script/source = "@tool
extends SpinBox
func reset():
value = 1
var normal_stylebox:StyleBoxFlat = get_line_edit().get_theme_stylebox(\"normal\")
var focus_stylebox:StyleBoxFlat
var edit_stylebox:StyleBoxFlat
@export var hold_down_delay: float = 0.5
@export var repeat_delay: float = 0.1
@export_range(1, 100) var repeat_multiplier: int = 1
@export var pressed: bool = false:
set(value):
pressed = value
if pressed:
prefix = \"<\"
suffix = \">\"
get_line_edit().add_theme_stylebox_override(\"normal\", edit_stylebox)
else:
prefix = \" \"
suffix = \" \"
get_line_edit().add_theme_stylebox_override(\"normal\", focus_stylebox)
func _ready() -> void:
edit_stylebox = normal_stylebox.duplicate(true)
edit_stylebox.bg_color = Color(\"#022635\")
focus_stylebox = normal_stylebox.duplicate(true)
focus_stylebox.border_width_bottom = 2
focus_stylebox.border_width_left = 2
focus_stylebox.border_width_right = 2
focus_stylebox.border_width_top = 2
focus_stylebox.border_color = Color.WHITE
focus_entered.connect(_on_focus_enter)
focus_exited.connect(_on_focus_exit)
func _input(event: InputEvent) -> void:
if has_focus():
if Input.is_action_just_pressed(\"ui_accept\"):
print(\"pressed!\")
print(pressed)
pressed = not pressed
print(pressed)
get_viewport().set_input_as_handled()
if pressed:
if Input.is_action_just_pressed(\"ui_up\") or Input.is_action_just_pressed(\"ui_right\"):
value += step
get_viewport().set_input_as_handled()
await(get_tree().create_timer(hold_down_delay).timeout)
while Input.is_action_pressed(\"ui_up\") or Input.is_action_pressed(\"ui_right\"):
value += step * repeat_multiplier
await(get_tree().create_timer(repeat_delay).timeout)
elif Input.is_action_just_pressed(\"ui_down\") or Input.is_action_just_pressed(\"ui_left\"):
value -= step
get_viewport().set_input_as_handled()
else:
if Input.is_action_just_pressed(\"ui_up\"):
print(focus_neighbor_top)
func _on_focus_enter():
get_line_edit().add_theme_stylebox_override(\"normal\", focus_stylebox)
func _on_focus_exit():
get_line_edit().remove_theme_stylebox_override(\"normal\")
"
[node name="Video Settings" type="TabBar"]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_sii8g")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="Label" type="Label" parent="VBoxContainer"]
layout_mode = 2
theme_type_variation = &"HeaderLarge"
text = "Video Settings"
[node name="GridContainer" type="GridContainer" parent="VBoxContainer"]
layout_mode = 2
columns = 2
[node name="General" type="Label" parent="VBoxContainer/GridContainer"]
layout_mode = 2
theme_type_variation = &"HeaderMedium"
text = "General"
[node name="HSeparator" type="HSeparator" parent="VBoxContainer/GridContainer"]
layout_mode = 2
[node name="Preset" type="Label" parent="VBoxContainer/GridContainer"]
layout_mode = 2
text = "apply preset"
[node name="HBoxContainer2" type="HBoxContainer" parent="VBoxContainer/GridContainer"]
layout_mode = 2
[node name="PerformancePreset" type="Button" parent="VBoxContainer/GridContainer/HBoxContainer2"]
unique_name_in_owner = true
layout_mode = 2
text = "Performance"
[node name="BalancedPreset" type="Button" parent="VBoxContainer/GridContainer/HBoxContainer2"]
unique_name_in_owner = true
layout_mode = 2
text = "Balanced"
[node name="QualityPreset" type="Button" parent="VBoxContainer/GridContainer/HBoxContainer2"]
unique_name_in_owner = true
layout_mode = 2
text = "Quality"
[node name="Label" type="Label" parent="VBoxContainer/GridContainer"]
layout_mode = 2
text = "Fulscreen Mode"
[node name="FullscreenMode" type="OptionButton" parent="VBoxContainer/GridContainer"]
unique_name_in_owner = true
layout_mode = 2
selected = 1
item_count = 3
popup/item_0/text = "Windowed"
popup/item_1/text = "Fullscreen"
popup/item_1/id = 1
popup/item_2/text = "exclusive Fullscreen"
popup/item_2/id = 2
[node name="Scale_Label" type="Label" parent="VBoxContainer/GridContainer"]
layout_mode = 2
text = "Rendering Scale"
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/GridContainer"]
layout_mode = 2
[node name="Button" type="Button" parent="VBoxContainer/GridContainer/HBoxContainer"]
layout_mode = 2
text = "reset"
[node name="RenderScale" type="SpinBox" parent="VBoxContainer/GridContainer/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
focus_mode = 2
min_value = 0.25
max_value = 2.0
step = 0.05
value = 1.0
prefix = " "
suffix = " "
custom_arrow_step = 0.25
select_all_on_focus = true
script = SubResource("GDScript_24hb5")
[node name="Label3" type="Label" parent="VBoxContainer/GridContainer"]
layout_mode = 2
text = "Super Resolution"
[node name="SuperResolution" type="OptionButton" parent="VBoxContainer/GridContainer"]
unique_name_in_owner = true
layout_mode = 2
selected = 0
item_count = 3
popup/item_0/text = "disabled"
popup/item_1/text = "FSR 1.0"
popup/item_1/id = 1
popup/item_2/text = "FSR 2.2"
popup/item_2/id = 2
[node name="EnableFps" type="CheckBox" parent="VBoxContainer/GridContainer"]
unique_name_in_owner = true
layout_mode = 2
text = "limit FPS"
[node name="MaxFps" type="SpinBox" parent="VBoxContainer/GridContainer"]
unique_name_in_owner = true
layout_mode = 2
focus_mode = 2
min_value = 24.0
max_value = 144.0
value = 60.0
prefix = " "
suffix = " "
script = SubResource("GDScript_24hb5")
repeat_multiplier = 5
[node name="Rendering" type="Label" parent="VBoxContainer/GridContainer"]
layout_mode = 2
theme_type_variation = &"HeaderMedium"
text = "Rendering"
[node name="HSeparator2" type="HSeparator" parent="VBoxContainer/GridContainer"]
layout_mode = 2
[node name="Label4" type="Label" parent="VBoxContainer/GridContainer"]
layout_mode = 2
text = "Lighting Quality"
[node name="LightingQuality" type="OptionButton" parent="VBoxContainer/GridContainer"]
unique_name_in_owner = true
layout_mode = 2
selected = 1
item_count = 4
popup/item_0/text = "minimum"
popup/item_1/text = "low SDGI"
popup/item_1/id = 1
popup/item_2/text = "medium SDGI and SI"
popup/item_2/id = 2
popup/item_3/text = "high SDGI and SI"
popup/item_3/id = 3
[node name="ShadowLabel" type="Label" parent="VBoxContainer/GridContainer"]
layout_mode = 2
text = "Shadow Quality"
[node name="ShadowQuality" type="OptionButton" parent="VBoxContainer/GridContainer"]
unique_name_in_owner = true
layout_mode = 2
selected = 1
item_count = 3
popup/item_0/text = "performance"
popup/item_1/text = "balanced"
popup/item_1/id = 1
popup/item_2/text = "quality"
popup/item_2/id = 2
[node name="FilterLabel" type="Label" parent="VBoxContainer/GridContainer"]
layout_mode = 2
text = "Texture Filtering"
[node name="TextureFiltering" type="OptionButton" parent="VBoxContainer/GridContainer"]
unique_name_in_owner = true
layout_mode = 2
selected = 1
item_count = 6
popup/item_0/text = "disabled"
popup/item_1/text = "1x (very fast)"
popup/item_1/id = 1
popup/item_2/text = "2x (fast)"
popup/item_2/id = 2
popup/item_3/text = "4x (average)"
popup/item_3/id = 3
popup/item_4/text = "8x (slow)"
popup/item_4/id = 4
popup/item_5/text = "16x (slowest)"
popup/item_5/id = 5
[node name="AlaisingLabel" type="Label" parent="VBoxContainer/GridContainer"]
layout_mode = 2
text = "Anti Aliasing"
[node name="AntiAlaising" type="OptionButton" parent="VBoxContainer/GridContainer"]
unique_name_in_owner = true
layout_mode = 2
selected = 1
item_count = 4
popup/item_0/text = "disabled"
popup/item_1/text = "2x MSAA"
popup/item_1/id = 1
popup/item_2/text = "4x MSAA"
popup/item_2/id = 2
popup/item_3/text = "8x MSAA"
popup/item_3/id = 3
[node name="SyncLabel" type="Label" parent="VBoxContainer/GridContainer"]
layout_mode = 2
text = "v-Sync"
[node name="vSync" type="OptionButton" parent="VBoxContainer/GridContainer"]
unique_name_in_owner = true
layout_mode = 2
selected = 1
item_count = 4
popup/item_0/text = "disabled"
popup/item_1/text = "enabled"
popup/item_1/id = 1
popup/item_2/text = "adaptive"
popup/item_2/id = 2
popup/item_3/text = "Letterbox"
popup/item_3/id = 3
[node name="ExitButton" type="Button" parent="VBoxContainer/GridContainer"]
layout_mode = 2
text = "discard"
[node name="ConfirmButton" type="Button" parent="VBoxContainer/GridContainer"]
layout_mode = 2
text = "save and apply"
[node name="Popup" type="Popup" parent="."]
scaling_3d_scale = 0.6
initial_position = 2
size = Vector2i(546, 123)
[node name="VBoxContainer" type="VBoxContainer" parent="Popup"]
offset_left = 113.0
offset_right = 153.0
offset_bottom = 40.0
[node name="Label" type="Label" parent="Popup/VBoxContainer"]
layout_mode = 2
text = "Settings have been modified.
Do you really want to leave without saving?"
horizontal_alignment = 1
[node name="HBoxContainer" type="HBoxContainer" parent="Popup/VBoxContainer"]
layout_mode = 2
alignment = 1
[node name="ConfirmExit" type="Button" parent="Popup/VBoxContainer/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
text = "leave"
[node name="ConfirmSave" type="Button" parent="Popup/VBoxContainer/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
text = "save"
[node name="ConfirmAbort" type="Button" parent="Popup/VBoxContainer/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
text = "abort"
[connection signal="pressed" from="VBoxContainer/GridContainer/HBoxContainer2/PerformancePreset" to="." method="_on_performance_preset_pressed"]
[connection signal="pressed" from="VBoxContainer/GridContainer/HBoxContainer2/BalancedPreset" to="." method="_on_balanced_preset_pressed"]
[connection signal="pressed" from="VBoxContainer/GridContainer/HBoxContainer2/QualityPreset" to="." method="_on_quality_preset_pressed"]
[connection signal="pressed" from="VBoxContainer/GridContainer/HBoxContainer/Button" to="VBoxContainer/GridContainer/HBoxContainer/RenderScale" method="reset"]
[connection signal="pressed" from="VBoxContainer/GridContainer/ExitButton" to="." method="_on_exit_button_pressed"]
[connection signal="pressed" from="VBoxContainer/GridContainer/ConfirmButton" to="." method="_on_confirm_button_pressed"]

View File

@ -13,9 +13,19 @@ var show_content_notes: bool = false # ContentNotes/.../Checkbox
var provide_summaries: bool = false # ContentNotes/.../Checkbox2
var allow_skipping: bool = false
var ssil_enable:bool = false:
set(value):
ssil_enable = value
environment_settings_changed.emit()
var sdfgi_enable:bool = false:
set(value):
sdfgi_enable = value
environment_settings_changed.emit()
var stage_list:Array = []
var focus_locked: bool = false
signal environment_settings_changed
signal theme_changed
var current_main_theme:Theme = preload("res://logic-scenes/themes/easy-handwriting.theme"):