correctly setup bevy_lunex 2d/3d composite

This commit is contained in:
2024-12-01 17:36:39 -05:00
parent 9800d1fd74
commit 2ad50f7ac8
6 changed files with 92 additions and 26 deletions

View File

@@ -61,7 +61,6 @@ fn setup(mut commands: Commands, mut msaa: ResMut<Msaa>) {
MainCamera,
DepthPrepass,
PhosOrbitCamera::default(),
MainUi,
))
// .insert(RenderLayers::layer(0))
.insert(TemporalAntiAliasBundle::default());

View File

@@ -2,6 +2,7 @@ use crate::camera_system::components::PhosCamera;
use crate::map_rendering::map_init::MapInitPlugin;
use crate::map_rendering::render_distance_system::RenderDistancePlugin;
use crate::ui::game::build_ui::BuildUiPlugin;
use crate::ui::lunex_setup_plugin::LunexSetupPlugin;
use crate::utlis::editor_plugin::EditorPlugin;
use crate::utlis::tile_selection_plugin::TileSelectionPlugin;
use crate::{camera_system::camera_plugin::PhosCameraPlugin, utlis::debug_plugin::DebugPlugin};
@@ -40,7 +41,8 @@ impl Plugin for PhosGamePlugin {
RenderDistancePlugin,
BuildingPugin,
SimpleAnimationPlugin,
// BuildUiPlugin,
LunexSetupPlugin,
BuildUiPlugin,
UnitsPlugin,
DespawnPuglin,
TileSelectionPlugin,

View File

@@ -1,29 +1,15 @@
use bevy::{prelude::*, render::view::RenderLayers};
use bevy::prelude::*;
use bevy_lunex::prelude::*;
use shared::tags::MainCamera;
pub struct BuildUiPlugin;
impl Plugin for BuildUiPlugin {
fn build(&self, app: &mut App) {
// app.add_plugins(UiDefaultPlugins)
// .add_plugins(UiDebugPlugin::<MainUi>::new());
app.add_systems(PostStartup, setup_ui);
}
}
fn setup_ui(mut commands: Commands, assets: Res<AssetServer>) {
commands
.spawn((
Camera2dBundle {
transform: Transform::from_xyz(0.0, 0.0, 1000.0),
..default()
},
MainUi,
))
.insert(RenderLayers::layer(1));
fn setup_ui(mut commands: Commands, assets: Res<AssetServer>, mut material: ResMut<Assets<StandardMaterial>>) {
commands
.spawn((
UiTreeBundle::<MainUi> {
@@ -32,23 +18,17 @@ fn setup_ui(mut commands: Commands, assets: Res<AssetServer>) {
},
Name::new("Build UI"),
SourceFromCamera,
RenderLayers::layer(1),
))
.with_children(|ui| {
ui.spawn((
UiLink::<MainUi>::path("Root"),
UiLayout::boundary()
.pos1(Ab(20.0))
.pos2(Rl(100.0) - Ab(20.0))
.pack::<Base>(),
RenderLayers::layer(1),
UiLayout::boundary().pos1(Rl(20.0)).pos2(Rl(80.0)).pack::<Base>(),
));
ui.spawn((
UiLink::<MainUi>::path("Root/Rect"),
UiLayout::solid().size((Ab(1920.0), Ab(1080.0))).pack::<Base>(),
UiImage2dBundle::from(assets.load("textures/world/test2.png")),
RenderLayers::layer(1),
));
});
}

View File

@@ -0,0 +1,84 @@
use bevy::{
prelude::*,
render::render_resource::{Extent3d, TextureDescriptor, TextureDimension, TextureFormat, TextureUsages},
window::PrimaryWindow,
};
use bevy_lunex::prelude::*;
use shared::tags::MainCamera;
pub struct LunexSetupPlugin;
impl Plugin for LunexSetupPlugin {
fn build(&self, app: &mut App) {
app.add_plugins(UiDefaultPlugins);
#[cfg(debug_assertions)]
app.add_plugins(UiDebugPlugin::<MainUi>::new());
app.add_systems(PostStartup, setup_cameras);
}
}
fn setup_cameras(
mut commands: Commands,
assets: Res<AssetServer>,
mut camera_query: Query<&mut Camera, With<MainCamera>>,
window_query: Query<&Window, With<PrimaryWindow>>,
) {
//Prepare Render Texture
let win = window_query.single();
let size = Extent3d {
width: win.physical_width(),
height: win.physical_height(),
..default()
};
let mut image = Image {
texture_descriptor: TextureDescriptor {
label: None,
size,
dimension: TextureDimension::D2,
format: TextureFormat::Bgra8UnormSrgb,
mip_level_count: 1,
sample_count: 1,
usage: TextureUsages::TEXTURE_BINDING | TextureUsages::COPY_DST | TextureUsages::RENDER_ATTACHMENT,
view_formats: &[],
},
..default()
};
image.resize(size);
//Configure 3D Camera
let mut cam = camera_query.single_mut();
let render_image = assets.add(image);
cam.target = render_image.clone().into();
cam.order = -1;
cam.clear_color = ClearColorConfig::Custom(LinearRgba::NONE.into());
//Add Render Texture image
commands
.spawn((UiTreeBundle::<MainUi>::from(UiTree::new2d("Main UI")), SourceFromCamera))
.with_children(|ui| {
ui.spawn((
UiLink::<MainUi>::path("Root"),
UiLayout::window_full().size((win.width(), win.height())).pack::<Base>(),
));
ui.spawn((
UiLink::<MainUi>::path("Root/Camera3D"),
UiLayout::solid()
.size((win.width(), win.height()))
.scaling(Scaling::Fill)
.pack::<Base>(),
UiImage2dBundle::from(render_image),
PickingPortal,
));
});
//Spawn 2d UI Camera
commands.spawn((
MainUi,
Camera2dBundle {
transform: Transform::from_xyz(0.0, 0.0, 1000.0),
..default()
},
));
}

View File

@@ -1 +1,2 @@
pub mod game;
pub mod lunex_setup_plugin;