use crate::{ GameState, HEDZ_GREEN, global_observer, loading_assets::UIAssets, protocol::PlaySound, server_observer, }; use avian3d::prelude::Rotation; use bevy::prelude::*; use serde::{Deserialize, Serialize}; #[derive(Component, Reflect, Default)] #[reflect(Component)] #[require(Transform)] pub struct Cash; #[derive(Component, Reflect, Default)] #[reflect(Component)] struct CashText; #[derive(Component, Reflect, Default, Serialize, Deserialize, PartialEq)] pub struct CashInventory { pub cash: i32, } #[derive(Event)] pub struct CashCollectEvent; pub fn plugin(app: &mut App) { app.add_systems(OnEnter(GameState::Playing), setup); app.add_systems( Update, (rotate, update_ui).run_if(in_state(GameState::Playing)), ); server_observer!(app, on_cash_collect); } fn on_cash_collect( _trigger: On, mut commands: Commands, mut cash: Single<&mut CashInventory>, ) { use bevy_replicon::prelude::{SendMode, ServerTriggerExt, ToClients}; commands.server_trigger(ToClients { mode: SendMode::Broadcast, message: PlaySound::CashCollect, }); cash.cash += 100; } fn rotate(time: Res