Implement Reflect for State<S> and NextState<S> (#9742)
				
					
				
			# Objective - Make it possible to snapshot/save states - Useful for re-using parts of the state system for rollback safe states - Or to save states with scenes/savegames ## Solution - Conditionally add the derive if the `bevy_reflect` is enabled --- ## Changelog - `NextState<S>` and `State<S>` now implement `Reflect` as long as `S` does.
This commit is contained in:
		
							parent
							
								
									0aa079fcf6
								
							
						
					
					
						commit
						4fe2b1220d
					
				@ -5,9 +5,13 @@ use std::ops::Deref;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use crate as bevy_ecs;
 | 
					use crate as bevy_ecs;
 | 
				
			||||||
use crate::change_detection::DetectChangesMut;
 | 
					use crate::change_detection::DetectChangesMut;
 | 
				
			||||||
 | 
					#[cfg(feature = "bevy_reflect")]
 | 
				
			||||||
 | 
					use crate::reflect::ReflectResource;
 | 
				
			||||||
use crate::schedule::ScheduleLabel;
 | 
					use crate::schedule::ScheduleLabel;
 | 
				
			||||||
use crate::system::Resource;
 | 
					use crate::system::Resource;
 | 
				
			||||||
use crate::world::World;
 | 
					use crate::world::World;
 | 
				
			||||||
 | 
					#[cfg(feature = "bevy_reflect")]
 | 
				
			||||||
 | 
					use bevy_reflect::std_traits::ReflectDefault;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub use bevy_ecs_macros::States;
 | 
					pub use bevy_ecs_macros::States;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -75,6 +79,11 @@ pub struct OnTransition<S: States> {
 | 
				
			|||||||
///
 | 
					///
 | 
				
			||||||
/// The starting state is defined via the [`Default`] implementation for `S`.
 | 
					/// The starting state is defined via the [`Default`] implementation for `S`.
 | 
				
			||||||
#[derive(Resource, Default, Debug)]
 | 
					#[derive(Resource, Default, Debug)]
 | 
				
			||||||
 | 
					#[cfg_attr(
 | 
				
			||||||
 | 
					    feature = "bevy_reflect",
 | 
				
			||||||
 | 
					    derive(bevy_reflect::Reflect),
 | 
				
			||||||
 | 
					    reflect(Resource, Default)
 | 
				
			||||||
 | 
					)]
 | 
				
			||||||
pub struct State<S: States>(S);
 | 
					pub struct State<S: States>(S);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<S: States> State<S> {
 | 
					impl<S: States> State<S> {
 | 
				
			||||||
@ -111,6 +120,11 @@ impl<S: States> Deref for State<S> {
 | 
				
			|||||||
/// Note that these transitions can be overridden by other systems:
 | 
					/// Note that these transitions can be overridden by other systems:
 | 
				
			||||||
/// only the actual value of this resource at the time of [`apply_state_transition`] matters.
 | 
					/// only the actual value of this resource at the time of [`apply_state_transition`] matters.
 | 
				
			||||||
#[derive(Resource, Default, Debug)]
 | 
					#[derive(Resource, Default, Debug)]
 | 
				
			||||||
 | 
					#[cfg_attr(
 | 
				
			||||||
 | 
					    feature = "bevy_reflect",
 | 
				
			||||||
 | 
					    derive(bevy_reflect::Reflect),
 | 
				
			||||||
 | 
					    reflect(Resource, Default)
 | 
				
			||||||
 | 
					)]
 | 
				
			||||||
pub struct NextState<S: States>(pub Option<S>);
 | 
					pub struct NextState<S: States>(pub Option<S>);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<S: States> NextState<S> {
 | 
					impl<S: States> NextState<S> {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user