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