Skip to content

Commit 66b9f1b

Browse files
Refactor collider component
1 parent be7b5ce commit 66b9f1b

File tree

5 files changed

+23
-36
lines changed

5 files changed

+23
-36
lines changed

src/client/collider/components.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ use crate::prelude::*;
22

33
#[derive(Component)]
44
pub struct MyCollider {
5-
pub key: u32,
5+
pub relative_position: Vec3,
66
}

src/client/collider/systems.rs

Lines changed: 19 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,13 @@ pub fn setup_coliders_system(mut commands: Commands) {
99
for x in collider_range.clone() {
1010
for y in collider_range.clone() {
1111
for z in collider_range.clone() {
12-
let key = x * COLLIDER_GRID_SIZE * COLLIDER_GRID_SIZE + y * COLLIDER_GRID_SIZE + z;
1312
commands
1413
.spawn(Collider::cuboid(0.5, 0.5, 0.5))
1514
.insert(TransformBundle::from(Transform::from_xyz(
16-
x as f32, y as f32, z as f32,
15+
x as f32, y as f32, z as f32,
1716
)))
18-
.insert(collider_components::MyCollider { key });
19-
}
17+
.insert(collider_components::MyCollider { relative_position: Vec3 {x: x as f32, y: y as f32, z: z as f32} });
18+
}
2019
}
2120
}
2221
}
@@ -30,7 +29,7 @@ pub fn handle_collider_update_events_system(
3029
let event_position =
3130
Vec3::new(event.grid_center_position[0], event.grid_center_position[1], event.grid_center_position[2]).floor();
3231
for (mut transform, collider) in query.iter_mut() {
33-
let relative_position = relative_colider_position(collider.key);
32+
let relative_position = collider.relative_position;
3433
let collider_position = (event_position + relative_position).floor();
3534
let block = chunk_manager.get_block(collider_position);
3635

@@ -50,18 +49,6 @@ pub fn handle_collider_update_events_system(
5049
}
5150
}
5251

53-
fn relative_colider_position(key: u32) -> Vec3 {
54-
let x = key / (COLLIDER_GRID_SIZE * COLLIDER_GRID_SIZE);
55-
let y = (key % (COLLIDER_GRID_SIZE * COLLIDER_GRID_SIZE)) / COLLIDER_GRID_SIZE;
56-
let z = key % COLLIDER_GRID_SIZE;
57-
58-
Vec3 {
59-
x: x as f32 - (COLLIDER_GRID_SIZE / 2) as f32,
60-
y: y as f32 - (COLLIDER_GRID_SIZE / 2) as f32,
61-
z: z as f32 - (COLLIDER_GRID_SIZE / 2) as f32,
62-
}
63-
}
64-
6552
#[cfg(test)]
6653
mod tests {
6754
use collider_events::ColliderUpdateEvent;
@@ -95,15 +82,15 @@ mod tests {
9582
app.insert_resource(terrain_resources::ChunkManager::new());
9683

9784
app.world.spawn((
98-
Transform {
99-
translation: Vec3 {
100-
x: 0.0,
101-
y: 0.0,
102-
z: 0.0,
85+
Transform {
86+
translation: Vec3 {
87+
x: 0.0,
88+
y: 0.0,
89+
z: 0.0,
90+
},
91+
..Default::default()
10392
},
104-
..Default::default()
105-
},
106-
collider_components::MyCollider { key: 0 },
93+
collider_components::MyCollider { relative_position: Vec3 {x: 1.0, y: 2.0, z: 3.0}},
10794
));
10895

10996
let block = BlockId::Dirt;
@@ -122,15 +109,15 @@ mod tests {
122109
resource.insert_chunks(chunks);
123110
resource.set_block(
124111
Vec3 {
125-
x: 9.0,
126-
y: 9.0,
127-
z: 9.0,
112+
x: 6.0,
113+
y: 7.0,
114+
z: 8.0,
128115
},
129116
block,
130117
);
131118

132119
app.world.send_event(ColliderUpdateEvent {
133-
grid_center_position: [10.0, 10.0, 10.0],
120+
grid_center_position: [5.0, 5.0, 5.0],
134121
});
135122

136123
app.update();
@@ -141,9 +128,9 @@ mod tests {
141128
let (collider_transform, _) = collider_query.single(&app.world);
142129
assert_eq!(
143130
Vec3 {
144-
x: 9.5,
145-
y: 9.5,
146-
z: 9.5
131+
x: 6.5,
132+
y: 7.5,
133+
z: 8.5
147134
},
148135
collider_transform.translation
149136
);

src/client/player/systems/controller.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ pub fn handle_controller_movement_system(
6868
let controller_position = transform.translation;
6969
if last_position.0.floor() != controller_position.floor() {
7070
collider_events.send(collider_events::ColliderUpdateEvent {
71-
position: controller_position.into(),
71+
grid_center_position: controller_position.into(),
7272
});
7373
}
7474
last_position.0 = controller_position;

src/client/player/systems/keyboard.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ pub fn handle_keyboard_events_system(
1010
let controller_transform = camera_query.single();
1111
println!("Handling event: {:?}", controller_transform.translation);
1212
collider_events.send(collider_events::ColliderUpdateEvent {
13-
position: controller_transform.translation.into(),
13+
grid_center_position: controller_transform.translation.into(),
1414
});
1515
}
1616
}

src/client/player/systems/terrain.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ pub fn handle_player_collider_events_system(
4343
let player_position = transform.translation.floor();
4444

4545
collider_events.send(collider_events::ColliderUpdateEvent {
46-
position: player_position.into(),
46+
grid_center_position: player_position.into(),
4747
});
4848
}
4949
}

0 commit comments

Comments
 (0)