Skip to content
Snippets Groups Projects
Commit 50bdb609 authored by NiseVoid's avatar NiseVoid
Browse files

Update to bevy 0.10

parent dfa898dc
No related branches found
No related tags found
No related merge requests found
Showing
with 63 additions and 72 deletions
......@@ -7,7 +7,6 @@ resolver = "2"
authors = ["John Mitchell"]
homepage = "https://github.com/StarArawn/kayak_ui"
repository = "https://github.com/StarArawn/kayak_ui"
license = "MIT OR Apache-2.0"
license-file = "LICENSE"
exclude = ["assets/*", "screenshots/*", "book"]
......@@ -17,7 +16,7 @@ members = ["kayak_ui_macros", "kayak_font"]
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
bevy = { version = "0.9", default-features = false, features = ["bevy_ui"] }
bevy = { version = "0.10", default-features = false, features = ["bevy_render", "bevy_asset", "bevy_winit", "bevy_core_pipeline"] }
bytemuck = "1.12"
dashmap = "5.4"
kayak_font = { path = "./kayak_font", version = "0.2" }
......@@ -32,7 +31,8 @@ instant = "0.1"
[dev-dependencies]
fastrand = "1.8"
bevy-inspector-egui = "0.14"
bevy-inspector-egui = "0.18"
bevy = { version = "0.10", default-features = true }
[[example]]
name = "tabs"
......
use bevy::{
math::{Vec3Swizzles, Vec4Swizzles},
prelude::*,
window::PrimaryWindow,
};
use kayak_ui::prelude::{widgets::*, *};
......@@ -40,7 +41,7 @@ fn set_active_tile_target(
cursor: Res<Input<MouseButton>>,
event_context: Query<&EventDispatcher, With<GameUI>>,
camera_transform: Query<&GlobalTransform, With<WorldCamera>>,
windows: Res<Windows>,
window: Query<&Window, With<PrimaryWindow>>,
) {
if !cursor.just_pressed(MouseButton::Left) {
// Only run this system when the mouse button is clicked
......@@ -62,7 +63,7 @@ fn set_active_tile_target(
// }
// ```
let world_pos = cursor_to_world(&windows, camera_transform.single());
let world_pos = cursor_to_world(window.single(), camera_transform.single());
let tile_pos = world_to_tile(world_pos);
let mut tile = tile.single_mut();
tile.target = tile_pos;
......@@ -83,11 +84,11 @@ fn move_ghost_tile(
mut tile: Query<&mut Transform, With<GhostTile>>,
mut cursor_moved: EventReader<CursorMoved>,
camera_transform: Query<&GlobalTransform, With<WorldCamera>>,
windows: Res<Windows>,
window: Query<&Window, With<PrimaryWindow>>,
) {
for _ in cursor_moved.iter() {
if !event_context.single().contains_cursor() {
let world_pos = cursor_to_world(&windows, camera_transform.single());
let world_pos = cursor_to_world(window.single(), camera_transform.single());
let tile_pos = world_to_tile(world_pos);
let mut ghost = tile.single_mut();
ghost.translation.x = tile_pos.x;
......@@ -139,8 +140,7 @@ fn world_setup(mut commands: Commands, active_color: Res<ActiveColor>) {
}
/// Get the world position of the cursor in 2D space
fn cursor_to_world(windows: &Windows, camera_transform: &GlobalTransform) -> Vec2 {
let window = windows.get_primary().unwrap();
fn cursor_to_world(window: &Window, camera_transform: &GlobalTransform) -> Vec2 {
let size = Vec2::new(window.width(), window.height());
let mut pos = window.cursor_position().unwrap_or_default();
......@@ -181,7 +181,7 @@ fn startup(
move |In((event_dispatcher_context, _, event, _)): In<(
EventDispatcherContext,
WidgetState,
Event,
KEvent,
Entity,
)>,
mut active_color: ResMut<ActiveColor>| {
......
......@@ -48,7 +48,7 @@ fn my_widget_render(
text: "Show Window".into(),
}}
on_event={OnEvent::new(
move |In((event_dispatcher_context, _, mut event, _entity)): In<(EventDispatcherContext, WidgetState, Event, Entity)>,
move |In((event_dispatcher_context, _, mut event, _entity)): In<(EventDispatcherContext, WidgetState, KEvent, Entity)>,
mut query: Query<&mut MyWidgetState>| {
event.prevent_default();
event.stop_propagation();
......@@ -78,7 +78,7 @@ fn my_widget_render(
<KButtonBundle
button={KButton { text: "Hide Window".into(), ..Default::default() }}
on_event={OnEvent::new(
move |In((event_dispatcher_context, _, mut event, _entity)): In<(EventDispatcherContext, WidgetState, Event, Entity)>,
move |In((event_dispatcher_context, _, mut event, _entity)): In<(EventDispatcherContext, WidgetState, KEvent, Entity)>,
mut query: Query<&mut MyWidgetState>| {
match event.event_type {
EventType::Click(..) => {
......
......@@ -104,7 +104,7 @@ fn update_theme_button(
move |In((event_dispatcher_context, _, event, _entity)): In<(
EventDispatcherContext,
WidgetState,
Event,
KEvent,
Entity,
)>,
query: Query<&ThemeButton>,
......
......@@ -49,7 +49,7 @@ fn menu_button_render(
move |In((event_dispatcher_context, _, mut event, _entity)): In<(
EventDispatcherContext,
WidgetState,
Event,
KEvent,
Entity,
)>,
mut query: Query<&mut ButtonState>| {
......@@ -151,7 +151,7 @@ fn startup(
move |In((event_dispatcher_context, _, event, _entity)): In<(
EventDispatcherContext,
WidgetState,
Event,
KEvent,
Entity,
)>,
mut exit: EventWriter<AppExit>| {
......
......@@ -39,7 +39,7 @@ fn my_quad_update(
move |In((event_dispatcher_context, _, mut event, entity)): In<(
EventDispatcherContext,
WidgetState,
Event,
KEvent,
Entity,
)>,
mut query: Query<(&mut KStyle, &MyQuad)>| {
......
......@@ -41,6 +41,7 @@ fn startup(
label: None,
size,
dimension: TextureDimension::D2,
view_formats: &[TextureFormat::Bgra8UnormSrgb],
format: TextureFormat::Bgra8UnormSrgb,
mip_level_count: 1,
sample_count: 1,
......@@ -84,7 +85,7 @@ fn startup(
commands.spawn(UICameraBundle {
camera: Camera {
priority: -1,
order: -1,
target: RenderTarget::Image(image_handle.clone()),
..Camera::default()
},
......
......@@ -57,7 +57,7 @@ fn current_count_render(
..Default::default()
}}
on_event={OnEvent::new(
move |In((event_dispatcher_context, _, mut event, _entity)): In<(EventDispatcherContext, WidgetState, Event, Entity)>,
move |In((event_dispatcher_context, _, mut event, _entity)): In<(EventDispatcherContext, WidgetState, KEvent, Entity)>,
mut query: Query<&mut CurrentCountState>| {
match event.event_type {
EventType::Click(..) => {
......
use bevy::prelude::{Bundle, Color, Commands, Component, Entity, In, Query};
use kayak_ui::{
prelude::{
rsx, widgets::KButtonBundle, Corner, Event, EventDispatcherContext, EventType, KStyle,
rsx, widgets::KButtonBundle, Corner, EventDispatcherContext, EventType, KEvent, KStyle,
KayakWidgetContext, OnEvent, StyleProp, Units, Widget, WidgetName, WidgetState,
},
widgets::KButton,
......@@ -57,7 +57,7 @@ pub fn tab_button_render(
move |In((event_dispatcher_context, _, event, _entity)): In<(
EventDispatcherContext,
WidgetState,
Event,
KEvent,
Entity,
)>,
mut query: Query<&mut TabContext>| {
......
use bevy::prelude::*;
use kayak_ui::prelude::{widgets::*, *};
#[derive(Default, Clone, Copy, PartialEq, Hash, Eq, Debug)]
#[derive(Default, Clone, Copy, PartialEq, Hash, Eq, Debug, States)]
pub enum GameState {
#[default]
First,
Second,
}
fn first_sys(mut state: ResMut<State<GameState>>) {
state.overwrite_replace(GameState::Second).unwrap();
fn first_sys(mut state: ResMut<NextState<GameState>>) {
state.set(GameState::Second);
}
fn second_sys(
......@@ -42,8 +42,8 @@ fn main() {
.add_plugins(DefaultPlugins)
.add_plugin(KayakContextPlugin)
.add_plugin(KayakWidgets)
.add_state(GameState::First)
.add_system_set(SystemSet::on_enter(GameState::First).with_system(first_sys))
.add_system_set(SystemSet::on_enter(GameState::Second).with_system(second_sys))
.run()
.add_state::<GameState>()
.add_system(first_sys.in_schedule(OnEnter(GameState::First)))
.add_system(second_sys.in_schedule(OnEnter(GameState::Second)))
.run();
}
......@@ -52,7 +52,7 @@ pub fn render_todo_input(
move |In((event_dispatcher_context, _, event, _)): In<(
EventDispatcherContext,
WidgetState,
Event,
KEvent,
Entity,
)>,
mut todo_list: ResMut<TodoList>| {
......
......@@ -50,7 +50,7 @@ pub fn render_todo_items(
move |In((event_dispatcher_context, _, event, _)): In<(
EventDispatcherContext,
WidgetState,
Event,
KEvent,
Entity,
)>,
mut todo_list: ResMut<TodoList>,| {
......
use bevy::prelude::*;
use bevy_inspector_egui::WorldInspectorPlugin;
use bevy_inspector_egui::quick::WorldInspectorPlugin;
use kayak_ui::prelude::{widgets::*, *};
mod input;
......@@ -106,10 +106,10 @@ fn main() {
App::new()
.insert_resource(ClearColor(Color::rgb(0.0, 0.0, 0.0)))
.add_plugins(DefaultPlugins)
.add_plugin(WorldInspectorPlugin::new())
.add_plugin(WorldInspectorPlugin::default())
.add_plugin(KayakContextPlugin)
.add_plugin(KayakWidgets)
.insert_non_send_resource(TodoList::new())
.insert_resource(TodoList::new())
.add_startup_system(startup)
.run()
}
......@@ -7,7 +7,6 @@ resolver = "2"
authors = ["John Mitchell"]
homepage = "https://github.com/StarArawn/kayak_ui"
repository = "https://github.com/StarArawn/kayak_ui"
license = "MIT OR Apache-2.0"
license-file = "../LICENSE"
exclude = ["assets/*"]
......@@ -28,8 +27,8 @@ image = "0.24"
# Provides UAX #14 line break segmentation
xi-unicode = "0.3"
bevy = { version = "0.9", optional = true, default-features = false, features = ["bevy_asset", "bevy_render", "bevy_core_pipeline"] }
bevy = { version = "0.10", optional = true, default-features = false, features = ["bevy_asset", "bevy_render", "bevy_core_pipeline"] }
[dev-dependencies]
bevy = { version = "0.9" }
bevy = { version = "0.10" }
bytemuck = "1.12.0"
......@@ -11,8 +11,8 @@ mod loader;
mod renderer;
mod plugin {
use bevy::prelude::{AddAsset, Plugin};
use bevy::render::{RenderApp, RenderStage};
use bevy::prelude::{AddAsset, IntoSystemAppConfig, IntoSystemConfig, Plugin};
use bevy::render::{ExtractSchedule, RenderApp, RenderSet};
use crate::bevy::font_texture::init_font_texture;
use crate::KayakFont;
......@@ -32,8 +32,8 @@ mod plugin {
render_app
.init_resource::<FontTextureCache>()
.init_resource::<ExtractedFonts>()
.add_system_to_stage(RenderStage::Extract, extract_fonts)
.add_system_to_stage(RenderStage::Prepare, prepare_fonts);
.add_system(extract_fonts.in_schedule(ExtractSchedule))
.add_system(prepare_fonts.in_set(RenderSet::Prepare));
}
}
}
......@@ -126,6 +126,7 @@ impl FontTextureCache {
mip_level_count: 1,
sample_count: 1,
dimension: TextureDimension::D2,
view_formats: &[format],
format,
usage: TextureUsages::TEXTURE_BINDING | TextureUsages::COPY_DST,
};
......@@ -163,6 +164,7 @@ impl FontTextureCache {
texture,
sampler,
texture_view,
mip_level_count: 1,
size: Vec2 {
x: size.0 as f32,
y: size.1 as f32,
......@@ -184,6 +186,7 @@ impl FontTextureCache {
mip_level_count: 1,
sample_count: 1,
dimension: TextureDimension::D2,
view_formats: &[TextureFormat::Rgba8Unorm],
format: TextureFormat::Rgba8Unorm,
usage: TextureUsages::TEXTURE_BINDING | TextureUsages::COPY_DST,
};
......@@ -208,6 +211,7 @@ impl FontTextureCache {
texture,
sampler,
texture_view,
mip_level_count: 1,
size: Vec2 { x: 1.0, y: 1.0 },
texture_format: TextureFormat::Rgba8Unorm,
};
......
......@@ -7,7 +7,6 @@ resolver = "2"
authors = ["John Mitchell"]
homepage = "https://github.com/StarArawn/kayak_ui"
repository = "https://github.com/StarArawn/kayak_ui"
license = "MIT OR Apache-2.0"
license-file = "../LICENSE"
[lib]
......
use bevy::{
core_pipeline::clear_color::ClearColorConfig,
ecs::query::QueryItem,
prelude::{Bundle, Component, GlobalTransform, Transform, With},
prelude::{Bundle, Component, GlobalTransform, Transform, Vec2},
render::{
camera::{Camera, CameraProjection, CameraRenderGraph, WindowOrigin},
camera::{Camera, CameraProjection, CameraRenderGraph},
extract_component::ExtractComponent,
primitives::Frustum,
view::VisibleEntities,
......@@ -15,20 +14,11 @@ use crate::{context::KayakRootContext, event_dispatcher::EventDispatcher};
use super::ortho::UIOrthographicProjection;
/// Kayak UI's default UI camera.
#[derive(Component, Clone, Default)]
#[derive(Component, ExtractComponent, Clone, Default)]
pub struct CameraUIKayak {
pub clear_color: ClearColorConfig,
}
impl ExtractComponent for CameraUIKayak {
type Query = &'static Self;
type Filter = With<Camera>;
fn extract_component(item: QueryItem<Self::Query>) -> Self {
item.clone()
}
}
/// Kayak UI's default UI camera bundle.
#[derive(Bundle)]
pub struct UICameraBundle {
......@@ -60,7 +50,7 @@ impl UICameraBundle {
let orthographic_projection = UIOrthographicProjection {
far,
window_origin: WindowOrigin::BottomLeft,
window_origin: Vec2::new(0.0, 0.0),
..Default::default()
};
......@@ -68,15 +58,10 @@ impl UICameraBundle {
let view_projection =
orthographic_projection.get_projection_matrix() * transform.compute_matrix().inverse();
let frustum = Frustum::from_view_projection(
&view_projection,
&transform.translation,
&transform.back(),
orthographic_projection.far(),
);
let frustum = Frustum::from_view_projection(&view_projection);
UICameraBundle {
camera: Camera {
priority: isize::MAX - 1,
order: isize::MAX - 1,
..Default::default()
},
camera_render_graph: CameraRenderGraph::new(bevy::core_pipeline::core_2d::graph::NAME),
......
use bevy::{
prelude::{CoreStage, Plugin},
prelude::{CoreSet, IntoSystemConfig, Plugin},
render::{camera::CameraProjectionPlugin, extract_component::ExtractComponentPlugin},
};
......@@ -13,9 +13,9 @@ pub struct KayakUICameraPlugin;
impl Plugin for KayakUICameraPlugin {
fn build(&self, app: &mut bevy::prelude::App) {
app.add_system_to_stage(
CoreStage::PostUpdate,
bevy::render::camera::camera_system::<UIOrthographicProjection>,
app.add_system(
bevy::render::camera::camera_system::<UIOrthographicProjection>
.in_base_set(CoreSet::PostUpdate),
)
.add_plugin(CameraProjectionPlugin::<UIOrthographicProjection>::default())
.add_plugin(ExtractComponentPlugin::<CameraUIKayak>::default());
......
use bevy::ecs::reflect::ReflectComponent;
use bevy::prelude::Component;
use bevy::prelude::{Component, Vec2};
use bevy::{
math::Mat4,
reflect::Reflect,
render::camera::{CameraProjection, ScalingMode, WindowOrigin},
render::camera::{CameraProjection, ScalingMode},
};
/// Kayak UI's default orthographic projection matrix
......@@ -19,7 +19,7 @@ pub struct UIOrthographicProjection {
pub top: f32,
pub near: f32,
pub far: f32,
pub window_origin: WindowOrigin,
pub window_origin: Vec2,
pub scaling_mode: ScalingMode,
pub scale: f32,
}
......@@ -39,8 +39,11 @@ impl CameraProjection for UIOrthographicProjection {
}
fn update(&mut self, width: f32, height: f32) {
match (&self.scaling_mode, &self.window_origin) {
(ScalingMode::WindowSize, WindowOrigin::BottomLeft) => {
match &self.scaling_mode {
ScalingMode::WindowSize(scale) => {
if *scale != 1.0 || self.window_origin != Vec2::ZERO {
return;
}
self.left = 0.0;
self.right = width;
self.top = 0.0;
......@@ -64,8 +67,8 @@ impl Default for UIOrthographicProjection {
top: 1.0,
near: 0.0,
far: 1000.0,
window_origin: WindowOrigin::Center,
scaling_mode: ScalingMode::WindowSize,
window_origin: Vec2::new(0.5, 0.5),
scaling_mode: ScalingMode::WindowSize(1.0),
scale: 1.0,
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment