feat(engine): InfoToastEvent — show locked-mode messages on-screen

Replaces silent info!() log calls with on-screen toasts when the player
presses Z/X/T without reaching the required unlock level. Any system
can now fire InfoToastEvent(message) to surface a brief text overlay
without depending on a specific plugin.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
root
2026-04-27 02:57:34 +00:00
parent 4a33cbdc22
commit 11cb53ab29
6 changed files with 36 additions and 20 deletions
+9 -1
View File
@@ -11,7 +11,7 @@ use crate::auto_complete_plugin::AutoCompleteState;
use crate::card_plugin::CardEntity;
use crate::challenge_plugin::ChallengeAdvancedEvent;
use crate::daily_challenge_plugin::{DailyChallengeCompletedEvent, DailyGoalAnnouncementEvent};
use crate::events::NewGameConfirmEvent;
use crate::events::{InfoToastEvent, NewGameConfirmEvent};
use crate::events::{AchievementUnlockedEvent, GameWonEvent};
use crate::game_plugin::GameMutation;
use crate::layout::LayoutResource;
@@ -93,6 +93,7 @@ impl Plugin for AnimationPlugin {
.add_event::<ChallengeAdvancedEvent>()
.add_event::<SettingsChangedEvent>()
.add_event::<NewGameConfirmEvent>()
.add_event::<InfoToastEvent>()
.init_resource::<EffectiveSlideDuration>()
.add_systems(Startup, init_slide_duration)
.add_systems(
@@ -111,6 +112,7 @@ impl Plugin for AnimationPlugin {
handle_settings_toast,
handle_auto_complete_toast,
handle_new_game_confirm_toast,
handle_info_toast,
tick_toasts,
)
.after(GameMutation),
@@ -322,6 +324,12 @@ fn handle_new_game_confirm_toast(
}
}
fn handle_info_toast(mut commands: Commands, mut events: EventReader<InfoToastEvent>) {
for ev in events.read() {
spawn_toast(&mut commands, ev.0.clone(), 3.0);
}
}
fn tick_toasts(
mut commands: Commands,
time: Res<Time>,