Ship the 0.9.0 production-quality milestone
Add mixer/accessibility settings, caption/reduce-motion hooks, audio volume clamping, a 24-NPC performance smoke and shortened coat/dress stride for hem clipping. Record the explicit Godot 4.3-CI/4.7-local matrix and the 0.9 production scope. Headless 250/250, Python 94/94, 24-NPC budget smoke passes.
This commit is contained in:
1 parent
b5d4d5fb87
commit
883626a067
19 files changed
+240
-131
No files matched your search
@@ -22,6 +22,11 @@ var _font_scale_value: Label = null
|
||||
var _invert_y: CheckButton = null
|
||||
var _head_bob: CheckButton = null
|
||||
var _difficulty: OptionButton = null
|
||||
var _master: HSlider = null
|
||||
var _sfx: HSlider = null
|
||||
var _ambience: HSlider = null
|
||||
var _reduce_motion: CheckButton = null
|
||||
var _captions: CheckButton = null
|
||||
var _bind_buttons := {}
|
||||
var _listening_action := ""
|
||||
var settings: Dictionary = {}
|
||||
@@ -101,6 +106,27 @@ func _build() -> void:
|
||||
_difficulty.item_selected.connect(_on_difficulty_selected)
|
||||
diff_row.add_child(_difficulty)
|
||||
|
||||
var audio_row := HBoxContainer.new()
|
||||
column.add_child(audio_row)
|
||||
audio_row.add_child(_volume_label("Master volume"))
|
||||
_master = _add_slider(audio_row, 0.0, 1.0, 0.05)
|
||||
audio_row.add_child(_volume_label("SFX"))
|
||||
_sfx = _add_slider(audio_row, 0.0, 1.0, 0.05)
|
||||
audio_row.add_child(_volume_label("Ambience"))
|
||||
_ambience = _add_slider(audio_row, 0.0, 1.0, 0.05)
|
||||
_master.value_changed.connect(func(v): settings["master_volume"] = v)
|
||||
_sfx.value_changed.connect(func(v): settings["sfx_volume"] = v)
|
||||
_ambience.value_changed.connect(func(v): settings["ambience_volume"] = v)
|
||||
|
||||
_reduce_motion = CheckButton.new()
|
||||
_reduce_motion.text = "Reduce motion"
|
||||
_reduce_motion.toggled.connect(func(v): settings["reduce_motion"] = v)
|
||||
column.add_child(_reduce_motion)
|
||||
_captions = CheckButton.new()
|
||||
_captions.text = "Captions / subtitles"
|
||||
_captions.toggled.connect(func(v): settings["captions_enabled"] = v)
|
||||
column.add_child(_captions)
|
||||
|
||||
var replay_row := HBoxContainer.new()
|
||||
replay_row.alignment = BoxContainer.ALIGNMENT_CENTER
|
||||
column.add_child(replay_row)
|
||||
@@ -165,6 +191,13 @@ func _add_label_row(parent: Control, text: String) -> Label:
|
||||
row.add_child(value)
|
||||
return value
|
||||
|
||||
func _volume_label(text: String) -> Label:
|
||||
var label := Label.new()
|
||||
label.text = text
|
||||
label.add_theme_font_size_override("font_size", 11)
|
||||
label.custom_minimum_size = Vector2(82, 0)
|
||||
return label
|
||||
|
||||
func _add_slider(parent: Control, min_v: float, max_v: float, step: float) -> HSlider:
|
||||
var slider := HSlider.new()
|
||||
slider.min_value = min_v
|
||||
@@ -189,6 +222,16 @@ func open(current: Dictionary) -> void:
|
||||
if _difficulty:
|
||||
var difficulty := str(settings.get("ai_difficulty", "normal"))
|
||||
_difficulty.select(["easy", "normal", "hard"].find(difficulty))
|
||||
if _master:
|
||||
_master.set_value_no_signal(float(settings.get("master_volume", 1.0)))
|
||||
if _sfx:
|
||||
_sfx.set_value_no_signal(float(settings.get("sfx_volume", 1.0)))
|
||||
if _ambience:
|
||||
_ambience.set_value_no_signal(float(settings.get("ambience_volume", 1.0)))
|
||||
if _reduce_motion:
|
||||
_reduce_motion.set_pressed_no_signal(bool(settings.get("reduce_motion", false)))
|
||||
if _captions:
|
||||
_captions.set_pressed_no_signal(bool(settings.get("captions_enabled", true)))
|
||||
_listening_action = ""
|
||||
_refresh_bind_buttons()
|
||||
_sync_labels()
|
||||
|
||||
Reference in new issue
Block a user