migratetion to 0.18.0

This commit is contained in:
2026-02-16 00:02:00 +00:00
parent a9040a4c9e
commit 4ef68c4e04
17 changed files with 1260 additions and 732 deletions
Generated
+1202 -676
View File
File diff suppressed because it is too large Load Diff
+5 -5
View File
@@ -4,12 +4,12 @@ version = "0.1.0"
edition = "2021" edition = "2021"
[dependencies] [dependencies]
bevy = { version = "0.16.1", features = ["wayland"] } bevy = { version = "0.18.0", features = ["wayland"] }
noise = "0.9.0" noise = "0.9.0"
rand = "0.9.2" rand = "0.10.0"
bevy_rand = { version = "0.11.3", features = ["wyrand"] } bevy_rand = { version = "0.14.0", features = ["wyrand"] }
image = "0.25.8" image = "0.25.9"
bevy_platform = "0.16.1" bevy_platform = "0.18.0"
rayon = "1.11.0" rayon = "1.11.0"
# Enable max optimizations for dependencies, but not for our code: # Enable max optimizations for dependencies, but not for our code:
+1 -2
View File
@@ -1,7 +1,6 @@
use bevy::input::keyboard::KeyCode; use bevy::input::keyboard::KeyCode;
use bevy::input::mouse::{MouseScrollUnit, MouseWheel}; use bevy::input::mouse::{MouseScrollUnit, MouseWheel};
use bevy::prelude::*; use bevy::prelude::*;
use bevy::render::camera::{OrthographicProjection, Projection};
use crate::game; use crate::game;
use crate::world::{Z_ABOVE, Z_BELOW}; use crate::world::{Z_ABOVE, Z_BELOW};
@@ -76,7 +75,7 @@ pub fn spawn_panning_camera(mut commands: Commands) {
)); ));
} }
pub fn scroll_events(mut evr_scroll: EventReader<MouseWheel>, mut query: Query<&mut Projection>) { pub fn scroll_events(mut evr_scroll: MessageReader<MouseWheel>, mut query: Query<&mut Projection>) {
const LINE_SENSITIVITY: f32 = 0.035; const LINE_SENSITIVITY: f32 = 0.035;
const PIXEL_SENSITIVITY: f32 = 0.001; const PIXEL_SENSITIVITY: f32 = 0.001;
const MIN_SCALE: f32 = 0.3; const MIN_SCALE: f32 = 0.3;
@@ -46,7 +46,7 @@ pub fn spawn_prefab(
.get(&position.as_ivec3()) .get(&position.as_ivec3())
.unwrap_or(&Vec::new()) .unwrap_or(&Vec::new())
.clone(); .clone();
items.push(meat.index()); items.push(meat.index_u32());
tilemap tilemap
.item_tiles .item_tiles
.insert(position.as_ivec3(), items.clone()); .insert(position.as_ivec3(), items.clone());
@@ -81,7 +81,7 @@ pub fn spawn_prefab(
.get(&position.as_ivec3()) .get(&position.as_ivec3())
.unwrap_or(&Vec::new()) .unwrap_or(&Vec::new())
.clone(); .clone();
items.push(coin.index()); items.push(coin.index_u32());
tilemap tilemap
.item_tiles .item_tiles
.insert(position.as_ivec3(), items.clone()); .insert(position.as_ivec3(), items.clone());
+6 -3
View File
@@ -130,11 +130,12 @@ pub fn item_tile_management_system(
// Single item: ensure visible // Single item: ensure visible
if items.len() <= 1 { if items.len() <= 1 {
if let Some(&entity_id) = items.first() { if let Some(&entity_id) = items.first() {
let entity = Entity::from_raw(entity_id); if let Some(entity) = Entity::from_raw_u32(entity_id) {
if let Ok(mut rotation_state) = item_query.get_mut(entity) { if let Ok(mut rotation_state) = item_query.get_mut(entity) {
rotation_state.should_be_visible = true; rotation_state.should_be_visible = true;
} }
} }
}
continue; continue;
} }
@@ -146,19 +147,21 @@ pub fn item_tile_management_system(
.unwrap_or(0); .unwrap_or(0);
for &entity_id in items { for &entity_id in items {
let entity = Entity::from_raw(entity_id); if let Some(entity) = Entity::from_raw_u32(entity_id) {
if let Ok(mut rotation_state) = item_query.get_mut(entity) { if let Ok(mut rotation_state) = item_query.get_mut(entity) {
rotation_state.should_be_visible = false; rotation_state.should_be_visible = false;
} }
} }
}
let next_index = (current_index + 1) % items.len(); let next_index = (current_index + 1) % items.len();
if let Some(&next_entity_id) = items.get(next_index) { if let Some(&next_entity_id) = items.get(next_index) {
let next_entity = Entity::from_raw(next_entity_id); if let Some(next_entity) = Entity::from_raw_u32(next_entity_id) {
if let Ok(mut rotation_state) = item_query.get_mut(next_entity) { if let Ok(mut rotation_state) = item_query.get_mut(next_entity) {
rotation_state.should_be_visible = true; rotation_state.should_be_visible = true;
} }
} }
}
rotation_timer.current_indices.insert(position, next_index); rotation_timer.current_indices.insert(position, next_index);
} }
+3 -3
View File
@@ -6,7 +6,7 @@ use crate::world::tiles::tilemap;
use crate::world::VisibleGameEntity; use crate::world::VisibleGameEntity;
use bevy::prelude::*; use bevy::prelude::*;
use bevy_rand::prelude::*; use bevy_rand::prelude::*;
use rand::Rng; use rand::RngExt;
#[derive(Bundle)] #[derive(Bundle)]
pub struct Pig { pub struct Pig {
@@ -45,7 +45,7 @@ pub struct PigDropTimer(pub Timer);
pub fn spawn_pigs( pub fn spawn_pigs(
mut commands: Commands, mut commands: Commands,
asset_server: Res<AssetServer>, asset_server: Res<AssetServer>,
mut rng_q: Query<&mut Entropy<WyRand>, With<Global>>, mut rng_q: Query<&mut WyRand, With<GlobalRng>>,
) { ) {
if let Ok(mut rng) = rng_q.single_mut() { if let Ok(mut rng) = rng_q.single_mut() {
for _ in 0..5 { for _ in 0..5 {
@@ -70,7 +70,7 @@ pub fn pig_drop_system(
time: Res<Time>, time: Res<Time>,
mut pigs: Query<(&mut PigDropTimer, &Transform)>, mut pigs: Query<(&mut PigDropTimer, &Transform)>,
mut tilemap: ResMut<tilemap::TileMap>, mut tilemap: ResMut<tilemap::TileMap>,
mut rng_q: Query<&mut Entropy<WyRand>, With<Global>>, mut rng_q: Query<&mut WyRand, With<GlobalRng>>,
) { ) {
for (mut timer, transform) in &mut pigs { for (mut timer, transform) in &mut pigs {
timer.tick(time.delta()); timer.tick(time.delta());
+2 -2
View File
@@ -4,7 +4,7 @@ use crate::entities::shared_components::Ambulatory;
use crate::world::VisibleGameEntity; use crate::world::VisibleGameEntity;
use bevy::prelude::*; use bevy::prelude::*;
use bevy_rand::prelude::*; use bevy_rand::prelude::*;
use rand::Rng; use rand::RngExt;
#[derive(Bundle)] #[derive(Bundle)]
pub struct Rabbit { pub struct Rabbit {
@@ -38,7 +38,7 @@ impl Rabbit {
pub fn spawn_rabbits( pub fn spawn_rabbits(
mut commands: Commands, mut commands: Commands,
asset_server: Res<AssetServer>, asset_server: Res<AssetServer>,
mut rng_q: Query<&mut Entropy<WyRand>, With<Global>>, mut rng_q: Query<&mut WyRand, With<GlobalRng>>,
) { ) {
if let Ok(mut rng) = rng_q.single_mut() { if let Ok(mut rng) = rng_q.single_mut() {
for _ in 0..15 { for _ in 0..15 {
+2 -2
View File
@@ -4,7 +4,7 @@ use crate::entities::shared_components::Ambulatory;
use crate::world::VisibleGameEntity; use crate::world::VisibleGameEntity;
use bevy::prelude::*; use bevy::prelude::*;
use bevy_rand::prelude::*; use bevy_rand::prelude::*;
use rand::Rng; use rand::RngExt;
#[derive(Bundle)] #[derive(Bundle)]
pub struct Dorf { pub struct Dorf {
@@ -38,7 +38,7 @@ impl Dorf {
pub fn spawn_dorfs( pub fn spawn_dorfs(
mut commands: Commands, mut commands: Commands,
asset_server: Res<AssetServer>, asset_server: Res<AssetServer>,
mut rng_q: Query<&mut Entropy<WyRand>, With<Global>>, mut rng_q: Query<&mut WyRand, With<GlobalRng>>,
) { ) {
if let Ok(mut rng) = rng_q.single_mut() { if let Ok(mut rng) = rng_q.single_mut() {
// Spawn a handful of dorfs // Spawn a handful of dorfs
+2 -2
View File
@@ -4,7 +4,7 @@ use crate::world::{chunks::ChunkMap, chunks::CHUNK_SIZE};
use crate::{constants::*, entities::shared_components::Ambulatory}; use crate::{constants::*, entities::shared_components::Ambulatory};
use bevy::{math::ivec3, prelude::*}; use bevy::{math::ivec3, prelude::*};
use bevy_rand::prelude::*; use bevy_rand::prelude::*;
use rand::Rng; use rand::RngExt;
use std::{ use std::{
collections::{BinaryHeap, HashMap, HashSet}, collections::{BinaryHeap, HashMap, HashSet},
process::exit, process::exit,
@@ -41,7 +41,7 @@ pub fn update_wandering_targets(
mut query: Query<(&mut Ambulatory, &Transform)>, // add a 'with' here when behaviours are implemented mut query: Query<(&mut Ambulatory, &Transform)>, // add a 'with' here when behaviours are implemented
tilemap: Res<TileMap>, tilemap: Res<TileMap>,
chunk_map: Res<ChunkMap>, chunk_map: Res<ChunkMap>,
mut rng_q: Query<&mut Entropy<WyRand>, With<Global>>, mut rng_q: Query<&mut WyRand, With<GlobalRng>>,
) { ) {
if let Ok(mut rng) = rng_q.single_mut() { if let Ok(mut rng) = rng_q.single_mut() {
for (mut ambulatory, _) in query.iter_mut() { for (mut ambulatory, _) in query.iter_mut() {
+1 -1
View File
@@ -33,7 +33,7 @@ fn main() {
}) })
.set(ImagePlugin::default_nearest()), .set(ImagePlugin::default_nearest()),
) )
.add_plugins(bevy_rand::plugin::EntropyPlugin::<WyRand>::with_seed( .add_plugins(EntropyPlugin::<WyRand>::with_seed(
(constants::SEED as u64).to_le_bytes(), (constants::SEED as u64).to_le_bytes(),
)) ))
.insert_resource(ClearColor(Color::srgb(0., 0., 0.))) .insert_resource(ClearColor(Color::srgb(0., 0., 0.)))
+11 -11
View File
@@ -25,29 +25,29 @@ impl Default for ChunkMap {
} }
} }
#[derive(Event)] #[derive(Message)]
pub struct GenerateChunkEvent { pub struct GenerateChunkEvent {
pub chunk_position: IVec2, pub chunk_position: IVec2,
} }
#[derive(Event)] #[derive(Message)]
pub struct ChunkTerrainEvent { pub struct ChunkTerrainEvent {
pub chunk_position: IVec2, pub chunk_position: IVec2,
} }
#[derive(Event)] #[derive(Message)]
// CAlculate the weather effecrs and rivers/lakes of this chunk // CAlculate the weather effecrs and rivers/lakes of this chunk
pub struct ChunkWeatheringAndPrecipitationEvent { pub struct ChunkWeatheringAndPrecipitationEvent {
pub chunk_position: IVec2, pub chunk_position: IVec2,
} }
#[derive(Event)] #[derive(Message)]
pub struct ChunkForrestryEvent { pub struct ChunkForrestryEvent {
pub chunk_position: IVec2, pub chunk_position: IVec2,
pub floor_tiles: Vec<(Vec3, String)>, pub floor_tiles: Vec<(Vec3, String)>,
} }
#[derive(Event)] #[derive(Message)]
pub struct ChunkFoliageEvent { pub struct ChunkFoliageEvent {
pub chunk_position: IVec2, pub chunk_position: IVec2,
} }
#[derive(Event)] #[derive(Message)]
pub struct ChunkFaunaEvent { pub struct ChunkFaunaEvent {
pub chunk_position: IVec2, pub chunk_position: IVec2,
} }
@@ -58,12 +58,12 @@ pub fn setup_chunk_system(mut commands: Commands) {
} }
pub fn handle_chunk_events( pub fn handle_chunk_events(
mut chunk_events: EventReader<GenerateChunkEvent>, mut chunk_events: MessageReader<GenerateChunkEvent>,
mut chunk_map: ResMut<ChunkMap>, mut chunk_map: ResMut<ChunkMap>,
mut terrain_event_writer: EventWriter<ChunkTerrainEvent>, mut terrain_event_writer: MessageWriter<ChunkTerrainEvent>,
mut weathering_event_writer: EventWriter<ChunkWeatheringAndPrecipitationEvent>, mut weathering_event_writer: MessageWriter<ChunkWeatheringAndPrecipitationEvent>,
mut foliage_event_writer: EventWriter<ChunkFoliageEvent>, mut foliage_event_writer: MessageWriter<ChunkFoliageEvent>,
mut fauna_event_writer: EventWriter<ChunkFaunaEvent>, mut fauna_event_writer: MessageWriter<ChunkFaunaEvent>,
mut cwss: ResMut<CurrentWorldSpriteState>, mut cwss: ResMut<CurrentWorldSpriteState>,
) { ) {
let mut any = false; let mut any = false;
+1 -1
View File
@@ -4,7 +4,7 @@ use crate::world::{tiles::TileMap, ChunkMap, GenerateChunkEvent};
pub fn generate_chunk_fauna( pub fn generate_chunk_fauna(
mut commands: Commands, mut commands: Commands,
mut events: EventReader<GenerateChunkEvent>, mut events: MessageReader<GenerateChunkEvent>,
mut chunk_map: ResMut<ChunkMap>, mut chunk_map: ResMut<ChunkMap>,
mut tilemap: ResMut<TileMap>, mut tilemap: ResMut<TileMap>,
) { ) {
+1 -1
View File
@@ -4,7 +4,7 @@ use crate::world::{tiles::TileMap, ChunkMap, GenerateChunkEvent};
pub fn generate_chunk_foliage( pub fn generate_chunk_foliage(
mut commands: Commands, mut commands: Commands,
mut events: EventReader<GenerateChunkEvent>, mut events: MessageReader<GenerateChunkEvent>,
mut chunk_map: ResMut<ChunkMap>, mut chunk_map: ResMut<ChunkMap>,
mut tilemap: ResMut<TileMap>, mut tilemap: ResMut<TileMap>,
) { ) {
+2 -2
View File
@@ -4,7 +4,7 @@ use bevy_platform::sync::Mutex;
use bevy_platform::time::Instant; use bevy_platform::time::Instant;
use bevy_rand::prelude::*; use bevy_rand::prelude::*;
use rand::{Rng, SeedableRng}; use rand::{RngExt, SeedableRng};
use std::collections::hash_map::DefaultHasher; use std::collections::hash_map::DefaultHasher;
use std::hash::{Hash, Hasher}; use std::hash::{Hash, Hasher};
@@ -18,7 +18,7 @@ use crate::{
pub fn generate_chunk_forrestry( pub fn generate_chunk_forrestry(
commands: ParallelCommands<'_, '_>, commands: ParallelCommands<'_, '_>,
mut events: EventReader<ChunkForrestryEvent>, mut events: MessageReader<ChunkForrestryEvent>,
mut tilemap: ResMut<TileMap>, mut tilemap: ResMut<TileMap>,
texture_ids: Res<TextureIDs>, texture_ids: Res<TextureIDs>,
textures: Res<Textures>, textures: Res<Textures>,
+3 -3
View File
@@ -28,10 +28,10 @@ pub fn generate_surface_terrain(x: i32, y: i32) -> f32 {
pub fn generate_chunk_terrain( pub fn generate_chunk_terrain(
commands: ParallelCommands<'_, '_>, // Use ParallelCommands for parallel spawning commands: ParallelCommands<'_, '_>, // Use ParallelCommands for parallel spawning
mut events: EventReader<ChunkTerrainEvent>, mut events: MessageReader<ChunkTerrainEvent>,
mut tilemap: ResMut<TileMap>, mut tilemap: ResMut<TileMap>,
mut forrestry_event_writer: EventWriter<ChunkForrestryEvent>, mut forrestry_event_writer: MessageWriter<ChunkForrestryEvent>,
mut occlusion_event_writer: EventWriter<TileOcclusionEvent>, mut occlusion_event_writer: MessageWriter<TileOcclusionEvent>,
) { ) {
let is_empty = events.is_empty(); let is_empty = events.is_empty();
let start = Instant::now(); let start = Instant::now();
+8 -8
View File
@@ -23,13 +23,13 @@ pub struct WorldPlugin;
impl Plugin for WorldPlugin { impl Plugin for WorldPlugin {
fn build(&self, app: &mut App) { fn build(&self, app: &mut App) {
app.init_resource::<ChunkMap>() app.init_resource::<ChunkMap>()
.add_event::<GenerateChunkEvent>() .add_message::<GenerateChunkEvent>()
.add_event::<ChunkTerrainEvent>() .add_message::<ChunkTerrainEvent>()
.add_event::<ChunkWeatheringAndPrecipitationEvent>() .add_message::<ChunkWeatheringAndPrecipitationEvent>()
.add_event::<ChunkForrestryEvent>() .add_message::<ChunkForrestryEvent>()
.add_event::<ChunkFoliageEvent>() .add_message::<ChunkFoliageEvent>()
.add_event::<ChunkFaunaEvent>() .add_message::<ChunkFaunaEvent>()
.add_event::<TileOcclusionEvent>() .add_message::<TileOcclusionEvent>()
.add_systems(Startup, (setup_chunk_system, setup_initial_chunks).chain()) .add_systems(Startup, (setup_chunk_system, setup_initial_chunks).chain())
.add_systems( .add_systems(
FixedUpdate, FixedUpdate,
@@ -68,7 +68,7 @@ impl Plugin for WorldPlugin {
} }
} }
fn setup_initial_chunks(mut event_writer: EventWriter<GenerateChunkEvent>) { fn setup_initial_chunks(mut event_writer: MessageWriter<GenerateChunkEvent>) {
for x in -5..=5 { for x in -5..=5 {
for y in -5..=5 { for y in -5..=5 {
event_writer.write(GenerateChunkEvent { event_writer.write(GenerateChunkEvent {
+2 -2
View File
@@ -67,7 +67,7 @@ pub fn compute_visibility_of_game_entities(
}); });
} }
#[derive(Event)] #[derive(Message)]
pub struct TileOcclusionEvent { pub struct TileOcclusionEvent {
pub tile_position: IVec3, pub tile_position: IVec3,
} }
@@ -76,7 +76,7 @@ pub fn handle_tile_occlusion_updates(
mut tilemap: ResMut<TileMap>, mut tilemap: ResMut<TileMap>,
mut floor_tiles: Query<(Entity, &mut FloorTile, &Transform)>, mut floor_tiles: Query<(Entity, &mut FloorTile, &Transform)>,
mut cwss: ResMut<CurrentWorldSpriteState>, mut cwss: ResMut<CurrentWorldSpriteState>,
mut events: EventReader<TileOcclusionEvent>, mut events: MessageReader<TileOcclusionEvent>,
) { ) {
let start = Instant::now(); let start = Instant::now();