diff --git a/crates/game-logic/src/engine/core.rs b/crates/game-logic/src/engine/core.rs index 0873bcb..8c19238 100644 --- a/crates/game-logic/src/engine/core.rs +++ b/crates/game-logic/src/engine/core.rs @@ -89,6 +89,7 @@ impl GameEngine { side: ButtonSide::Right, }, "BallSaverReady" => GameEvent::BallSaverReady, + "MultiballTriggered" => GameEvent::MultiballTriggered, unknown => { tracing::debug!(event_type = unknown, "unhandled screen event type"); return vec![]; @@ -135,7 +136,6 @@ impl GameEngine { return envelopes; } self.state.balls_lost_since_start += 1; - self.state.bumper_hit_count = 0; self.state.lives = self.state.lives.saturating_sub(1); let (pve_env, extra) = self.pve_engine.on_event(&event, &mut self.state); @@ -207,20 +207,16 @@ impl GameEngine { envelopes.extend(self.process(e)); } - self.state.bumper_hit_count += 1; - let bumper_count = self.state.bumper_hit_count; envelopes.extend(self.check_timer_bonus(now)); envelopes.push(self.emit_score_delta(scored, "bumper")); envelopes.push(self.emit_score_update()); - envelopes.extend(self.process(GameEvent::BumperCombo { - count: bumper_count, - })); } - GameEvent::BumperCombo { count } => { - if count >= crate::engine::config::MULTIBALL_RING_THRESHOLD { - envelopes.extend(self.process(GameEvent::MultiballWin)); + GameEvent::MultiballTriggered => { + if self.state.phase != GamePhase::InGame { + return envelopes; } + envelopes.extend(self.process(GameEvent::MultiballWin)); } GameEvent::PortalUsed => { @@ -272,7 +268,6 @@ impl GameEngine { } GameEvent::MultiballWin => { - self.state.bumper_hit_count = 0; let pts = crate::engine::config::MULTIBALL_SCORE as u64; self.state.add_score(pts); envelopes.push(self.emit_score_delta(pts, "multiball")); diff --git a/crates/game-logic/src/engine/events.rs b/crates/game-logic/src/engine/events.rs index 3cecb29..0c8c1fa 100644 --- a/crates/game-logic/src/engine/events.rs +++ b/crates/game-logic/src/engine/events.rs @@ -43,11 +43,11 @@ pub enum GameEvent { ButtonPressed { side: ButtonSide }, BumperHit { pts: u32 }, BumperTriangleHit { pts: u32 }, - BumperCombo { count: u32 }, PortalUsed, BallSaverReady, TiltDetected, LifeUp, + MultiballTriggered, MultiballWin, ScoreMultiplierActivated, UltimateActivated { player_id: String }, diff --git a/crates/game-logic/src/engine/states.rs b/crates/game-logic/src/engine/states.rs index 7fb3576..c9e06e0 100644 --- a/crates/game-logic/src/engine/states.rs +++ b/crates/game-logic/src/engine/states.rs @@ -45,7 +45,6 @@ pub struct GameState { pub multiplier_expires_at: Option, pub tilt_state: TiltState, pub balls_lost_since_start: u32, - pub bumper_hit_count: u32, pub session_start: Option, pub cheating_detected: bool, pub extra_balls: u8, @@ -66,7 +65,6 @@ impl GameState { multiplier_expires_at: None, tilt_state: TiltState::default(), balls_lost_since_start: 0, - bumper_hit_count: 0, session_start: None, cheating_detected: false, extra_balls: 0,