Skip to main content

PluginContext

Struct PluginContext 

Source
pub struct PluginContext<'a, 'b> {
Show 16 fields pub scenes: &'a mut SceneContainer, pub resource_manager: &'a ResourceManager, pub user_interfaces: &'a mut UiContainer, pub graphics_context: &'a mut GraphicsContext, pub dt: f32, pub lag: &'b mut f32, pub serialization_context: &'a Arc<SerializationContext>, pub widget_constructors: &'a Arc<WidgetConstructorContainer>, pub dyn_type_constructors: &'a Arc<DynTypeConstructorContainer>, pub performance_statistics: &'a PerformanceStatistics, pub elapsed_time: f32, pub script_processor: &'a ScriptProcessor, pub async_scene_loader: &'a mut AsyncSceneLoader, pub loop_controller: ApplicationLoopController<'b>, pub task_pool: &'a mut TaskPoolHandler, pub input_state: &'a InputState,
}
Expand description

Contains plugin environment.

Fields§

§scenes: &'a mut SceneContainer

A reference to scene container of the engine. You can add new scenes from Plugin methods by using SceneContainer::add.

§resource_manager: &'a ResourceManager

A reference to the resource manager, it can be used to load various resources and manage them. See ResourceManager docs for more info.

§user_interfaces: &'a mut UiContainer

A reference to user interface container of the engine. The engine guarantees that there’s at least one user interface exists. Use context.user_interfaces.first()/first_mut() to get a reference to it.

§graphics_context: &'a mut GraphicsContext

A reference to the graphics_context, it contains a reference to the window and the current renderer. It could be GraphicsContext::Uninitialized if your application is suspended (possible only on Android; it is safe to call GraphicsContext::as_initialized_ref or GraphicsContext::as_initialized_mut on every other platform).

§dt: f32

The time (in seconds) that passed since last call of a method in which the context was passed. It has fixed value that is defined by a caller (in most cases it is Executor).

§lag: &'b mut f32

A reference to time accumulator, that holds remaining amount of time that should be used to update a plugin. A caller splits lag into multiple sub-steps using dt and thus stabilizes update rate. The main use of this variable, is to be able to reset lag when you doing some heavy calculations in a your game loop (i.e. loading a new level) so the engine won’t try to “catch up” with all the time that was spent in heavy calculation.

§serialization_context: &'a Arc<SerializationContext>

A reference to serialization context of the engine. See SerializationContext for more info.

§widget_constructors: &'a Arc<WidgetConstructorContainer>

A reference to serialization context of the engine. See WidgetConstructorContainer for more info.

§dyn_type_constructors: &'a Arc<DynTypeConstructorContainer>

A container with constructors for dynamic types. See DynTypeConstructorContainer for more info.

§performance_statistics: &'a PerformanceStatistics

Performance statistics from the last frame.

§elapsed_time: f32

Amount of time (in seconds) that passed from creation of the engine. Keep in mind, that this value is not guaranteed to match real time. A user can change delta time with which the engine “ticks” and this delta time affects elapsed time.

§script_processor: &'a ScriptProcessor

Script processor is used to run script methods in a strict order.

§async_scene_loader: &'a mut AsyncSceneLoader

Asynchronous scene loader. It is used to request scene loading. See AsyncSceneLoader docs for usage example.

§loop_controller: ApplicationLoopController<'b>

Special field that associates the main application event loop (not game loop) with OS-specific windows. It also can be used to alternate control flow of the application. None if the engine is running in headless mode.

§task_pool: &'a mut TaskPoolHandler

Task pool for asynchronous task management.

§input_state: &'a InputState

A stored state of most common input events. It is used a “shortcut” in cases where event-based approach is too verbose. It may be useful in simple scenarios where you just need to know if a button (on keyboard, mouse) was pressed and do something.

Important: this structure does not track from which device the corresponding event has come from, if you have more than one keyboard and/or mouse, use event-based approach instead!

Implementations§

Source§

impl<'a, 'b> PluginContext<'a, 'b>

Source

pub fn load_ui<U, P, C>(&mut self, path: U, callback: C)
where U: AsRef<Path> + Send + 'static, P: Plugin, for<'c, 'd> C: Fn(Result<UserInterface, VisitError>, &mut P, &mut PluginContext<'c, 'd>) -> GameResult + 'static,

Spawns an asynchronous task that tries to load a user interface from the given path. When the task is completed, the specified callback is called that can be used to modify the UI. The loaded UI must be registered in the engine, otherwise it will be discarded.

§Example

#[derive(Default, Visit, Reflect, Debug)]
#[reflect(non_cloneable)]
struct MyGame {}

impl Plugin for MyGame {
    fn init(&mut self, _scene_path: Option<&str>, mut ctx: PluginContext) -> GameResult {
        ctx.load_ui("data/my.ui", |result, game: &mut MyGame, mut ctx| {
            // The loaded UI must be registered in the engine.
            *ctx.user_interfaces.first_mut() = result?;
            Ok(())
        });
        Ok(())
    }
}

Auto Trait Implementations§

§

impl<'a, 'b> Freeze for PluginContext<'a, 'b>

§

impl<'a, 'b> !RefUnwindSafe for PluginContext<'a, 'b>

§

impl<'a, 'b> !Send for PluginContext<'a, 'b>

§

impl<'a, 'b> !Sync for PluginContext<'a, 'b>

§

impl<'a, 'b> Unpin for PluginContext<'a, 'b>

§

impl<'a, 'b> !UnwindSafe for PluginContext<'a, 'b>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert 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>

Convert 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)

Convert &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)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Converts Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Converts Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Converts &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)

Converts &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<F, T> IntoSample<T> for F
where T: FromSample<F>,

Source§

fn into_sample(self) -> T

Source§

impl<T, U> ObjectOrVariant<T> for U

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more