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