noclip gestrichen

Der Befehl war ein Toggle zwischen Play und Free — als getippter
Konsolen-Befehl die falsche Form (man sieht nicht, wohin er schaltet)
und deckungsgleich mit `mode play` / `mode free`. Keine Taste, kein
Menü-Knopf, keine Referenz in assets/ hing daran.

Damit stimmt auch die Doku von set_mode wieder: `menu` und die
SetMode-Action sind jetzt tatsächlich die einzigen Schreibpfade.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-28 23:31:49 +02:00
co-authored by Claude Opus 5
parent a3ace75c81
commit 8bee8322c3
+7 -27
View File
@@ -224,9 +224,8 @@ impl Session {
("", _) => ExecResult::empty(),
("quit" | "exit", _) => ExecResult { output: Vec::new(), quit: true },
("menu", _) => {
// Menü öffnen bzw. ins Spiel zurück. „Fortsetzen" landet im
// Spielmodus (Play), nicht im Noclip; aus Play oder
// Free öffnet es das Menü. (Dialog wird anders geroutet.)
// Menü öffnen bzw. ins Spiel zurück; „Fortsetzen" landet immer
// im Spielmodus, nie im Noclip. (Dialog wird anders geroutet.)
let t = match self.mode {
Mode::Menu => ModeTarget::Play,
_ => ModeTarget::Menu,
@@ -234,14 +233,6 @@ impl Session {
self.set_mode(t);
ExecResult::empty()
}
("noclip", _) => {
let t = match self.mode {
Mode::FirstPerson => ModeTarget::Free,
_ => ModeTarget::Play,
};
self.set_mode(t);
ExecResult::empty()
}
("help", _) => ExecResult::lines(help()),
("kv", _) => ExecResult::lines(self.dump_kv()),
("reload", _) => {
@@ -361,9 +352,9 @@ impl Session {
}
/// Frontend-neutrales [`ModeTarget`] auf den konkreten [`Mode`] mappen.
/// Einziger Schreibpfad für die nicht-Dialog-Modi — `menu`/`noclip`/`mode`
/// und die `SetMode`-Action laufen alle hier durch. (Der Dialog-Modus
/// entsteht ausschließlich in `step` aus dem Story-Ablauf.)
/// Einziger Schreibpfad für die nicht-Dialog-Modi — `menu` und die
/// `SetMode`-Action laufen beide hier durch. (Der Dialog-Modus entsteht
/// ausschließlich in `step` aus dem Story-Ablauf.)
fn set_mode(&mut self, t: ModeTarget) {
self.mode = match t {
ModeTarget::Play => Mode::FirstPerson,
@@ -389,8 +380,7 @@ fn help() -> Vec<String> {
" feuert Signal `Mushroom` mit $self = Mushroom.005".into(),
" kv KV-Store anzeigen".into(),
" menu Menü öffnen / ins Spiel zurück".into(),
" noclip zwischen First-Person und Noclip wechseln".into(),
" mode <m> Modus direkt setzen: play | free | menu".into(),
" mode <m> Modus setzen: play | free (Noclip) | menu".into(),
" reload signals.toml neu laden".into(),
" quit beenden".into(),
]
@@ -466,16 +456,6 @@ mod tests {
assert!(matches!(s.mode, Mode::FirstPerson));
}
#[test]
fn noclip_toggles_play_and_free() {
let mut s = empty_session();
s.mode = Mode::FirstPerson;
s.exec("noclip");
assert!(matches!(s.mode, Mode::Free));
s.exec("noclip");
assert!(matches!(s.mode, Mode::FirstPerson));
}
#[test]
fn fixed_timestep_is_framerate_independent() {
// Gleiche Gesamtzeit, einmal als grober und einmal als viele feine
@@ -535,7 +515,7 @@ mod tests {
assert!(!s.player.grounded);
let flown_to = s.player.pos;
s.exec("noclip");
s.exec("mode play");
assert_eq!(s.player.pos, flown_to, "Noclip-Ende teleportiert nicht zurück");
}