 64efd08e13
			
		
	
	
		64efd08e13
		
			
		
	
	
	
	
		
			
			# Objective Fixes #16104 ## Solution I removed all instances of `:?` and put them back one by one where it caused an error. I removed some bevy_utils helper functions that were only used in 2 places and don't add value. See: #11478 ## Testing CI should catch the mistakes ## Migration Guide `bevy::utils::{dbg,info,warn,error}` were removed. Use `bevy::utils::tracing::{debug,info,warn,error}` instead. --------- Co-authored-by: SpecificProtagonist <vincentjunge@posteo.net>
		
			
				
	
	
		
			65 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| //! In this example a system sends a custom event with a 50/50 chance during any frame.
 | |
| //! If an event was send, it will be printed by the console in a receiving system.
 | |
| 
 | |
| use bevy_ecs::{event::EventRegistry, prelude::*};
 | |
| 
 | |
| fn main() {
 | |
|     // Create a new empty world and add the event as a resource
 | |
|     let mut world = World::new();
 | |
|     // The event registry is stored as a resource, and allows us to quickly update all events at once.
 | |
|     // This call adds both the registry resource and the events resource into the world.
 | |
|     EventRegistry::register_event::<MyEvent>(&mut world);
 | |
| 
 | |
|     // Create a schedule to store our systems
 | |
|     let mut schedule = Schedule::default();
 | |
| 
 | |
|     // Events need to be updated in every frame in order to clear our buffers.
 | |
|     // This update should happen before we use the events.
 | |
|     // Here, we use system sets to control the ordering.
 | |
|     #[derive(SystemSet, Debug, Clone, PartialEq, Eq, Hash)]
 | |
|     pub struct FlushEvents;
 | |
| 
 | |
|     schedule.add_systems(bevy_ecs::event::event_update_system.in_set(FlushEvents));
 | |
| 
 | |
|     // Add systems sending and receiving events after the events are flushed.
 | |
|     schedule.add_systems((
 | |
|         sending_system.after(FlushEvents),
 | |
|         receiving_system.after(sending_system),
 | |
|     ));
 | |
| 
 | |
|     // Simulate 10 frames of our world
 | |
|     for iteration in 1..=10 {
 | |
|         println!("Simulating frame {iteration}/10");
 | |
|         schedule.run(&mut world);
 | |
|     }
 | |
| }
 | |
| 
 | |
| // This is our event that we will send and receive in systems
 | |
| #[derive(Event)]
 | |
| struct MyEvent {
 | |
|     pub message: String,
 | |
|     pub random_value: f32,
 | |
| }
 | |
| 
 | |
| // In every frame we will send an event with a 50/50 chance
 | |
| fn sending_system(mut event_writer: EventWriter<MyEvent>) {
 | |
|     let random_value: f32 = rand::random();
 | |
|     if random_value > 0.5 {
 | |
|         event_writer.send(MyEvent {
 | |
|             message: "A random event with value > 0.5".to_string(),
 | |
|             random_value,
 | |
|         });
 | |
|     }
 | |
| }
 | |
| 
 | |
| // This system listens for events of the type MyEvent
 | |
| // If an event is received it will be printed to the console
 | |
| fn receiving_system(mut event_reader: EventReader<MyEvent>) {
 | |
|     for my_event in event_reader.read() {
 | |
|         println!(
 | |
|             "    Received message {}, with random value of {}",
 | |
|             my_event.message, my_event.random_value
 | |
|         );
 | |
|     }
 | |
| }
 |