2020-11-13 00:21:48 +00:00
|
|
|
mod error;
|
2020-05-13 20:09:32 +00:00
|
|
|
mod font;
|
2020-06-14 01:53:31 +00:00
|
|
|
mod font_atlas;
|
|
|
|
mod font_atlas_set;
|
2020-06-15 19:47:35 +00:00
|
|
|
mod font_loader;
|
2020-11-13 00:21:48 +00:00
|
|
|
mod glyph_brush;
|
|
|
|
mod pipeline;
|
2020-12-27 19:19:03 +00:00
|
|
|
mod text;
|
|
|
|
mod text2d;
|
2020-05-13 20:09:32 +00:00
|
|
|
|
2020-11-13 00:21:48 +00:00
|
|
|
pub use error::*;
|
2020-05-13 20:09:32 +00:00
|
|
|
pub use font::*;
|
2020-06-14 01:53:31 +00:00
|
|
|
pub use font_atlas::*;
|
|
|
|
pub use font_atlas_set::*;
|
2020-06-15 19:47:35 +00:00
|
|
|
pub use font_loader::*;
|
2020-11-13 00:21:48 +00:00
|
|
|
pub use glyph_brush::*;
|
|
|
|
pub use pipeline::*;
|
2020-12-27 19:19:03 +00:00
|
|
|
pub use text::*;
|
|
|
|
pub use text2d::*;
|
2020-05-16 02:46:09 +00:00
|
|
|
|
2020-07-17 02:34:18 +00:00
|
|
|
pub mod prelude {
|
2021-04-27 18:29:33 +00:00
|
|
|
#[doc(hidden)]
|
2021-12-14 03:58:23 +00:00
|
|
|
pub use crate::{
|
|
|
|
Font, HorizontalAlign, Text, Text2dBundle, TextAlignment, TextError, TextSection,
|
|
|
|
TextStyle, VerticalAlign,
|
|
|
|
};
|
2020-07-17 02:34:18 +00:00
|
|
|
}
|
|
|
|
|
2020-07-17 01:47:51 +00:00
|
|
|
use bevy_app::prelude::*;
|
2020-05-16 02:46:09 +00:00
|
|
|
use bevy_asset::AddAsset;
|
2021-12-14 03:58:23 +00:00
|
|
|
use bevy_ecs::{entity::Entity, schedule::ParallelSystemDescriptorCoercion};
|
|
|
|
use bevy_render::{RenderApp, RenderStage};
|
|
|
|
use bevy_sprite::SpriteSystem;
|
2020-11-13 00:21:48 +00:00
|
|
|
|
|
|
|
pub type DefaultTextPipeline = TextPipeline<Entity>;
|
2020-05-16 02:46:09 +00:00
|
|
|
|
|
|
|
#[derive(Default)]
|
|
|
|
pub struct TextPlugin;
|
|
|
|
|
2020-08-08 03:22:17 +00:00
|
|
|
impl Plugin for TextPlugin {
|
2021-07-27 20:21:06 +00:00
|
|
|
fn build(&self, app: &mut App) {
|
2020-05-22 00:21:33 +00:00
|
|
|
app.add_asset::<Font>()
|
2020-06-14 01:53:31 +00:00
|
|
|
.add_asset::<FontAtlasSet>()
|
Add FromReflect trait to convert dynamic types to concrete types (#1395)
Dynamic types (`DynamicStruct`, `DynamicTupleStruct`, `DynamicTuple`, `DynamicList` and `DynamicMap`) are used when deserializing scenes, but currently they can only be applied to existing concrete types. This leads to issues when trying to spawn non trivial deserialized scene.
For components, the issue is avoided by requiring that reflected components implement ~~`FromResources`~~ `FromWorld` (or `Default`). When spawning, a new concrete type is created that way, and the dynamic type is applied to it. Unfortunately, some components don't have any valid implementation of these traits.
In addition, any `Vec` or `HashMap` inside a component will panic when a dynamic type is pushed into it (for instance, `Text` panics when adding a text section).
To solve this issue, this PR adds the `FromReflect` trait that creates a concrete type from a dynamic type that represent it, derives the trait alongside the `Reflect` trait, drops the ~~`FromResources`~~ `FromWorld` requirement on reflected components, ~~and enables reflection for UI and Text bundles~~. It also adds the requirement that fields ignored with `#[reflect(ignore)]` implement `Default`, since we need to initialize them somehow.
Co-authored-by: Carter Anderson <mcanders1@gmail.com>
2021-12-26 18:49:01 +00:00
|
|
|
.register_type::<Text>()
|
2021-12-14 03:58:23 +00:00
|
|
|
.register_type::<VerticalAlign>()
|
|
|
|
.register_type::<HorizontalAlign>()
|
2020-11-13 00:21:48 +00:00
|
|
|
.init_asset_loader::<FontLoader>()
|
2021-12-14 03:58:23 +00:00
|
|
|
.insert_resource(DefaultTextPipeline::default())
|
|
|
|
.add_system_to_stage(CoreStage::PostUpdate, text2d_system);
|
|
|
|
|
2021-12-24 06:57:30 +00:00
|
|
|
let render_app = app.sub_app_mut(RenderApp);
|
2021-12-14 03:58:23 +00:00
|
|
|
render_app.add_system_to_stage(
|
|
|
|
RenderStage::Extract,
|
Add 2d meshes and materials (#3460)
# Objective
The current 2d rendering is specialized to render sprites, we need a generic way to render 2d items, using meshes and materials like we have for 3d.
## Solution
I cloned a good part of `bevy_pbr` into `bevy_sprite/src/mesh2d`, removed lighting and pbr itself, adapted it to 2d rendering, added a `ColorMaterial`, and modified the sprite rendering to break batches around 2d meshes.
~~The PR is a bit crude; I tried to change as little as I could in both the parts copied from 3d and the current sprite rendering to make reviewing easier. In the future, I expect we could make the sprite rendering a normal 2d material, cleanly integrated with the rest.~~ _edit: see <https://github.com/bevyengine/bevy/pull/3460#issuecomment-1003605194>_
## Remaining work
- ~~don't require mesh normals~~ _out of scope_
- ~~add an example~~ _done_
- support 2d meshes & materials in the UI?
- bikeshed names (I didn't think hard about naming, please check if it's fine)
## Remaining questions
- ~~should we add a depth buffer to 2d now that there are 2d meshes?~~ _let's revisit that when we have an opaque render phase_
- ~~should we add MSAA support to the sprites, or remove it from the 2d meshes?~~ _I added MSAA to sprites since it's really needed for 2d meshes_
- ~~how to customize vertex attributes?~~ _#3120_
Co-authored-by: Carter Anderson <mcanders1@gmail.com>
2022-01-08 01:29:08 +00:00
|
|
|
extract_text2d_sprite.after(SpriteSystem::ExtractSprites),
|
2021-12-14 03:58:23 +00:00
|
|
|
);
|
2020-05-16 02:46:09 +00:00
|
|
|
}
|
2020-06-04 03:08:20 +00:00
|
|
|
}
|