def test_bbox_parse_block() -> None: """Test parsing of a block-shaped bbox from a VMF.""" vmf = VMF() ent = vmf.create_ent( 'bee2_collision_bbox', coll_deco=1, coll_physics=1, coll_grating=0, tags='standard excellent', ) ent.solids.append(vmf.make_prism(Vec(80, 10, 40), Vec(150, 220, 70)).solid) ent.solids.append(vmf.make_prism(Vec(-30, 45, 80), Vec(-20, 60, 120)).solid) bb2, bb1 = BBox.from_ent(ent) # Allow it to produce in either order. if bb1.min_x == -30: bb1, bb2 = bb2, bb1 assert_bbox( bb1, (80, 10, 40), (150, 220, 70), CollideType.DECORATION | CollideType.PHYSICS, {'standard', 'excellent'}, ) assert_bbox( bb2, (-30, 45, 80), (-20, 60, 120), CollideType.DECORATION | CollideType.PHYSICS, {'standard', 'excellent'}, )
def test_bbox_parse_plane(axis: str, mins: tuple3, maxes: tuple3) -> None: """Test parsing planar bboxes from a VMF. With 5 skip sides, the brush is flattened into the remaining plane. """ vmf = VMF() ent = vmf.create_ent('bee2_collision_bbox', coll_solid=1) prism = vmf.make_prism(Vec(80, 10, 40), Vec(150, 220, 70), mat='tools/toolsskip') getattr(prism, axis).mat = 'tools/toolsclip' ent.solids.append(prism.solid) [bbox] = BBox.from_ent(ent) assert_bbox(bbox, mins, maxes, CollideType.SOLID, set())
def load_collision_bbox(item: Item, ent: Entity) -> None: """Load precise BEE collisions.""" item.collisions.extend(BBox.from_ent(ent))