diff --git a/.gitignore b/.gitignore index 7d8f711..c7fba20 100644 --- a/.gitignore +++ b/.gitignore @@ -552,4 +552,4 @@ target *.swp *.iml -gaiku-3d/examples/output +**/**/output diff --git a/Cargo.toml b/Cargo.toml index ad96908..76569df 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,6 +24,7 @@ serialization = ["gaiku_common/serialization"] [dependencies] gaiku_common = { path = "crates/gaiku_common", version = "0.1.0" } + # Bakers gaiku_baker_heightmap = { path = "crates/gaiku_baker_heightmap", version = "0.1.0", optional = true } gaiku_baker_marching_cubes = { path = "crates/gaiku_baker_marching_cubes", version = "0.1.0", optional = true } diff --git a/crates/gaiku_common/src/chunk/chunk.rs b/crates/gaiku_common/src/chunk/chunk.rs index 1142bbd..fbcd691 100644 --- a/crates/gaiku_common/src/chunk/chunk.rs +++ b/crates/gaiku_common/src/chunk/chunk.rs @@ -8,7 +8,7 @@ use crate::{ }; /// Provides a `Chunkify` implementation with index and value support `(u8, u8)`. -#[derive(Debug, Clone)] +#[derive(Clone, Debug, Default)] #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct Chunk { position: [f32; 3], diff --git a/crates/gaiku_common/src/lib.rs b/crates/gaiku_common/src/lib.rs index 5b9baa6..94a40d1 100644 --- a/crates/gaiku_common/src/lib.rs +++ b/crates/gaiku_common/src/lib.rs @@ -4,7 +4,7 @@ //! work with different file formats and mesh generators, based on voxels. use std::fs::read; -pub use anyhow::Result; +pub use anyhow::{self, Result}; pub use mint; use crate::{ diff --git a/crates/gaiku_format_png/src/lib.rs b/crates/gaiku_format_png/src/lib.rs index 8b0d7f5..03b178f 100644 --- a/crates/gaiku_format_png/src/lib.rs +++ b/crates/gaiku_format_png/src/lib.rs @@ -3,6 +3,7 @@ use gaiku_common::{prelude::*, Result}; use image::load_from_memory; /// Converts a `png` file to 2d chunk data. +#[derive(Default)] pub struct PNGReader; impl FileFormat for PNGReader { diff --git a/integrations/gaiku_bevy/Cargo.toml b/integrations/gaiku_bevy/Cargo.toml new file mode 100644 index 0000000..4acb193 --- /dev/null +++ b/integrations/gaiku_bevy/Cargo.toml @@ -0,0 +1,30 @@ +[package] +name = "gaiku_bevy" +version = "0.1.0" +authors = ["norman784 "] +edition = "2018" + +[dependencies] +bevy_app = "0.5.0" +bevy_asset = "0.5.0" +bevy_ecs = "0.5.0" +bevy_math = "0.5.0" +bevy_pbr = "0.5.0" +bevy_render = "0.5.0" +bevy_scene = "0.5.0" +bevy_transform = "0.5.0" +bevy_utils = "0.5.0" +gaiku_common = { path = "../../crates/gaiku_common", version = "0.1.0" } +png = "0.16.8" +anyhow = "1.0.42" + +[[example]] +name = "terrain" +path = "examples/terrain.rs" + +[dev-dependencies] +bevy = "0.5.0" +gaiku_baker_voxel = { path = "../../crates/gaiku_baker_voxel", version = "0.1.0" } +gaiku_baker_marching_cubes = { path = "../../crates/gaiku_baker_marching_cubes", version = "0.1.0" } +gaiku_baker_modified_marching_cubes = { path = "../../crates/gaiku_baker_modified_marching_cubes", version = "0.1.0" } +gaiku_format_gox = { path = "../../crates/gaiku_format_gox", version = "0.1.0" } diff --git a/integrations/gaiku_bevy/assets/terrain.gox b/integrations/gaiku_bevy/assets/terrain.gox new file mode 100644 index 0000000..9c87ea5 Binary files /dev/null and b/integrations/gaiku_bevy/assets/terrain.gox differ diff --git a/integrations/gaiku_bevy/examples/terrain.rs b/integrations/gaiku_bevy/examples/terrain.rs new file mode 100644 index 0000000..65e1803 --- /dev/null +++ b/integrations/gaiku_bevy/examples/terrain.rs @@ -0,0 +1,46 @@ +use bevy::prelude::*; +use gaiku_common::chunk::Chunk; +use gaiku_baker_voxel::VoxelBaker; +use gaiku_bevy::*; + +struct CameraRotation { + angle: f32, +} + +fn setup(commands: &mut Commands, asset_server: Res) { + commands + .spawn(( + Transform::default(), + GlobalTransform::default(), + CameraRotation { angle: 0.0 }, + )) + .with_children(|parent| { + parent.spawn(Camera3dBundle { + transform: Transform::from_translation(Vec3::new(0.0, 120.0, -200.0)) + .looking_at(Vec3::default(), Vec3::unit_y()), + ..Default::default() + }); + }) + .spawn_scene(asset_server.load("terrain.gox")) + .spawn(LightBundle { + transform: Transform::from_translation(Vec3::new(0.0, 50.0, 50.0)), + ..Default::default() + }); +} + +fn rotate_terrain(time: Res