pub struct Steppers { /* private fields */ }
Expand description
Steppers manager. This is used internally by StereoKit, but you can use it to prepare your next scene managers. Non canonical. https://stereokit.net/Pages/StereoKit.Framework/IStepper.html
§Example
use stereokit_rust::{maths::{Vec3, Matrix}, util::named_colors, framework::Steppers,
tools::{title::Title, screenshot::{ScreenshotViewer, SHOW_SCREENSHOT_WINDOW}}, };
let mut steppers = Steppers::new(sk.get_sk_info_clone());
let mut title = Title::new("Steppers", Some(named_colors::BLUE), None, None);
title.transform = Matrix::t_r([-0.5, 0.5, -1.5], [0.0, 155.0, 0.0]);
steppers.send_event(StepperAction::add("Title_blue_ID1", title.clone()));
title.transform = Matrix::t_r([-0.5, -0.5, -1.5], [0.0, 245.0, 0.0]);
// We may use the same ID for different steppers
steppers.send_event(StepperAction::add("Title_blue_ID2", title.clone()));
sk .send_event(StepperAction::add("Title_blue_ID2", title.clone()));
steppers.send_event(StepperAction::add_default::<ScreenshotViewer>("ScreenshotViewer_ID"));
steppers.send_event(StepperAction::event("main thread".into(), SHOW_SCREENSHOT_WINDOW, "true"));
filename_scr = "screenshots/steppers.jpeg";
number_of_steps = 4;
test_screenshot!( // !!!! Get a proper main loop !!!!
if iter == 0 {
assert_eq!(steppers.get_count(), 0);
assert_eq!(sk.get_steppers_count(), 1);
sk.swap_steppers(&mut steppers);
} else if iter == 1 {
assert_eq!(steppers.get_count(), 1);
assert_eq!(sk.get_steppers_count(), 3);
sk.swap_steppers(&mut steppers);
} else if iter == 2 {
assert_eq!(steppers.get_count(), 3);
assert_eq!(sk.get_steppers_count(), 1);
sk.swap_steppers(&mut steppers);
} else if iter == number_of_steps + 1 {
assert_eq!(sk.get_steppers_count(), 3);
assert_eq!(steppers.get_count(), 1);
steppers.shutdown();
} else if iter == number_of_steps + 2 {
/// all the steppers should be removed from Sk and steppers
assert_eq!(sk.get_steppers_count(), 0);
assert_eq!(steppers.get_count(), 0);
}
);

Implementations§
Source§impl Steppers
impl Steppers
Sourcepub fn new(sk_info: Rc<RefCell<SkInfo>>) -> Self
pub fn new(sk_info: Rc<RefCell<SkInfo>>) -> Self
The only way to create a Steppers manager. You don’t need it unless you want to swap different steppers.
sk_info
- A SkInfo Rc clone of the running Sk instance.
Sk Create the default one when it is initialized.
§Example
use stereokit_rust::{maths::{Vec3, Matrix}, framework::Steppers};
let mut steppers = Steppers::new(sk.get_sk_info_clone());
test_steps!( // !!!! Get a proper main loop !!!!
assert_eq!(steppers.get_count(), 0);
);
Sourcepub fn send_event(&mut self, action: StepperAction)
pub fn send_event(&mut self, action: StepperAction)
Push an action to consumme befor next frame
action
- The action to push.
see also Sk::send_event winit::event_loop::EventLoopProxy::send_event
§Example
use stereokit_rust::{maths::{Vec3, Matrix}, util::named_colors, framework::Steppers,
tools::{title::Title, screenshot::{ScreenshotViewer, SHOW_SCREENSHOT_WINDOW}}, };
let mut steppers = Steppers::new(sk.get_sk_info_clone());
let mut title = Title::new("Steppers", Some(named_colors::BLUE), None, None);
steppers.send_event(StepperAction::add("Title_blue_ID1", title.clone()));
steppers.send_event(StepperAction::add("Title_blue_ID2", title.clone()));
steppers.send_event(StepperAction::add_default::<ScreenshotViewer>("ScreenshotViewer_ID"));
steppers.send_event(StepperAction::event("main thread".into(), SHOW_SCREENSHOT_WINDOW, "true"));
steppers.send_event(StepperAction::remove("Title_blue_ID2"));
sk.swap_steppers(&mut steppers);
test_steps!( // !!!! Get a proper main loop !!!!
if iter < number_of_steps + 2 {
assert_eq!(steppers.get_count(), 0);
assert_eq!(sk.get_steppers_count(), 2);
}
);
Sourcepub fn get_stepper_handlers(&self) -> &[StepperHandler]
pub fn get_stepper_handlers(&self) -> &[StepperHandler]
An enumerable list of all currently active ISteppers registered with StereoKit. This does not include Steppers that have been added, but are not yet initialized. Stepper initialization happens at the beginning of the frame, before the app’s Step.
see also Sk::get_steppers to get the default running Steppers.
§Example
use stereokit_rust::{maths::{Vec3, Matrix}, util::named_colors,
framework::{Steppers, StepperState, StepperHandler},
tools::{title::Title, screenshot::{ScreenshotViewer, SHOW_SCREENSHOT_WINDOW}}, };
use std::any::TypeId;
let mut steppers = Steppers::new(sk.get_sk_info_clone());
let mut title = Title::new("Steppers", Some(named_colors::BLUE), None, None);
steppers.send_event(StepperAction::add("Title_blue_ID1", title.clone()));
steppers.send_event(StepperAction::add_default::<ScreenshotViewer>("ScreenshotViewer_ID"));
test_steps!( // !!!! Get a proper main loop !!!!
if iter == 0 {
assert_eq!(steppers.get_stepper_handlers().len(), 0);
assert_eq!(sk.get_steppers_count(), 0);
sk.swap_steppers(&mut steppers);
} else if iter == 1 {
assert_eq!(steppers.get_stepper_handlers().len(), 0);
assert_eq!(sk.get_steppers_count(), 2);
sk.swap_steppers(&mut steppers);
} else if iter == 3 {
let steppers_handlers = steppers.get_stepper_handlers();
assert_eq!(steppers_handlers.len(), 2);
assert_eq!(steppers_handlers[0].get_id(), "Title_blue_ID1");
assert_eq!(steppers_handlers[0].get_type_id(), TypeId::of::<Title>());
assert_eq!(steppers_handlers[0].get_state(), StepperState::Running);
assert_eq!(steppers_handlers[1].get_id(), "ScreenshotViewer_ID");
assert_eq!(steppers_handlers[1].get_type_id(), TypeId::of::<ScreenshotViewer>());
assert_eq!(steppers_handlers[1].get_state(), StepperState::Running);
assert_eq!(sk.get_steppers_count(), 0);
}
);
Sourcepub fn shutdown(&mut self)
pub fn shutdown(&mut self)
Run the shutdown code for all running steppers. On default Sk Steppers, this is called when pushing StepperAction::Quit( origin , reason) but if you have other inactive Steppers you may want to call this function to shutdown all of them. Do not confuse with Sk::shutdown that you must call when exiting the program.
see also Sk::quit
§Example
use stereokit_rust::{maths::{Vec3, Matrix}, util::named_colors,
framework::{Steppers, StepperState, StepperHandler},
tools::{title::Title, screenshot::{ScreenshotViewer, SHOW_SCREENSHOT_WINDOW}}, };
use std::any::TypeId;
let mut steppers = Steppers::new(sk.get_sk_info_clone());
let mut title = Title::new("Steppers", Some(named_colors::BLUE), None, None);
steppers.send_event(StepperAction::add("Title_blue_ID1", title.clone()));
steppers.send_event(StepperAction::add_default::<ScreenshotViewer>("ScreenshotViewer_ID"));
sk.swap_steppers(&mut steppers);
test_steps!( // !!!! Get a proper main loop !!!!
if iter == 0 {
assert_eq!(steppers.get_count(), 0);
assert_eq!(sk.get_steppers_count(), 2);
sk.swap_steppers(&mut steppers);
} else if iter == 1 {
assert_eq!(steppers.get_count(), 2);
assert_eq!(sk.get_steppers_count(), 0);
steppers.shutdown();
sk.swap_steppers(&mut steppers);
} else {
assert_eq!(steppers.get_count(), 0);
assert_eq!(sk.get_steppers_count(), 0);
}
);
Sourcepub fn get_count(&self) -> usize
pub fn get_count(&self) -> usize
The count of all ISteppers registered by this Steppers. This does not include Steppers that have been added, but are not yet initialized. Stepper initialization happens at the beginning of the frame, before the app’s Step.
see also Sk::get_steppers_count
§Example
use stereokit_rust::{maths::{Vec3, Matrix}, util::named_colors,
framework::{Steppers, StepperState, StepperHandler},
tools::{title::Title, screenshot::{ScreenshotViewer, SHOW_SCREENSHOT_WINDOW}}, };
use std::any::TypeId;
let mut steppers = Steppers::new(sk.get_sk_info_clone());
let mut title = Title::new("Steppers", Some(named_colors::BLUE), None, None);
steppers.send_event(StepperAction::add("Title_blue_ID1", title.clone()));
steppers.send_event(StepperAction::add_default::<ScreenshotViewer>("ScreenshotViewer_ID"));
test_steps!( // !!!! Get a proper main loop !!!!
assert_eq!(steppers.get_stepper_handlers().len(), steppers.get_count());
if iter == 0 {
assert_eq!(sk.get_steppers_count(), 0);
sk.swap_steppers(&mut steppers);
} else if iter == 1 {
assert_eq!(sk.get_steppers_count(), 2);
sk.swap_steppers(&mut steppers);
} else if iter == 3 {
assert_eq!(sk.get_steppers_count(), 0);
}
);
Auto Trait Implementations§
impl Freeze for Steppers
impl !RefUnwindSafe for Steppers
impl !Send for Steppers
impl !Sync for Steppers
impl Unpin for Steppers
impl !UnwindSafe for Steppers
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.