Skip to content

Commit 7250b6b

Browse files
Attempt implement terrain system tests
1 parent 7172d11 commit 7250b6b

File tree

1 file changed

+58
-4
lines changed

1 file changed

+58
-4
lines changed

src/client/terrain/systems.rs

Lines changed: 58 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@ fn add_chunk_objects(
7777
texture_manager: &terrain_util::TextureManager,
7878
) {
7979
if let Some(mesh) = create_chunk_mesh(chunk, texture_manager) {
80-
let material = create_chunk_material(asset_server, materials);
81-
spawn_chunk(commands, meshes, material, mesh, chunk);
80+
let material = create_chunk_material(asset_server, &mut ResMut::reborrow(materials));
81+
spawn_chunk(commands, &mut ResMut::reborrow(meshes), material, mesh, chunk);
8282
}
8383
}
8484

@@ -91,8 +91,9 @@ fn create_chunk_mesh(
9191

9292
fn create_chunk_material(
9393
asset_server: &Res<AssetServer>,
94-
materials: &mut ResMut<Assets<StandardMaterial>>,
94+
materials: &mut Mut<Assets<StandardMaterial>>,
9595
) -> Handle<StandardMaterial> {
96+
// use Mut instead of ResMut because of https://github.com/bevyengine/bevy/issues/11765
9697
let texture_handle: Handle<Image> = asset_server.load("textures/texture_atlas.png");
9798
materials.add(StandardMaterial {
9899
perceptual_roughness: 0.5,
@@ -106,7 +107,7 @@ fn create_chunk_material(
106107

107108
fn spawn_chunk(
108109
commands: &mut Commands,
109-
meshes: &mut ResMut<Assets<Mesh>>,
110+
meshes: &mut Mut<Assets<Mesh>>,
110111
material: Handle<StandardMaterial>,
111112
mesh: Mesh,
112113
chunk: &terrain_util::Chunk,
@@ -134,3 +135,56 @@ fn spawn_chunk(
134135
));
135136
}
136137

138+
#[cfg(test)]
139+
mod tests {
140+
use super::*;
141+
use bevy::asset::AssetPlugin;
142+
143+
fn setup_app() -> App {
144+
let mut app = App::new();
145+
app
146+
.add_plugins(MinimalPlugins)
147+
.add_plugins(AssetPlugin::default());
148+
app
149+
}
150+
151+
#[test]
152+
fn test_create_chunk_material() {
153+
let mut app = setup_app();
154+
let world = &mut app.world;
155+
156+
world.insert_resource(Assets::<StandardMaterial>::default());
157+
158+
let asset_server = world.get_resource_ref::<AssetServer>().unwrap();
159+
let mut materials = world.get_resource_mut::<Assets<StandardMaterial>>().unwrap();
160+
161+
let material = create_chunk_material(&asset_server, &mut materials);
162+
assert!(materials.get(&material).is_some());
163+
}
164+
165+
#[test]
166+
fn test_spawn_chunk() {
167+
let mut app = setup_app();
168+
let world = &mut app.world;
169+
let mut command_queue = CommandQueue::default();
170+
let mut commands = Commands::new(&mut command_queue, world);
171+
172+
world.insert_resource(Assets::<StandardMaterial>::default());
173+
world.insert_resource(Assets::<Mesh>::default());
174+
175+
let asset_server = world.get_resource_ref::<AssetServer>().unwrap();
176+
let mut materials = world.get_resource_ref::<Assets<StandardMaterial>>().unwrap();
177+
let mut meshes = world.get_resource_mut::<Assets<Mesh>>().unwrap();
178+
179+
let chunk = terrain_util::Chunk::default();
180+
let mesh = create_chunk_mesh(&chunk, &terrain_util::TextureManager::default()).unwrap();
181+
let material = create_chunk_material(&asset_server, &mut materials);
182+
183+
spawn_chunk(&mut commands, &mut meshes, material, mesh, &chunk);
184+
185+
command_queue.apply(world);
186+
187+
let query = world.query::<&terrain_components::ChunkMesh>();
188+
assert_eq!(query.iter(world).count(), 1);
189+
}
190+
}

0 commit comments

Comments
 (0)