Merge pull request #11405 from ilguerro/fix/w076

Count collidable entities in auto-jump like vanilla
This commit is contained in:
rdbt authored and GitHub committed 2026-11-06 22:09:45 +00:00
commit f2e7c1865f
1 file changed
+42 -1
+42 -1
View File
@@ -2270,9 +2270,17 @@ impl crate::auto_jump::AutoJumpWorld for MotionWorld<'_, '_, '_> {
Ok(binding.collision_shape_with_context(&mut self.collisions(), state, p, &context)?)
}
fn collision_boxes(&mut self, bounds: Aabb) -> Result<Vec<Aabb>> {
// EntityGetter.getEntityCollisions queries with a small inflation, and
// CollisionGetter.getCollisions returns these before block shapes.
let query = bounds.inflate(Vec3::new(1.0e-7, 1.0e-7, 1.0e-7));
let mut boxes: Vec<_> = self
.entities
.iter()
.copied()
.filter(|b| b.intersects(query))
.collect();
let context = self.context();
let mut scene = self.collisions();
let mut boxes = Vec::new();
for hit in horizon_world::block_collision_scan::BlockCollisionScan::new(
&mut scene, context, bounds, false, 1_000_000,
)? {
@@ -3329,6 +3337,39 @@ mod tests {
assert_eq!(back.health.health(), 40.0);
}
#[test]
#[ignore = "needs prepared resources in HORIZON_TEST_RESOURCES"]
fn auto_jump_detects_collidable_entities() {
let root = std::path::PathBuf::from(
std::env::var_os("HORIZON_TEST_RESOURCES").expect("HORIZON_TEST_RESOURCES"),
);
let assets = Assets::load(&root).unwrap();
let render = assets.reload(&root).unwrap();
let binding = crate::collisions::load(&root, assets.registry).unwrap();
let resources = MotionResources::load(&root, &assets).unwrap();
let mut scene = World::test_scene(&assets, &render, 1).unwrap();
let mut player = PlayerMotion::new(&resources, Vec3::new(10.0, 100.0, 10.0)).unwrap();
player.auto_jump_enabled = true;
player.ground.on_ground = true;
player.move_vector = [0.0, 1.0];
let entities = [Aabb::new(
Vec3::new(9.5, 100.0, 10.5),
Vec3::new(10.5, 100.8, 11.5),
)];
MotionWorld {
entities: &entities,
player: &mut player,
scene: &mut scene,
assets: &assets,
collision_binding: &binding,
resources: &resources,
health: &resources.health,
}
.update_auto_jump(0.0, 0.1)
.unwrap();
assert_eq!(player.auto_jump_time, 1);
}
#[test]
fn player_stands_walks_sneaks_and_jumps_on_ghast() {
let root = std::env::var_os("HORIZON_TEST_RESOURCES")