Update to Bevy 0.12
This commit is contained in:
1629
Cargo.lock
generated
1629
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
10
Cargo.toml
10
Cargo.toml
@@ -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."*"]
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
40
src/main.rs
40
src/main.rs
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::{Level, Score};
|
||||
use crate::{level::Level, Score};
|
||||
use bevy::prelude::*;
|
||||
|
||||
#[derive(Component)]
|
||||
|
||||
Reference in New Issue
Block a user