Skip to main content

wde_terrain/
lib.rs

1//! Terrain system for WaterDropEngine.
2//!
3//! Divide the world into a grid of chunks, each with its own heightmap and splat-map stored
4//! as a layer inside shared GPU texture arrays.
5//!
6//! # Example
7//! ```
8//! fn init(mut commands: Commands, asset_server: Res<AssetServer>) {
9//!     commands.spawn((
10//!         Terrain::load("tests/terrain"),
11//!         TerrainRenderer::new(&asset_server),
12//!         TerrainPhysics::default()
13//!     ));
14//! }
15//! ```
16
17use bevy::prelude::*;
18use wde_physics::prelude::*;
19
20use crate::{
21    physics::TerrainPhysicsPlugin, render::TerrainRenderPlugin, utils::TerrainUtilsPlugin
22};
23
24pub const TERRAIN_COLLIDER_GROUP: ColliderGroup = ColliderGroup::GROUP_1;
25pub const TERRAIN_BUILDINGS_COLLIDER_GROUP: ColliderGroup = ColliderGroup::GROUP_2;
26
27pub(crate) mod manager;
28pub(crate) mod physics;
29pub mod render;
30pub(crate) mod utils;
31
32#[doc(hidden)]
33pub mod prelude {
34    pub use crate::manager::*;
35    pub use crate::physics::terrain_physics::TerrainPhysics;
36    pub use crate::render::dependencies::terrain_buffer::TerrainRenderSettings;
37    pub use crate::render::extractor::*;
38    pub use crate::render::renderer::TerrainRenderer;
39    pub use crate::render::renderer_gpu::{
40        TerrainChunkArrayBg, TerrainComputeArrayBg, TerrainRendererGPU
41    };
42    pub use crate::utils::cursor_pos::TerrainCursorPos;
43    pub use crate::{TERRAIN_BUILDINGS_COLLIDER_GROUP, TERRAIN_COLLIDER_GROUP};
44}
45
46pub struct TerrainPlugin;
47impl Plugin for TerrainPlugin {
48    fn build(&self, app: &mut App) {
49        app.add_plugins((
50            TerrainRenderPlugin,
51            TerrainPhysicsPlugin,
52            TerrainUtilsPlugin
53        ));
54    }
55}