Struct bevy_inspector_egui::InspectorOptions
source · pub struct InspectorOptions { /* private fields */ }
Expand description
Map of Target
s to arbitrary TypeData
used to control how the value is displayed, e.g. NumberOptions
.
Comes with a derive macro, which generates a FromType<T> for InspectorOptions
impl:
use bevy_inspector_egui::prelude::*;
use bevy_reflect::Reflect;
#[derive(Reflect, Default, InspectorOptions)]
#[reflect(InspectorOptions)]
struct Config {
#[inspector(min = 10.0, max = 70.0)]
font_size: f32,
option: Option<f32>,
}
will expand roughly to
let mut options = InspectorOptions::default();
let mut field_options = NumberOptions { min: 10.0.into(), max: 70.0.into(), ..Default::default() };
options.insert(Target::Field(0usize), field_options);
Implementations§
source§impl InspectorOptions
impl InspectorOptions
sourcepub fn new() -> Self
pub fn new() -> Self
Examples found in repository?
src/inspector_options/default_options.rs (line 17)
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
fn insert_options_struct<T: 'static>(
type_registry: &mut TypeRegistry,
fields: &[(&'static str, &dyn TypeData)],
) {
let registration = type_registry.get_mut(std::any::TypeId::of::<T>()).unwrap();
if registration.data::<ReflectInspectorOptions>().is_none() {
let mut options = InspectorOptions::new();
for (field, data) in fields {
let info = match registration.type_info() {
TypeInfo::Struct(info) => info,
_ => unreachable!(),
};
let field_index = info.index_of(field).unwrap();
options.insert_boxed(Target::Field(field_index), TypeData::clone_type_data(*data));
}
registration.insert(ReflectInspectorOptions(options));
}
}
fn insert_options_enum<T: 'static>(
type_registry: &mut TypeRegistry,
fields: &[(&'static str, &'static str, &dyn TypeData)],
) {
let registration = type_registry.get_mut(std::any::TypeId::of::<T>()).unwrap();
if registration.data::<ReflectInspectorOptions>().is_none() {
let mut options = InspectorOptions::new();
for (variant, field, data) in fields {
let info = match registration.type_info() {
TypeInfo::Enum(info) => info,
_ => unreachable!(),
};
let field_index = match info.variant(variant).unwrap() {
bevy_reflect::VariantInfo::Struct(strukt) => strukt.index_of(field).unwrap(),
bevy_reflect::VariantInfo::Tuple(_) => field.parse().unwrap(),
bevy_reflect::VariantInfo::Unit(_) => todo!(),
};
options.insert_boxed(
Target::VariantField(Cow::Borrowed(variant), field_index),
TypeData::clone_type_data(*data),
);
}
registration.insert(ReflectInspectorOptions(options));
}
}
pub fn insert<T: TypeData>(&mut self, target: Target, options: T)
sourcepub fn insert_boxed(&mut self, target: Target, options: Box<dyn TypeData>)
pub fn insert_boxed(&mut self, target: Target, options: Box<dyn TypeData>)
Examples found in repository?
src/inspector_options/default_options.rs (line 24)
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
fn insert_options_struct<T: 'static>(
type_registry: &mut TypeRegistry,
fields: &[(&'static str, &dyn TypeData)],
) {
let registration = type_registry.get_mut(std::any::TypeId::of::<T>()).unwrap();
if registration.data::<ReflectInspectorOptions>().is_none() {
let mut options = InspectorOptions::new();
for (field, data) in fields {
let info = match registration.type_info() {
TypeInfo::Struct(info) => info,
_ => unreachable!(),
};
let field_index = info.index_of(field).unwrap();
options.insert_boxed(Target::Field(field_index), TypeData::clone_type_data(*data));
}
registration.insert(ReflectInspectorOptions(options));
}
}
fn insert_options_enum<T: 'static>(
type_registry: &mut TypeRegistry,
fields: &[(&'static str, &'static str, &dyn TypeData)],
) {
let registration = type_registry.get_mut(std::any::TypeId::of::<T>()).unwrap();
if registration.data::<ReflectInspectorOptions>().is_none() {
let mut options = InspectorOptions::new();
for (variant, field, data) in fields {
let info = match registration.type_info() {
TypeInfo::Enum(info) => info,
_ => unreachable!(),
};
let field_index = match info.variant(variant).unwrap() {
bevy_reflect::VariantInfo::Struct(strukt) => strukt.index_of(field).unwrap(),
bevy_reflect::VariantInfo::Tuple(_) => field.parse().unwrap(),
bevy_reflect::VariantInfo::Unit(_) => todo!(),
};
options.insert_boxed(
Target::VariantField(Cow::Borrowed(variant), field_index),
TypeData::clone_type_data(*data),
);
}
registration.insert(ReflectInspectorOptions(options));
}
}
sourcepub fn get(&self, target: Target) -> Option<&dyn Any>
pub fn get(&self, target: Target) -> Option<&dyn Any>
Examples found in repository?
src/egui_reflect_inspector/mod.rs (line 1293)
1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306
fn inspector_options_struct_field(options: &dyn Any, field: usize) -> &dyn Any {
options
.downcast_ref::<InspectorOptions>()
.and_then(|options| options.get(Target::Field(field)))
.unwrap_or(&())
}
fn inspector_options_enum_variant_field<'a>(
options: &'a dyn Any,
variant: Cow<'static, str>,
field: usize,
) -> &'a dyn Any {
options
.downcast_ref::<InspectorOptions>()
.and_then(|options| options.get(Target::VariantField(variant, field)))
.unwrap_or(&())
}
Trait Implementations§
source§impl Clone for InspectorOptions
impl Clone for InspectorOptions
source§impl Default for InspectorOptions
impl Default for InspectorOptions
source§fn default() -> InspectorOptions
fn default() -> InspectorOptions
Returns the “default value” for a type. Read more
Auto Trait Implementations§
impl !RefUnwindSafe for InspectorOptions
impl Send for InspectorOptions
impl Sync for InspectorOptions
impl Unpin for InspectorOptions
impl !UnwindSafe for InspectorOptions
Blanket Implementations§
source§impl<T, U> AsBindGroupShaderType<U> for Twhere
U: ShaderType,
&'a T: for<'a> Into<U>,
impl<T, U> AsBindGroupShaderType<U> for Twhere
U: ShaderType,
&'a T: for<'a> Into<U>,
source§fn as_bind_group_shader_type(&self, _images: &RenderAssets<Image>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<Image>) -> U
Return the
T
[ShaderType
] for self
. When used in AsBindGroup
derives, it is safe to assume that all images in self
exist.§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
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
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Convert
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
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.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
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> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
source§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Creates
Self
using data from the given World