Skip to content

Commit

Permalink
Upgrade to Bevy 0.14
Browse files Browse the repository at this point in the history
  • Loading branch information
jgayfer committed Jun 7, 2024
1 parent 284bc5b commit 969c5dd
Show file tree
Hide file tree
Showing 9 changed files with 49 additions and 41 deletions.
5 changes: 4 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,15 @@ readme = "README.md"
exclude = ["assets/*", "static/*"]

[dependencies]
bevy = { version = "0.13", default-features = false, features = [
bevy = { version = "0.14.0-rc.2", default-features = false, features = [
"bevy_render",
"bevy_core_pipeline",
"bevy_winit",
"bevy_sprite",
"bevy_pbr",
"png",
"ktx2",
"zstd",
"x11"
] }

Expand Down
2 changes: 1 addition & 1 deletion examples/basic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ fn main() {
App::new()
.add_plugins((DefaultPlugins, Light2dPlugin))
.add_systems(Startup, setup)
.run()
.run();
}

fn setup(mut commands: Commands) {
Expand Down
38 changes: 20 additions & 18 deletions examples/dungeon.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use bevy::prelude::*;
use bevy::{color::palettes::css::YELLOW, prelude::*};
use bevy_light_2d::prelude::*;

const TILE_INDEX: f32 = 0.0;
Expand All @@ -16,7 +16,7 @@ fn main() {
.add_systems(Startup, (setup_dungeon_tileset, spawn_tiles).chain())
.add_systems(Startup, (setup_candle_spritesheet, spawn_candles).chain())
.add_systems(Update, animate_candles)
.run()
.run();
}

#[derive(Resource, Default)]
Expand Down Expand Up @@ -50,7 +50,7 @@ fn setup_camera(mut commands: Commands) {
}

fn set_clear_color(mut clear_color: ResMut<ClearColor>) {
clear_color.0 = Color::rgb_u8(37, 19, 26);
clear_color.0 = Color::srgb_u8(37, 19, 26);
}

fn animate_candles(
Expand All @@ -71,7 +71,7 @@ fn spawn_candles(mut commands: Commands, spritesheet: Res<CandleSpritesheet>) {
transform: Transform::from_xyz(0.0, 4.0, ENTITY_INDEX),
point_light: PointLight2d {
radius: 48.0,
color: Color::YELLOW,
color: Color::Srgba(YELLOW),
intensity: 25.0,
falloff: 4.0,
},
Expand All @@ -83,13 +83,13 @@ fn spawn_candles(mut commands: Commands, spritesheet: Res<CandleSpritesheet>) {
.spawn((
Candle,
AnimationTimer(Timer::from_seconds(0.2, TimerMode::Repeating)),
SpriteSheetBundle {
SpriteBundle {
transform: Transform::from_xyz(0., 2., ENTITY_INDEX),
texture: spritesheet.texture.clone(),
atlas: TextureAtlas {
layout: spritesheet.layout.clone(),
..default()
},
..default()
},
TextureAtlas {
layout: spritesheet.layout.clone(),
..default()
},
))
Expand Down Expand Up @@ -164,18 +164,20 @@ fn spawn_from_atlas(
atlas_handle: Handle<TextureAtlasLayout>,
texture: Handle<Image>,
) {
commands.spawn(SpriteSheetBundle {
transform: Transform {
translation,
commands.spawn((
SpriteBundle {
transform: Transform {
translation,
..default()
},
texture,
..default()
},
texture,
atlas: TextureAtlas {
TextureAtlas {
index: sprite_index,
layout: atlas_handle,
},
..default()
});
));
}

fn setup_dungeon_tileset(
Expand All @@ -185,7 +187,7 @@ fn setup_dungeon_tileset(
) {
dungeon_tileset.texture = asset_server.load("dungeon_tiles.png");
dungeon_tileset.layout = texture_atlas_layouts.add(TextureAtlasLayout::from_grid(
Vec2::new(16.0, 16.0),
UVec2::new(16, 16),
10,
10,
None,
Expand All @@ -200,7 +202,7 @@ fn setup_candle_spritesheet(
) {
candle_spritesheet.texture = asset_server.load("candle.png");
candle_spritesheet.layout = texture_atlas_layouts.add(TextureAtlasLayout::from_grid(
Vec2::new(16.0, 16.0),
UVec2::new(16, 16),
4,
1,
None,
Expand Down
6 changes: 3 additions & 3 deletions examples/multiple.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ fn main() {
App::new()
.add_plugins((DefaultPlugins, Light2dPlugin))
.add_systems(Startup, setup)
.run()
.run();
}

fn setup(mut commands: Commands) {
Expand All @@ -28,7 +28,7 @@ fn setup(mut commands: Commands) {

commands.spawn(PointLight2dBundle {
point_light: PointLight2d {
color: Color::RED,
color: Color::Srgba(Srgba::RED),
radius: 50.,
intensity: 5.0,
..default()
Expand All @@ -50,7 +50,7 @@ fn setup(mut commands: Commands) {

commands.spawn(PointLight2dBundle {
point_light: PointLight2d {
color: Color::GREEN,
color: Color::Srgba(Srgba::GREEN),
radius: 75.,
intensity: 5.0,
..default()
Expand Down
6 changes: 2 additions & 4 deletions src/light.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
//! A module which contains lighting components.
use bevy::{
color::Color,
ecs::{bundle::Bundle, component::Component},
reflect::Reflect,
render::{
color::Color,
view::{InheritedVisibility, ViewVisibility, Visibility},
},
render::view::{InheritedVisibility, ViewVisibility, Visibility},
transform::components::{GlobalTransform, Transform},
};

Expand Down
13 changes: 9 additions & 4 deletions src/plugin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ use bevy::{
render::{
extract_component::UniformComponentPlugin,
render_graph::{RenderGraphApp, ViewNodeRunner},
view::{check_visibility, VisibilitySystems},
Render, RenderApp, RenderSet,
},
};
Expand Down Expand Up @@ -34,9 +35,13 @@ impl Plugin for Light2dPlugin {

app.add_plugins(UniformComponentPlugin::<ExtractedAmbientLight2d>::default())
.register_type::<AmbientLight2d>()
.register_type::<PointLight2d>();
.register_type::<PointLight2d>()
.add_systems(
PostUpdate,
check_visibility::<With<PointLight2d>>.in_set(VisibilitySystems::CheckVisibility),
);

let Ok(render_app) = app.get_sub_app_mut(RenderApp) else {
let Some(render_app) = app.get_sub_app_mut(RenderApp) else {
return;
};

Expand All @@ -47,11 +52,11 @@ impl Plugin for Light2dPlugin {
)
.add_systems(Render, (prepare_point_lights).in_set(RenderSet::Prepare))
.add_render_graph_node::<ViewNodeRunner<LightingNode>>(Core2d, LightingPass)
.add_render_graph_edge(Core2d, Node2d::MainPass, LightingPass);
.add_render_graph_edge(Core2d, Node2d::MainTransparentPass, LightingPass);
}

fn finish(&self, app: &mut App) {
let Ok(render_app) = app.get_sub_app_mut(RenderApp) else {
let Some(render_app) = app.get_sub_app_mut(RenderApp) else {
return;
};

Expand Down
12 changes: 6 additions & 6 deletions src/render/extract.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
use bevy::{
color::{Color, LinearRgba},
core_pipeline::core_2d::Camera2d,
ecs::{
component::Component,
entity::Entity,
query::{With, Without},
system::{Commands, Query},
},
math::Vec4,
render::{render_resource::ShaderType, view::ViewVisibility, Extract},
transform::components::GlobalTransform,
};
Expand All @@ -17,14 +17,14 @@ use crate::light::{AmbientLight2d, PointLight2d};
pub struct ExtractedPointLight2d {
pub transform: GlobalTransform,
pub radius: f32,
pub color: Vec4,
pub color: LinearRgba,
pub intensity: f32,
pub falloff: f32,
}

#[derive(Component, Default, Clone, ShaderType)]
pub struct ExtractedAmbientLight2d {
pub color: Vec4,
pub color: LinearRgba,
}

pub fn extract_point_lights(
Expand All @@ -36,7 +36,7 @@ pub fn extract_point_lights(
continue;
}
commands.get_or_spawn(entity).insert(ExtractedPointLight2d {
color: point_light.color.rgba_linear_to_vec4(),
color: point_light.color.linear(),
transform: *global_transform,
radius: point_light.radius,
intensity: point_light.intensity,
Expand All @@ -54,7 +54,7 @@ pub fn extract_ambient_lights(
commands
.get_or_spawn(entity)
.insert(ExtractedAmbientLight2d {
color: ambient_light.color.rgba_linear_to_vec4() * ambient_light.brightness,
color: ambient_light.color.linear() * ambient_light.brightness,
});
}

Expand All @@ -64,7 +64,7 @@ pub fn extract_ambient_lights(
commands
.get_or_spawn(entity)
.insert(ExtractedAmbientLight2d {
color: Vec4::new(1.0, 1.0, 1.0, 0.0),
color: Color::WHITE.into(),
});
}
}
2 changes: 1 addition & 1 deletion src/render/gpu.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ pub struct GpuPointLights {
pub struct GpuPointLight2d {
pub center: Vec2,
pub radius: f32,
pub color: Vec4,
pub color: LinearRgba,
pub intensity: f32,
pub falloff: f32,
}
Expand Down
6 changes: 3 additions & 3 deletions src/render/lighting/lighting.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ struct PointLight2d {
}

struct AmbientLight2d {
color: vec3<f32>
color: vec4<f32>
}

fn world_to_ndc(world_position: vec2<f32>, view_projection: mat4x4<f32>) -> vec2<f32> {
Expand All @@ -32,7 +32,7 @@ fn world_to_screen(

fn scale_factor(view: View) -> f32 {
let screen_size =
2.0 * vec2f(view.inverse_projection[0][0], view.inverse_projection[1][1]);
2.0 * vec2f(view.view_from_clip[0][0], view.view_from_clip[1][1]);
return screen_size.y / view.viewport.w;
}

Expand Down Expand Up @@ -65,7 +65,7 @@ fn fragment(vo: FullscreenVertexOutput) -> @location(0) vec4<f32> {
// it to screen space in order to do things like compute distances (let
// alone render it in the correct place).
let point_light_screen_center =
world_to_screen(point_light.center, view.viewport.zw, view.view_proj);
world_to_screen(point_light.center, view.viewport.zw, view.clip_from_world);

// Compute the distance between the current position and the light's center.
// We multiply by the scale factor as otherwise our distance will always be
Expand Down

0 comments on commit 969c5dd

Please sign in to comment.