Update to Bevy 0.12

This commit is contained in:
2024-02-18 12:48:34 +01:00
parent d12e53472d
commit 202db0be70
10 changed files with 981 additions and 731 deletions

1629
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -4,15 +4,15 @@ version = "0.1.0"
edition = "2021"
[dependencies]
itertools = "0.11.0"
itertools = "0.12.1"
rand = "0.8.5"
bevy_editor_pls = { git = "https://github.com/jakobhellermann/bevy_editor_pls" }
bevy_tweening = "0.8.0"
leafwing-input-manager = "0.10.0"
bevy_asset_loader = "0.17.0"
bevy_tweening = "0.9.0"
leafwing-input-manager = "0.11.2"
bevy_asset_loader = "0.19.0"
[dependencies.bevy]
version = "0.11"
version = "0.12"
features = ["wayland", "wav"]
# [profile.dev.package."*"]

View File

@@ -3,7 +3,7 @@ mod tile_light;
use crate::grid;
use bevy::{
prelude::*,
reflect::{TypeUuid, TypePath},
reflect::{TypePath, TypeUuid},
render::{
render_resource::{encase, AsBindGroup, OwnedBindingResource, ShaderRef, ShaderType},
renderer::RenderQueue,
@@ -30,7 +30,7 @@ impl Plugin for CanvasPlugin {
const CANVAS_COLOR: Color = Color::rgb(0.05, 0.05, 0.05);
#[derive(AsBindGroup, TypeUuid, TypePath, Clone)]
#[derive(AsBindGroup, TypeUuid, TypePath, Asset, Clone)]
#[uuid = "24f83f6e-e52d-41a6-bf1d-0e46e57a4995"]
struct CanvasMaterial {
#[uniform(0)]
@@ -74,9 +74,9 @@ fn prepare_canvas_material(
let tile_lights_uniform = TileLightsUniform::from_lights(&tile_lights);
for handle in canvas_query.iter() {
if let Some(material) = materials.get(handle) {
if let Some(material) = materials.get(&handle.id()) {
let binding = &material.bindings[0];
if let OwnedBindingResource::Buffer(cur_buffer) = binding {
if let (_, OwnedBindingResource::Buffer(cur_buffer)) = binding {
let mut buffer = encase::UniformBuffer::new(Vec::new());
buffer
.write(&CanvasMaterialUniform {

View File

@@ -31,7 +31,7 @@ pub struct EatenEvent(Option<Entity>);
pub struct Fruit;
pub fn eaten_event_sent(mut eaten_event_reader: EventReader<EatenEvent>) -> bool {
eaten_event_reader.iter().count() != 0
eaten_event_reader.read().count() != 0
}
fn spawn_fruit_system(mut commands: Commands, coordinate_query: Query<&grid::Coordinate>) {
@@ -86,7 +86,7 @@ fn eat_fruit_system(
}
fn despawn_fruit_system(mut commands: Commands, mut event_reader: EventReader<EatenEvent>) {
for &EatenEvent(fruit) in event_reader.iter() {
for &EatenEvent(fruit) in event_reader.read() {
if let Some(fruit) = fruit {
commands.entity(fruit).despawn();
}

View File

@@ -1,7 +1,6 @@
use bevy::prelude::*;
// #[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, Default, States)]
#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, Default)]
#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, Default, States)]
pub enum LevelState {
#[default]
Begin,
@@ -10,12 +9,12 @@ pub enum LevelState {
}
#[derive(Resource)]
struct Level(u32);
pub struct Level(pub u32);
pub(super) struct LevelPlugin;
impl Plugin for LevelPlugin {
fn build(&self, app: &mut App) {
// app.add_state::<LevelState>();
app.insert_resource(Level(1));
}
}

View File

@@ -27,12 +27,22 @@ const WINDOW_WIDTH: f32 = WINDOW_HEIGHT * ASPECT_RATIO;
const WINDOW_HEIGHT: f32 = 720.;
const TICK_PERIOD: Duration = Duration::from_millis(125);
#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)]
#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, States)]
enum AppState {
MainMenu,
InGame(LevelState),
}
impl Default for AppState {
fn default() -> Self {
if cfg!(debug_assertions) {
Self::InGame(LevelState::Begin)
} else {
Self::MainMenu
}
}
}
#[derive(Default)]
struct AppStateIter {
current: Option<AppState>,
@@ -60,37 +70,15 @@ impl Iterator for AppStateIter {
}
}
impl Default for AppState {
fn default() -> Self {
if cfg!(debug_assertions) {
Self::InGame(LevelState::Begin)
} else {
Self::MainMenu
}
}
}
impl States for AppState {
type Iter = AppStateIter;
fn variants() -> Self::Iter {
AppStateIter::default()
}
}
#[derive(Resource)]
struct Score(u32);
#[derive(Resource)]
struct Level(u32);
fn main() {
let mut app = App::new();
app.insert_resource(ClearColor(Color::BLACK))
.insert_resource(FixedTime::new(TICK_PERIOD))
.insert_resource(Time::<Fixed>::from_duration(TICK_PERIOD))
.insert_resource(Score(0))
.insert_resource(Level(0))
.add_plugins(DefaultPlugins.set(WindowPlugin {
primary_window: Some(Window {
title: "Bevy-Snake".into(),
@@ -140,10 +128,10 @@ fn setup_camera_system(mut commands: Commands) {
}
fn update_score_system(mut score: ResMut<Score>, mut eaten_event: EventReader<fruit::EatenEvent>) {
score.0 += eaten_event.iter().count() as u32;
score.0 += eaten_event.read().count() as u32;
}
fn pause_system(keypress: Res<Input<KeyCode>>, mut time: ResMut<Time>) {
fn pause_system(keypress: Res<Input<KeyCode>>, mut time: ResMut<Time<Virtual>>) {
if keypress.just_pressed(KeyCode::P) {
if time.is_paused() {
time.unpause()

View File

@@ -20,7 +20,7 @@ pub struct SnakePlugin;
impl Plugin for SnakePlugin {
fn build(&self, app: &mut App) {
app.configure_set(
app.configure_sets(
Update,
SystemSet::Movement.after(SystemSet::CollisionDetection),
);
@@ -176,7 +176,7 @@ fn eaten_event_system(
mut tail_event_writer: EventWriter<AddTailEvent>,
) {
eaten_event_reader
.iter()
.read()
.for_each(|_| tail_event_writer.send(AddTailEvent));
}
@@ -185,7 +185,7 @@ fn add_tail_system(
mut snake_query: Query<(Entity, &mut Segments), With<Snake>>,
mut tail_event_reader: EventReader<AddTailEvent>,
) {
for _ in tail_event_reader.iter() {
for _ in tail_event_reader.read() {
let (snake_entity, mut segments) = snake_query.single_mut();
let segment = create_snake_segment(
@@ -277,7 +277,7 @@ fn blip_sound_system(
audio_assets: Res<audio::Assets>,
mut eaten_event_reader: EventReader<fruit::EatenEvent>,
) {
for _ in eaten_event_reader.iter() {
for _ in eaten_event_reader.read() {
commands.spawn(AudioBundle {
source: audio_assets.blip.clone(),
..Default::default()

View File

@@ -22,7 +22,7 @@ pub(super) fn add_bulge_system(
mut tail_event_reader: EventReader<AddTailEvent>,
query: Query<Entity, With<SnakeHead>>,
) {
for _ in tail_event_reader.iter() {
for _ in tail_event_reader.read() {
let snake_head_entity = query.single();
commands.entity(snake_head_entity).insert(BulgeMarker);
}

View File

@@ -3,7 +3,7 @@ use crate::{audio, level::LevelState, AppState};
use bevy::prelude::*;
use leafwing_input_manager::prelude::*;
#[derive(Actionlike, Reflect, Component, Copy, Clone, Debug, PartialEq, Eq)]
#[derive(Actionlike, Reflect, Component, Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub(super) enum Direction {
Up,
Down,

View File

@@ -1,4 +1,4 @@
use crate::{Level, Score};
use crate::{level::Level, Score};
use bevy::prelude::*;
#[derive(Component)]