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::change_detection::DetectChangesMut;
|
||||
#[cfg(feature = "bevy_reflect")]
|
||||
use crate::reflect::ReflectResource;
|
||||
use crate::schedule::ScheduleLabel;
|
||||
use crate::system::Resource;
|
||||
use crate::world::World;
|
||||
#[cfg(feature = "bevy_reflect")]
|
||||
use bevy_reflect::std_traits::ReflectDefault;
|
||||
|
||||
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`.
|
||||
#[derive(Resource, Default, Debug)]
|
||||
#[cfg_attr(
|
||||
feature = "bevy_reflect",
|
||||
derive(bevy_reflect::Reflect),
|
||||
reflect(Resource, Default)
|
||||
)]
|
||||
pub struct State<S: States>(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:
|
||||
/// only the actual value of this resource at the time of [`apply_state_transition`] matters.
|
||||
#[derive(Resource, Default, Debug)]
|
||||
#[cfg_attr(
|
||||
feature = "bevy_reflect",
|
||||
derive(bevy_reflect::Reflect),
|
||||
reflect(Resource, Default)
|
||||
)]
|
||||
pub struct NextState<S: States>(pub Option<S>);
|
||||
|
||||
impl<S: States> NextState<S> {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user