use core::marker::PhantomData;
#[cfg(feature = "bevy_reflect")]
use bevy_ecs::reflect::ReflectResource;
use bevy_ecs::{
component::Component,
resource::Resource,
system::{ReadOnlySystemParam, SystemParam, SystemParamItem},
};
use crate::state::State;
pub mod buffer;
#[cfg(feature = "sequence")]
pub mod sequence;
#[cfg(feature = "stack")]
pub mod stack;
#[derive(Resource, Component, Debug)]
#[cfg_attr(
feature = "bevy_reflect",
derive(bevy_reflect::Reflect),
reflect(Resource)
)]
pub struct TriggerStateFlush<S: State>(
) schedule.
pub bool,
PhantomData<S>,
);
impl<S: State> Default for TriggerStateFlush<S> {
fn default() -> Self {
Self(false, PhantomData)
}
}
pub trait NextState: Resource {
type State: State;
type Param: ReadOnlySystemParam;
fn empty() -> Self;
fn next_state<'s>(&'s self, param: &'s SystemParamItem<Self::Param>)
-> Option<&'s Self::State>;
}
pub trait NextStateMut: NextState {
type ParamMut: SystemParam;
fn next_state_from_mut<'s>(
&'s self,
param: &'s SystemParamItem<Self::ParamMut>,
) -> Option<&'s Self::State>;
fn next_state_mut<'s>(
&'s mut self,
param: &'s mut SystemParamItem<Self::ParamMut>,
) -> Option<&'s mut Self::State>;
fn set_next_state(
&mut self,
param: &mut SystemParamItem<Self::ParamMut>,
state: Option<Self::State>,
);
}