scopedvr-map-core/editor/playtest/playtest_settings.gd
2026-11-01 19:31:33 +01:00

84 lines
3 KiB
GDScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

extends RefCounted
class_name PlaytestSettings
## Einstellungen-Speicher für den Lauf-Modus (Karte t_aaff5dcc, T3 Komfort) —
## bewusst NICHT im .svmap-Format und NICHT in main.gd: der Operator hat für
## Einstellungen den Registry-Weg vorgegeben (Panel meldet sich in
## core/ui/panels/registry.gd an), der Zustand lebt HIER als statischer Store.
##
## Ablage: user://scopedvr_playtest.cfg, Abschnitt [playtest].
## Wert: Maus-Empfindlichkeit als Multiplikator (0,1–5,0, Standard 1,0) auf
## die Body-Basis 0,25 Grad/Pixel — jede PC/Maus-Kombination ist anders.
##
## Statischer Cache: ein Lese-Vorgang pro Editor-Start; save_sens() hält den
## Cache frisch. Tests können mit reset_cache() neu laden erzwingen.
const CFG_PATH := "user://scopedvr_playtest.cfg"
const SECTION := "playtest"
const KEY_SENS := "maus_empfindlichkeit"
const DEFAULT_SENS := 1.0
const MIN_SENS := 0.1
const MAX_SENS := 5.0
## Perspektive im Testlauf (Karte t_17a35c59, Taste V): false = First Person
## (Standard, wie bisher), true = Third Person (Avatar sichtbar).
const KEY_THIRD := "dritte_person"
## Cache (null = noch nicht gelesen). static var ist Godot 4.1+.
static var _cache: Variant = null
## Cache für den Perspektive-Eintrag (null = noch nicht gelesen).
static var _cache_third: Variant = null
## Gespeicherte Empfindlichkeit lesen (geclampt auf 0,1–5,0), Standard 1,0.
static func load_sens() -> float:
if _cache != null:
return float(_cache)
var cfg := ConfigFile.new()
var raw: Variant = DEFAULT_SENS
if cfg.load(CFG_PATH) == OK:
raw = cfg.get_value(SECTION, KEY_SENS, DEFAULT_SENS)
var val := clampf(float(raw), MIN_SENS, MAX_SENS)
_cache = val
return val
## Empfindlichkeit speichern (geclampt auf 0,1–5,0) und Cache frisch halten.
## Rückgabe: der tatsächlich gespeicherte Wert.
static func save_sens(value: float) -> float:
var val := clampf(value, MIN_SENS, MAX_SENS)
var cfg := ConfigFile.new()
cfg.load(CFG_PATH) # Fehler → leere Config, nur unser Key wird angelegt.
cfg.set_value(SECTION, KEY_SENS, val)
cfg.save(CFG_PATH)
_cache = val
return val
## Gespeicherte Perspektive lesen (Karte t_17a35c59): true = Third Person.
## Default FALSE = First Person — der Testlauf startet so wie bisher.
static func load_third() -> bool:
if _cache_third != null:
return bool(_cache_third)
var cfg := ConfigFile.new()
var raw: Variant = false
if cfg.load(CFG_PATH) == OK:
raw = cfg.get_value(SECTION, KEY_THIRD, false)
var val := bool(raw)
_cache_third = val
return val
## Perspektive speichern (persistiert über Editor-Neustarts) und Cache frisch
## halten. Rückgabe: der tatsächlich gespeicherte Wert.
static func save_third(value: bool) -> bool:
var cfg := ConfigFile.new()
cfg.load(CFG_PATH) # Fehler → leere Config, nur unser Key wird angelegt.
cfg.set_value(SECTION, KEY_THIRD, value)
cfg.save(CFG_PATH)
_cache_third = value
return value
## Cache verwerfen (für Tests / frisches Neulesen von der Platte).
static func reset_cache() -> void:
_cache = null
_cache_third = null