84 lines
3 KiB
GDScript
84 lines
3 KiB
GDScript
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
|