Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bevyengine
GitHub Repository: bevyengine/bevy
Path: blob/main/crates/bevy_gizmos/src/retained.rs
9419 views
1
//! This module is for 'retained' alternatives to the 'immediate mode' [`Gizmos`](crate::gizmos::Gizmos) system parameter.
2
3
use core::ops::{Deref, DerefMut};
4
5
use bevy_asset::Handle;
6
use bevy_ecs::{component::Component, reflect::ReflectComponent};
7
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
8
use bevy_transform::components::Transform;
9
10
use crate::{
11
config::{ErasedGizmoConfigGroup, GizmoLineConfig},
12
gizmos::GizmoBuffer,
13
GizmoAsset,
14
};
15
16
impl Deref for GizmoAsset {
17
type Target = GizmoBuffer<ErasedGizmoConfigGroup, ()>;
18
19
fn deref(&self) -> &Self::Target {
20
&self.buffer
21
}
22
}
23
24
impl DerefMut for GizmoAsset {
25
fn deref_mut(&mut self) -> &mut Self::Target {
26
&mut self.buffer
27
}
28
}
29
30
/// A component that draws the gizmos of a [`GizmoAsset`].
31
///
32
/// When drawing a greater number of static lines a [`Gizmo`] component can
33
/// have far better performance than the [`Gizmos`] system parameter,
34
/// but the system parameter will perform better for smaller lines that update often.
35
///
36
/// ## Example
37
/// ```
38
/// # use bevy_ecs::prelude::*;
39
/// # use bevy_gizmos::prelude::*;
40
/// # use bevy_asset::prelude::*;
41
/// # use bevy_color::palettes::css::*;
42
/// # use bevy_utils::default;
43
/// # use bevy_math::prelude::*;
44
/// fn system(
45
/// mut commands: Commands,
46
/// mut gizmo_assets: ResMut<Assets<GizmoAsset>>,
47
/// ) {
48
/// let mut gizmo = GizmoAsset::default();
49
///
50
/// gizmo.sphere(Vec3::ZERO, 1., RED);
51
///
52
/// commands.spawn(Gizmo {
53
/// handle: gizmo_assets.add(gizmo),
54
/// line_config: GizmoLineConfig {
55
/// width: 4.,
56
/// ..default()
57
/// },
58
/// ..default()
59
/// });
60
/// }
61
/// ```
62
///
63
/// [`Gizmos`]: crate::gizmos::Gizmos
64
#[derive(Component, Clone, Debug, Default, Reflect)]
65
#[reflect(Component, Clone, Default)]
66
#[require(Transform)]
67
pub struct Gizmo {
68
/// The handle to the gizmo to draw.
69
pub handle: Handle<GizmoAsset>,
70
/// The line specific configuration for this gizmo.
71
pub line_config: GizmoLineConfig,
72
/// How closer to the camera than real geometry the gizmo should be.
73
///
74
/// In 2D this setting has no effect and is effectively always -1.
75
///
76
/// Value between -1 and 1 (inclusive).
77
/// * 0 means that there is no change to the gizmo position when rendering
78
/// * 1 means it is furthest away from camera as possible
79
/// * -1 means that it will always render in front of other things.
80
///
81
/// This is typically useful if you are drawing wireframes on top of polygons
82
/// and your wireframe is z-fighting (flickering on/off) with your main model.
83
/// You would set this value to a negative number close to 0.
84
pub depth_bias: f32,
85
}
86
87