diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index e9121b8..c87edf3 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -66,7 +66,7 @@ jobs: matrix: version: - stable - - 1.72.1 # MSRV + # - 1.74.1 # MSRV runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 diff --git a/CHANGELOG.md b/CHANGELOG.md index c35fcb1..175c21c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## [Unreleased] +* Bumped `bevy`, `bevy_egui` and `bevy_inspector_egui` dev dependencies +* Bumped `glam` to 0.25 +* Dropped MSRV + ## 0.14.0 * Defined MSRV to be 1.72.1 (#145) diff --git a/Cargo.toml b/Cargo.toml index 0344572..b724c36 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,6 @@ categories = ["game-development", "mathematics"] repository = "https://github.com/ManevilleF/hexx" exclude = [".github"] resolver = "2" -rust-version = "1.72.1" [features] default = ["algorithms", "mesh"] @@ -28,7 +27,7 @@ ser_de = ["serde"] bevy_reflect = ["dep:bevy_reflect"] [dependencies] -glam = "0.24" +glam = "0.25" [dependencies.serde] version = "1" @@ -37,14 +36,14 @@ features = ["derive"] optional = true [dependencies.bevy_reflect] -version = "0.12" +version = "0.13" default-features = false features = ["glam"] optional = true # For lib.rs doctests and examples [dev-dependencies.bevy] -version = "0.12" +version = "0.13" features = [ "bevy_asset", "bevy_winit", @@ -69,8 +68,8 @@ features = ["html_reports"] [dev-dependencies] rand = "0.8" -bevy-inspector-egui = "0.22" -bevy_egui = "0.24" +bevy-inspector-egui = "0.23" +bevy_egui = "0.25" [[example]] name = "hex_grid" diff --git a/README.md b/README.md index 33bbf16..a053bd2 100644 --- a/README.md +++ b/README.md @@ -30,8 +30,6 @@ ## Installation - > Minimum supported rust version (MSRV) is `1.72.1` - Run `cargo add hexx` in your project or add the following line to your `Cargo.toml`: @@ -207,16 +205,22 @@ ```rust use bevy::{ prelude::Mesh, - render::{mesh::Indices, render_resource::PrimitiveTopology}, + render::{ + mesh::Indices, render_asset::RenderAssetUsages, render_resource::PrimitiveTopology, + }, }; use hexx::MeshInfo; pub fn hexagonal_plane(mesh_info: MeshInfo) -> Mesh { - Mesh::new(PrimitiveTopology::TriangleList) - .with_inserted_attribute(Mesh::ATTRIBUTE_POSITION, mesh_info.vertices) - .with_inserted_attribute(Mesh::ATTRIBUTE_NORMAL, mesh_info.normals) - .with_inserted_attribute(Mesh::ATTRIBUTE_UV_0, mesh_info.uvs) - .with_indices(Some(Indices::U16(mesh_info.indices))) + Mesh::new( + PrimitiveTopology::TriangleList, + // Means you won't edit the mesh afterwards, check bevy docs for more information + RenderAssetUsages::RENDER_WORLD, + ) + .with_inserted_attribute(Mesh::ATTRIBUTE_POSITION, mesh_info.vertices) + .with_inserted_attribute(Mesh::ATTRIBUTE_NORMAL, mesh_info.normals) + .with_inserted_attribute(Mesh::ATTRIBUTE_UV_0, mesh_info.uvs) + .with_inserted_indices(Indices::U16(mesh_info.indices)) } ``` diff --git a/examples/3d_columns.rs b/examples/3d_columns.rs index f927184..85bebdc 100644 --- a/examples/3d_columns.rs +++ b/examples/3d_columns.rs @@ -1,6 +1,6 @@ use bevy::{ prelude::*, - render::{mesh::Indices, render_resource::PrimitiveTopology}, + render::{mesh::Indices, render_asset::RenderAssetUsages, render_resource::PrimitiveTopology}, time::common_conditions::on_timer, }; use hexx::{shapes, *}; @@ -18,7 +18,7 @@ const TIME_STEP: Duration = Duration::from_millis(100); pub fn main() { App::new() .insert_resource(AmbientLight { - brightness: 0.1, + brightness: 200.0, ..default() }) .add_plugins(DefaultPlugins) @@ -47,6 +47,7 @@ fn setup_camera(mut commands: Commands) { transform, ..default() }); + let transform = Transform::from_xyz(60.0, 60.0, 00.0).looking_at(Vec3::ZERO, Vec3::Y); commands.spawn(DirectionalLightBundle { transform, ..default() @@ -64,8 +65,8 @@ fn setup_grid( ..default() }; // materials - let default_material = materials.add(Color::WHITE.into()); - let highlighted_material = materials.add(Color::YELLOW.into()); + let default_material = materials.add(Color::WHITE); + let highlighted_material = materials.add(Color::YELLOW); // mesh let mesh = hexagonal_column(&layout); let mesh_handle = meshes.add(mesh); @@ -123,12 +124,14 @@ fn animate_rings( fn hexagonal_column(hex_layout: &HexLayout) -> Mesh { let mesh_info = ColumnMeshBuilder::new(hex_layout, COLUMN_HEIGHT) .without_bottom_face() - .with_scale(Vec3::splat(0.9)) .center_aligned() .build(); - Mesh::new(PrimitiveTopology::TriangleList) - .with_inserted_attribute(Mesh::ATTRIBUTE_POSITION, mesh_info.vertices) - .with_inserted_attribute(Mesh::ATTRIBUTE_NORMAL, mesh_info.normals) - .with_inserted_attribute(Mesh::ATTRIBUTE_UV_0, mesh_info.uvs) - .with_indices(Some(Indices::U16(mesh_info.indices))) + Mesh::new( + PrimitiveTopology::TriangleList, + RenderAssetUsages::RENDER_WORLD, + ) + .with_inserted_attribute(Mesh::ATTRIBUTE_POSITION, mesh_info.vertices) + .with_inserted_attribute(Mesh::ATTRIBUTE_NORMAL, mesh_info.normals) + .with_inserted_attribute(Mesh::ATTRIBUTE_UV_0, mesh_info.uvs) + .with_inserted_indices(Indices::U16(mesh_info.indices)) } diff --git a/examples/a_star.rs b/examples/a_star.rs index 61ec4cc..be9bcef 100644 --- a/examples/a_star.rs +++ b/examples/a_star.rs @@ -1,7 +1,7 @@ use bevy::{ log, prelude::*, - render::{mesh::Indices, render_resource::PrimitiveTopology}, + render::{mesh::Indices, render_asset::RenderAssetUsages, render_resource::PrimitiveTopology}, utils::{HashMap, HashSet}, window::PrimaryWindow, }; @@ -51,9 +51,9 @@ fn setup_grid( ..default() }; let mesh = meshes.add(hexagonal_plane(&layout)); - let default_mat = materials.add(Color::WHITE.into()); - let blocked_mat = materials.add(Color::BLACK.into()); - let path_mat = materials.add(Color::CYAN.into()); + let default_mat = materials.add(Color::WHITE); + let blocked_mat = materials.add(Color::BLACK); + let path_mat = materials.add(Color::CYAN); let mut blocked_coords = HashSet::new(); let entities = Hex::ZERO .spiral_range(0..=MAP_RADIUS) @@ -92,7 +92,7 @@ fn setup_grid( /// Input interaction fn handle_input( mut commands: Commands, - buttons: Res>, + buttons: Res>, windows: Query<&Window, With>, cameras: Query<(&Camera, &GlobalTransform)>, mut current: Local, @@ -156,9 +156,12 @@ fn hexagonal_plane(hex_layout: &HexLayout) -> Mesh { .with_scale(Vec3::splat(0.9)) .center_aligned() .build(); - Mesh::new(PrimitiveTopology::TriangleList) - .with_inserted_attribute(Mesh::ATTRIBUTE_POSITION, mesh_info.vertices) - .with_inserted_attribute(Mesh::ATTRIBUTE_NORMAL, mesh_info.normals) - .with_inserted_attribute(Mesh::ATTRIBUTE_UV_0, mesh_info.uvs) - .with_indices(Some(Indices::U16(mesh_info.indices))) + Mesh::new( + PrimitiveTopology::TriangleList, + RenderAssetUsages::RENDER_WORLD, + ) + .with_inserted_attribute(Mesh::ATTRIBUTE_POSITION, mesh_info.vertices) + .with_inserted_attribute(Mesh::ATTRIBUTE_NORMAL, mesh_info.normals) + .with_inserted_attribute(Mesh::ATTRIBUTE_UV_0, mesh_info.uvs) + .with_inserted_indices(Indices::U16(mesh_info.indices)) } diff --git a/examples/chunks.rs b/examples/chunks.rs index 141c109..75a09dc 100644 --- a/examples/chunks.rs +++ b/examples/chunks.rs @@ -1,6 +1,6 @@ use bevy::{ prelude::*, - render::{mesh::Indices, render_resource::PrimitiveTopology}, + render::{mesh::Indices, render_asset::RenderAssetUsages, render_resource::PrimitiveTopology}, }; use hexx::{shapes, *}; @@ -38,7 +38,7 @@ fn setup_grid( ..default() }; // materials - let materials = COLORS.map(|c| materials.add(c.into())); + let materials = COLORS.map(|c| materials.add(c)); // mesh let mesh = hexagonal_plane(&layout); let mesh_handle = meshes.add(mesh); @@ -63,9 +63,12 @@ fn hexagonal_plane(hex_layout: &HexLayout) -> Mesh { .facing(Vec3::Z) .center_aligned() .build(); - Mesh::new(PrimitiveTopology::TriangleList) - .with_inserted_attribute(Mesh::ATTRIBUTE_POSITION, mesh_info.vertices) - .with_inserted_attribute(Mesh::ATTRIBUTE_NORMAL, mesh_info.normals) - .with_inserted_attribute(Mesh::ATTRIBUTE_UV_0, mesh_info.uvs) - .with_indices(Some(Indices::U16(mesh_info.indices))) + Mesh::new( + PrimitiveTopology::TriangleList, + RenderAssetUsages::RENDER_WORLD, + ) + .with_inserted_attribute(Mesh::ATTRIBUTE_POSITION, mesh_info.vertices) + .with_inserted_attribute(Mesh::ATTRIBUTE_NORMAL, mesh_info.normals) + .with_inserted_attribute(Mesh::ATTRIBUTE_UV_0, mesh_info.uvs) + .with_inserted_indices(Indices::U16(mesh_info.indices)) } diff --git a/examples/field_of_movement.rs b/examples/field_of_movement.rs index 09f5298..c50e0a2 100644 --- a/examples/field_of_movement.rs +++ b/examples/field_of_movement.rs @@ -1,6 +1,6 @@ use bevy::{ prelude::*, - render::{mesh::Indices, render_resource::PrimitiveTopology}, + render::{mesh::Indices, render_asset::RenderAssetUsages, render_resource::PrimitiveTopology}, utils::{HashMap, HashSet}, window::PrimaryWindow, }; @@ -90,10 +90,10 @@ fn setup_grid( ..default() }; let mesh = meshes.add(hexagonal_plane(&layout)); - let plains_mat = materials.add(Color::WHITE.into()); - let forest_mat = materials.add(Color::GREEN.into()); - let desert_mat = materials.add(Color::YELLOW.into()); - let wall_mat = materials.add(Color::DARK_GRAY.into()); + let plains_mat = materials.add(Color::WHITE); + let forest_mat = materials.add(Color::GREEN); + let desert_mat = materials.add(Color::YELLOW); + let wall_mat = materials.add(Color::DARK_GRAY); let mut rng = rand::thread_rng(); @@ -139,9 +139,12 @@ fn hexagonal_plane(hex_layout: &HexLayout) -> Mesh { .facing(Vec3::Z) .center_aligned() .build(); - Mesh::new(PrimitiveTopology::TriangleList) - .with_inserted_attribute(Mesh::ATTRIBUTE_POSITION, mesh_info.vertices) - .with_inserted_attribute(Mesh::ATTRIBUTE_NORMAL, mesh_info.normals) - .with_inserted_attribute(Mesh::ATTRIBUTE_UV_0, mesh_info.uvs) - .with_indices(Some(Indices::U16(mesh_info.indices))) + Mesh::new( + PrimitiveTopology::TriangleList, + RenderAssetUsages::RENDER_WORLD, + ) + .with_inserted_attribute(Mesh::ATTRIBUTE_POSITION, mesh_info.vertices) + .with_inserted_attribute(Mesh::ATTRIBUTE_NORMAL, mesh_info.normals) + .with_inserted_attribute(Mesh::ATTRIBUTE_UV_0, mesh_info.uvs) + .with_inserted_indices(Indices::U16(mesh_info.indices)) } diff --git a/examples/field_of_view.rs b/examples/field_of_view.rs index 392cfb1..e768397 100644 --- a/examples/field_of_view.rs +++ b/examples/field_of_view.rs @@ -1,6 +1,6 @@ use bevy::{ prelude::*, - render::{mesh::Indices, render_resource::PrimitiveTopology}, + render::{mesh::Indices, render_asset::RenderAssetUsages, render_resource::PrimitiveTopology}, utils::{HashMap, HashSet}, window::PrimaryWindow, }; @@ -51,9 +51,9 @@ fn setup_grid( ..default() }; let mesh = meshes.add(hexagonal_plane(&layout)); - let default_mat = materials.add(Color::WHITE.into()); - let blocked_mat = materials.add(Color::BLACK.into()); - let visible_mat = materials.add(Color::CYAN.into()); + let default_mat = materials.add(Color::WHITE); + let blocked_mat = materials.add(Color::BLACK); + let visible_mat = materials.add(Color::CYAN); let mut blocked_coords = HashSet::new(); let entities = Hex::ZERO .spiral_range(0..=MAP_RADIUS) @@ -91,7 +91,7 @@ fn setup_grid( /// Input interaction fn handle_input( mut commands: Commands, - buttons: Res>, + buttons: Res>, windows: Query<&Window, With>, cameras: Query<(&Camera, &GlobalTransform)>, mut current: Local, @@ -146,9 +146,12 @@ fn hexagonal_plane(hex_layout: &HexLayout) -> Mesh { .with_scale(Vec3::splat(0.9)) .center_aligned() .build(); - Mesh::new(PrimitiveTopology::TriangleList) - .with_inserted_attribute(Mesh::ATTRIBUTE_POSITION, mesh_info.vertices) - .with_inserted_attribute(Mesh::ATTRIBUTE_NORMAL, mesh_info.normals) - .with_inserted_attribute(Mesh::ATTRIBUTE_UV_0, mesh_info.uvs) - .with_indices(Some(Indices::U16(mesh_info.indices))) + Mesh::new( + PrimitiveTopology::TriangleList, + RenderAssetUsages::RENDER_WORLD, + ) + .with_inserted_attribute(Mesh::ATTRIBUTE_POSITION, mesh_info.vertices) + .with_inserted_attribute(Mesh::ATTRIBUTE_NORMAL, mesh_info.normals) + .with_inserted_attribute(Mesh::ATTRIBUTE_UV_0, mesh_info.uvs) + .with_inserted_indices(Indices::U16(mesh_info.indices)) } diff --git a/examples/hex_grid.rs b/examples/hex_grid.rs index f4e91a0..dd6a15a 100644 --- a/examples/hex_grid.rs +++ b/examples/hex_grid.rs @@ -2,7 +2,7 @@ use std::collections::HashMap; use bevy::{ prelude::*, - render::{mesh::Indices, render_resource::PrimitiveTopology}, + render::{mesh::Indices, render_asset::RenderAssetUsages, render_resource::PrimitiveTopology}, window::PrimaryWindow, }; use hexx::{shapes, *}; @@ -65,13 +65,13 @@ fn setup_grid( ..default() }; // materials - let selected_material = materials.add(Color::RED.into()); - let ring_material = materials.add(Color::YELLOW.into()); - let wedge_material = materials.add(Color::CYAN.into()); - let dir_wedge_material = materials.add(Color::VIOLET.into()); - let line_material = materials.add(Color::ORANGE.into()); - let half_ring_material = materials.add(Color::LIME_GREEN.into()); - let default_material = materials.add(Color::WHITE.into()); + let selected_material = materials.add(Color::RED); + let ring_material = materials.add(Color::YELLOW); + let wedge_material = materials.add(Color::CYAN); + let dir_wedge_material = materials.add(Color::VIOLET); + let line_material = materials.add(Color::ORANGE); + let half_ring_material = materials.add(Color::LIME_GREEN); + let default_material = materials.add(Color::WHITE); // mesh let mesh = hexagonal_plane(&layout); let mesh_handle = meshes.add(mesh); @@ -204,9 +204,12 @@ fn hexagonal_plane(hex_layout: &HexLayout) -> Mesh { .with_scale(Vec3::splat(0.95)) .center_aligned() .build(); - Mesh::new(PrimitiveTopology::TriangleList) - .with_inserted_attribute(Mesh::ATTRIBUTE_POSITION, mesh_info.vertices) - .with_inserted_attribute(Mesh::ATTRIBUTE_NORMAL, mesh_info.normals) - .with_inserted_attribute(Mesh::ATTRIBUTE_UV_0, mesh_info.uvs) - .with_indices(Some(Indices::U16(mesh_info.indices))) + Mesh::new( + PrimitiveTopology::TriangleList, + RenderAssetUsages::RENDER_WORLD, + ) + .with_inserted_attribute(Mesh::ATTRIBUTE_POSITION, mesh_info.vertices) + .with_inserted_attribute(Mesh::ATTRIBUTE_NORMAL, mesh_info.normals) + .with_inserted_attribute(Mesh::ATTRIBUTE_UV_0, mesh_info.uvs) + .with_inserted_indices(Indices::U16(mesh_info.indices)) } diff --git a/examples/merged_columns.rs b/examples/merged_columns.rs index cc14263..1730082 100644 --- a/examples/merged_columns.rs +++ b/examples/merged_columns.rs @@ -2,12 +2,9 @@ use std::ops::Range; use bevy::{ prelude::*, - render::{mesh::Indices, render_resource::PrimitiveTopology}, -}; -use bevy_inspector_egui::{ - quick::{ResourceInspectorPlugin, WorldInspectorPlugin}, - InspectorOptions, + render::{mesh::Indices, render_asset::RenderAssetUsages, render_resource::PrimitiveTopology}, }; +use bevy_inspector_egui::{quick::ResourceInspectorPlugin, InspectorOptions}; use hexx::*; use rand::{thread_rng, Rng}; @@ -20,12 +17,11 @@ pub fn main() { .register_type::>() .init_resource::() .insert_resource(AmbientLight { - brightness: 1., + brightness: 500., ..default() }) .add_plugins(DefaultPlugins) .add_plugins(ResourceInspectorPlugin::::default()) - .add_plugins(WorldInspectorPlugin::default()) .add_systems(Startup, setup_camera) .add_systems(Update, setup_grid) .run(); @@ -45,7 +41,7 @@ struct MapSettings { #[derive(Debug, Resource)] struct Map(pub Entity); -/// 3D Orthogrpahic camera setup +/// 3D camera setup fn setup_camera(mut commands: Commands) { let transform = Transform::from_xyz(0.0, 60.0, 60.0).looking_at(Vec3::ZERO, Vec3::Y); commands.spawn(Camera3dBundle { @@ -75,7 +71,7 @@ fn setup_grid( }; // Materials shouldn't be added to assets every time, this is just to keep the // example simple - let materials = COLORS.map(|c| materials.add(c.into())); + let materials = COLORS.map(|c| materials.add(c)); let map_entity = commands .spawn((SpatialBundle::default(), Name::new("Chunks"))) @@ -125,11 +121,14 @@ fn setup_grid( /// Compute a bevy mesh from a hexx mesh fn hex_mesh(mesh_info: MeshInfo) -> Mesh { - Mesh::new(PrimitiveTopology::TriangleList) - .with_inserted_attribute(Mesh::ATTRIBUTE_POSITION, mesh_info.vertices) - .with_inserted_attribute(Mesh::ATTRIBUTE_NORMAL, mesh_info.normals) - .with_inserted_attribute(Mesh::ATTRIBUTE_UV_0, mesh_info.uvs) - .with_indices(Some(Indices::U16(mesh_info.indices))) + Mesh::new( + PrimitiveTopology::TriangleList, + RenderAssetUsages::RENDER_WORLD, + ) + .with_inserted_attribute(Mesh::ATTRIBUTE_POSITION, mesh_info.vertices) + .with_inserted_attribute(Mesh::ATTRIBUTE_NORMAL, mesh_info.normals) + .with_inserted_attribute(Mesh::ATTRIBUTE_UV_0, mesh_info.uvs) + .with_inserted_indices(Indices::U16(mesh_info.indices)) } impl Default for MapSettings { diff --git a/examples/mesh_builder.rs b/examples/mesh_builder.rs index f17b3db..fa65d09 100644 --- a/examples/mesh_builder.rs +++ b/examples/mesh_builder.rs @@ -2,7 +2,7 @@ use bevy::{ input::mouse::MouseMotion, pbr::wireframe::{Wireframe, WireframePlugin}, prelude::*, - render::{mesh::Indices, render_resource::PrimitiveTopology}, + render::{mesh::Indices, render_asset::RenderAssetUsages, render_resource::PrimitiveTopology}, }; use bevy_egui::{egui, EguiContext, EguiPlugin}; use bevy_inspector_egui::bevy_inspector; @@ -47,7 +47,7 @@ pub fn main() { App::new() .init_resource::() .insert_resource(AmbientLight { - brightness: 0.3, + brightness: 500.0, ..default() }) .add_plugins(DefaultPlugins) @@ -140,7 +140,7 @@ fn setup( .with_offset(Vec3::NEG_Y * params.height / 2.0) .build(); let mesh_handle = meshes.add(compute_mesh(mesh)); - let material = materials.add(texture.into()); + let material = materials.add(texture); let mesh_entity = commands .spawn(( PbrBundle { @@ -162,7 +162,7 @@ fn animate( info: Res, mut transforms: Query<&mut Transform>, mut motion_evr: EventReader, - buttons: Res>, + buttons: Res>, time: Res