use crate::{ GameState, global_observer, tb_entities::{Movable, MoveTarget}, }; use bevy::{platform::collections::HashSet, prelude::*}; use bevy_trenchbroom::prelude::*; #[derive(Component, Reflect, Default, Debug)] #[reflect(Component)] struct ActiveMovable { pub start: Transform, pub target: Transform, pub start_time: f32, pub duration: f32, } #[derive(Event)] pub struct TriggerMovableEvent(pub HashSet); pub fn plugin(app: &mut App) { app.register_type::(); app.add_systems(Update, move_active.run_if(in_state(GameState::Playing))); global_observer!(app, on_movable_event); } fn on_movable_event( trigger: Trigger, mut commands: Commands, uninit_movables: Query< (Entity, &Target, &Transform, &Movable), (Without, With), >, targets: Query<(&MoveTarget, &Transform)>, time: Res