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:
+7
-27
@@ -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");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user