Skip to content

Commit

Permalink
Upgrade to Bevy 0.14 (#9)
Browse files Browse the repository at this point in the history
* Upgrade to Bevy 0.14.0-rc.2

Brings us up to date with the "first" release candidate for 0.14.

The only breaking change is that our PointLight2d API is affected by the
migration from `LegacyColor` to `bevy_color::Color`.

https://bevyengine.org/learn/migration-guides/0-13-to-0-14/#migrate-from-legacycolor-to-bevy-color-color

* Cut release candidate for 0.2.0-rc.1

Our first release candiate for 0.2.0, featuring support for Bevy 0.14.

* Update CHANGELOG.md

New Bevy version!

* Add link to Bevy color migration guide

* Update README.md versions

* Add note about extraneous features

* Update to bevy 0.14.0-rc.3

* Bump version to 0.2.0-rc.2

Mirrors bevy 0.14.0-rc.3

* Bump bevy to 0.14.0-rc.4

* Bump version to 0.2.0-rc.3

Release for bevy 0.14.0-rc.4

* Include x11

This is needed to build the library on Linux.

* Remove invalid category

Crates.io was throwing a 400 (where it previously only warned).

* Upgrade to Bevy 0.14

* Bump version

* Update changelog
  • Loading branch information
jgayfer authored Jul 5, 2024
1 parent cee8acb commit c06faed
Show file tree
Hide file tree
Showing 11 changed files with 60 additions and 48 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.2.0] - 2024-07-04

### Added

- WebGL2 support (#7).

### Changed

- Updated Bevy version from `0.13` to `0.14` (#9).
- Updated `PointLight2d#color` to use the new [`bevy::color`](https://bevyengine.org/learn/migration-guides/0-13-to-0-14/#overhaul-color) module (#9).
- Moved `bevy_sprite`, `png`, and `x11` Bevy features to `dev-dependencies` (#12).

### Fixed
Expand Down
12 changes: 7 additions & 5 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
[package]
name = "bevy_light_2d"
version = "0.1.3"
version = "0.2.0"
edition = "2021"
categories = ["game-engines", "graphics", "rendering", "gamedev"]
categories = ["game-engines", "graphics", "rendering"]
description = "General purpose 2d lighting for the Bevy game engine."
authors = ["James Gayfer"]
repository = "https://github.com/jgayfer/bevy_light_2d"
Expand All @@ -11,14 +11,16 @@ readme = "README.md"
exclude = ["assets/*", "static/*"]

[dependencies]
bevy = { version = "0.13", default-features = false, features = [
bevy = { version = "0.14", default-features = false, features = [
"bevy_render",
"bevy_core_pipeline",
"bevy_winit"
"bevy_winit",
"x11"
] }
smallvec = "1.13"

[dev-dependencies]
bevy = { version = "0.13", default-features = false, features = [
bevy = { version = "0.14", default-features = false, features = [
"bevy_render",
"bevy_core_pipeline",
"bevy_winit",
Expand Down
9 changes: 5 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ Designed to be simple to use, yet expressive enough to fit a variety of needs.
## Features

- Component driven design
- Configurable [point lights](https://docs.rs/bevy_light_2d/0.1.0/bevy_light_2d/light/struct.PointLight2d.html)
- Camera specific [ambient light](https://docs.rs/bevy_light_2d/0.1.0/bevy_light_2d/light/struct.AmbientLight2d.html)
- Configurable [point lights](https://docs.rs/bevy_light_2d/0.2.0/bevy_light_2d/light/struct.PointLight2d.html)
- Camera specific [ambient light](https://docs.rs/bevy_light_2d/0.2.0/bevy_light_2d/light/struct.AmbientLight2d.html)
- Single camera rendering

## Usage
Expand All @@ -26,8 +26,8 @@ In the [`basic`](https://github.com/jgayfer/bevy_light_2d/blob/main/examples/bas
```toml
# Cargo.toml
[dependencies]
bevy = "0.13"
bevy_light_2d = "0.1"
bevy = "0.14"
bevy_light_2d = "0.2"
```

```rust
Expand Down Expand Up @@ -80,6 +80,7 @@ general application over depth of features.

| bevy | bevy_light_2d |
|------|---------------|
| 0.14 | 0.2 |
| 0.13 | 0.1 |

## Acknowledgements
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 @@ -9,6 +9,7 @@ use bevy::{
gpu_component_array_buffer::GpuComponentArrayBufferPlugin,
render_graph::{RenderGraphApp, ViewNodeRunner},
render_resource::SpecializedRenderPipelines,
view::{check_visibility, VisibilitySystems},
Render, RenderApp, RenderSet,
},
};
Expand Down Expand Up @@ -44,9 +45,13 @@ impl Plugin for Light2dPlugin {
GpuComponentArrayBufferPlugin::<ExtractedPointLight2d>::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 @@ -61,11 +66,11 @@ impl Plugin for Light2dPlugin {
prepare_lighting_pipelines.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::EndMainPass, 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
10 changes: 5 additions & 5 deletions src/render/extract.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@ use crate::light::{AmbientLight2d, PointLight2d};
pub struct ExtractedPointLight2d {
pub transform: Vec2,
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 @@ -28,7 +28,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.to_linear(),
transform: global_transform.translation().xy(),
radius: point_light.radius,
intensity: point_light.intensity,
Expand All @@ -46,7 +46,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.to_linear() * ambient_light.brightness,
});
}

Expand All @@ -56,7 +56,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(),
});
}
}
6 changes: 3 additions & 3 deletions src/render/lighting/lighting.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,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 @@ -37,7 +37,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 @@ -85,7 +85,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
2 changes: 1 addition & 1 deletion src/render/lighting/node.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use bevy::render::render_resource::{
};
use bevy::render::renderer::RenderDevice;
use bevy::render::view::{ViewTarget, ViewUniformOffset, ViewUniforms};
use bevy::utils::smallvec::{smallvec, SmallVec};
use smallvec::{smallvec, SmallVec};

use crate::render::extract::{ExtractedAmbientLight2d, ExtractedPointLight2d};

Expand Down

0 comments on commit c06faed

Please sign in to comment.