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(DEFAULT_TERRAIN_PATH),
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/// Modules placed inside buildings, picked before the building around them.
27pub const TERRAIN_MODULES_COLLIDER_GROUP: ColliderGroup = ColliderGroup::GROUP_4;
28
29pub(crate) mod manager;
30pub(crate) mod physics;
31pub mod render;
32pub(crate) mod utils;
33
34#[doc(hidden)]
35pub mod prelude {
36    pub use crate::manager::*;
37    pub use crate::physics::terrain_physics::TerrainPhysics;
38    pub use crate::render::dependencies::terrain_buffer::{
39        TERRAIN_MATERIAL_COUNT, TerrainRenderSettings
40    };
41    pub use crate::render::extractor::*;
42    pub use crate::render::renderer::TERRAIN_LOD_COUNT;
43    pub use crate::render::renderer::TerrainRenderer;
44    pub use crate::render::renderer_gpu::{
45        TerrainChunkArrayBg, TerrainComputeArrayBg, TerrainRendererGPU
46    };
47    pub use crate::utils::cursor_pos::TerrainCursorPos;
48    pub use crate::{
49        TERRAIN_BUILDINGS_COLLIDER_GROUP, TERRAIN_COLLIDER_GROUP, TERRAIN_MODULES_COLLIDER_GROUP
50    };
51}
52
53pub struct TerrainPlugin;
54impl Plugin for TerrainPlugin {
55    fn build(&self, app: &mut App) {
56        app.add_plugins((
57            TerrainRenderPlugin,
58            TerrainPhysicsPlugin,
59            TerrainUtilsPlugin
60        ));
61    }
62}