Skip to content

Releases: splashdust/bevy_voxel_world

0.10.2

22 Dec 17:25
7a38008
Compare
Choose a tag to compare
  • ChunkData is now public. You can get the data for a chunk by calling voxel_world.get_chunk_data(chunk_pos)
  • get_closest_surface_voxel, get_random_surface_voxel and get_surface_voxel_at_2d_pos have been deprecated. It's better to use ray-casting instead to find voxels according to your needs.
  • A system for debug-drawing chunks have been added. This can be used to visualize chunk boundaries in the world.
  • Add ChunkWillUpdate event which is fired when set_voxel has been called
  • Fix an error in the events that caused events to fire incorrectly.

Full Changelog: 0.10.1...0.10.2

0.10.1

08 Dec 18:10
69c9684
Compare
Choose a tag to compare

What's Changed

Fix crash on macOS (#43)

0.10.0

01 Dec 19:54
13ae152
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog: 0.9.0...0.10.0

0.9.0

17 Nov 12:14
ae78f0b
Compare
Choose a tag to compare

What's Changed

  • Change material index to generic type by @juzi5201314 in #39. See the textures_custom_idx.rs example for details on how this can be used.

Breaking Changes:

  • type MaterialIndex now needs to be implemented for VoxelWorldConfig:
impl VoxelWorldConfig for MainWorld {
    type MaterialIndex = u8;
    ...
}

New Contributors

Full Changelog: 0.8.1...0.9.0

0.8.1

16 Nov 20:28
dbf6620
Compare
Choose a tag to compare

What's Changed

Full Changelog: 0.8.0...0.8.1

0.8.0

20 Jul 20:08
5ff43b3
Compare
Choose a tag to compare

Upgrade to Bevy 0.14

Thanks to @JohnathanFL for contributing this release

0.7.0

05 Jun 22:25
d3ed707
Compare
Choose a tag to compare

New features:

  • Added voxel_line_traversal and voxel_cartesian_traversal for versatile and fast traversal of the voxel grid (#24)
  • Created a new bevy_voxel_world::traversal_alg module to make it easy for crate users to import those algorithms (#24)
  • Rewrite of raycast using the traversal algorithm. (#25)

Breaking changes:

  • VoxelRaycastResult.normal is now wrapped in an Option<Vec3>

Thanks to @dtaralla for contributing to this release!

0.6.0

13 Apr 13:07
f1de127
Compare
Choose a tag to compare

New features:

  • Add function that returns a sendable raycast function (3335f30)
  • Add WorldConfig constraint to the Chunk events (ebbd03d)
  • Add World Config type parameter to the VoxelWorldCamera and CameraInfo (0349632)
  • Spawn chunks on a root node and add init_rootcallback (6e5df25, f1fc4c6, a0fc663)

Breaking changes:

  • Move raycast functions to main VoxelWorld system param (262b124)

Thanks to @aligator for contributing to this release!

0.5.1

16 Mar 20:15
7f301c5
Compare
Choose a tag to compare

Fix lingering meshes when an existing chunk is emptied of voxels

0.5.0

15 Mar 19:37
6c635f2
Compare
Choose a tag to compare

Adds support for multiple parallell world instances

Breaking changes:

Configuration is now supplied when adding the plugin

// First declare a config struct. It needs to derive `Resource`, `Clone` and `Default`
#[derive(Resource, Clone, Default)]
struct MyWorld;

// Then implement the `VoxelWorldConfig` trait for it:
impl VoxelWorldConfig for MyWorld {
    // All the trait methods have defaults, so you only need to add the ones you want to alter
    fn spawning_distance(&self) -> u32 {
       15
    }
}

Then when adding the plugin:

.add_plugins(VoxelWorldPlugin::with_config(MyWorld))

If you don't want to change any default config, you can simply do this:

.add_plugins(VoxelWorldPlugin::default())

Adding multiple worlds follows the same pattern. Just create different configuration structs and add a VoxelWorldPlugin for each.

.add_plugins(VoxelWorldPlugin::with_config(MyOtherWorld))

Each world instance can have it's own configuration and will keep track of it's own set of voxel data and chunks.

The VoxelWorld system param now needs a type parameter to specify which world instance you want to select

The configuration struct adds the config values and its type also acts as a marker for the world instance.

fn my_system(
  my_voxel_world: VoxelWorld<MyWorld>,
  my_other_voxel_world: VoxelWorld<MyOtherWorld>
) {
  // Set a voxel in `my_voxel_world`
  my_voxel_world.set_voxel(pos, WorldVoxel::Solid(voxel_type))

  // Set a voxel in `my_other_voxel_world`
  my_other_voxel_world.set_voxel(pos, WorldVoxel::Solid(voxel_type))
}

If you initialized the plugin with ::default(), you still need to explicitly specify the instance as DefaultWorld:

fn my_system(voxel_world: VoxelWorld<DefaultWorld>) { ... }

The VoxelWorldRaycast system param now also requires the same config type paramter as described above.