# {py:mod}`simvx.core.physics.world` ```{py:module} simvx.core.physics.world ``` ```{autodoc2-docstring} simvx.core.physics.world :allowtitles: ``` ## Module Contents ### Classes ````{list-table} :class: autosummary longtable :align: left * - {py:obj}`BodyMode ` - ```{autodoc2-docstring} simvx.core.physics.world.BodyMode :summary: ``` * - {py:obj}`RaycastHit ` - ```{autodoc2-docstring} simvx.core.physics.world.RaycastHit :summary: ``` * - {py:obj}`Contact ` - ```{autodoc2-docstring} simvx.core.physics.world.Contact :summary: ``` * - {py:obj}`ContactPhase ` - ```{autodoc2-docstring} simvx.core.physics.world.ContactPhase :summary: ``` * - {py:obj}`ContactEvent ` - ```{autodoc2-docstring} simvx.core.physics.world.ContactEvent :summary: ``` * - {py:obj}`OverlapEvent ` - ```{autodoc2-docstring} simvx.core.physics.world.OverlapEvent :summary: ``` * - {py:obj}`CharacterMoveResult ` - ```{autodoc2-docstring} simvx.core.physics.world.CharacterMoveResult :summary: ``` * - {py:obj}`PhysicsWorld ` - ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld :summary: ``` ```` ### Data ````{list-table} :class: autosummary longtable :align: left * - {py:obj}`BodyHandle ` - ```{autodoc2-docstring} simvx.core.physics.world.BodyHandle :summary: ``` * - {py:obj}`ShapeHandle ` - ```{autodoc2-docstring} simvx.core.physics.world.ShapeHandle :summary: ``` * - {py:obj}`CharacterHandle ` - ```{autodoc2-docstring} simvx.core.physics.world.CharacterHandle :summary: ``` * - {py:obj}`JointHandle ` - ```{autodoc2-docstring} simvx.core.physics.world.JointHandle :summary: ``` * - {py:obj}`__all__ ` - ```{autodoc2-docstring} simvx.core.physics.world.__all__ :summary: ``` ```` ### API ````{py:data} BodyHandle :canonical: simvx.core.physics.world.BodyHandle :value: > None ```{autodoc2-docstring} simvx.core.physics.world.BodyHandle ``` ```` ````{py:data} ShapeHandle :canonical: simvx.core.physics.world.ShapeHandle :value: > None ```{autodoc2-docstring} simvx.core.physics.world.ShapeHandle ``` ```` ````{py:data} CharacterHandle :canonical: simvx.core.physics.world.CharacterHandle :value: > None ```{autodoc2-docstring} simvx.core.physics.world.CharacterHandle ``` ```` ````{py:data} JointHandle :canonical: simvx.core.physics.world.JointHandle :value: > None ```{autodoc2-docstring} simvx.core.physics.world.JointHandle ``` ```` `````{py:class} BodyMode :canonical: simvx.core.physics.world.BodyMode Bases: {py:obj}`enum.Enum` ```{autodoc2-docstring} simvx.core.physics.world.BodyMode ``` ````{py:attribute} STATIC :canonical: simvx.core.physics.world.BodyMode.STATIC :value: > 'static' ```{autodoc2-docstring} simvx.core.physics.world.BodyMode.STATIC ``` ```` ````{py:attribute} DYNAMIC :canonical: simvx.core.physics.world.BodyMode.DYNAMIC :value: > 'dynamic' ```{autodoc2-docstring} simvx.core.physics.world.BodyMode.DYNAMIC ``` ```` ````{py:attribute} KINEMATIC :canonical: simvx.core.physics.world.BodyMode.KINEMATIC :value: > 'kinematic' ```{autodoc2-docstring} simvx.core.physics.world.BodyMode.KINEMATIC ``` ```` ````{py:method} __new__(value) :canonical: simvx.core.physics.world.BodyMode.__new__ ```` ````{py:method} __repr__() :canonical: simvx.core.physics.world.BodyMode.__repr__ ```` ````{py:method} __str__() :canonical: simvx.core.physics.world.BodyMode.__str__ ```` ````{py:method} __dir__() :canonical: simvx.core.physics.world.BodyMode.__dir__ ```` ````{py:method} __format__(format_spec) :canonical: simvx.core.physics.world.BodyMode.__format__ ```` ````{py:method} __hash__() :canonical: simvx.core.physics.world.BodyMode.__hash__ ```` ````{py:method} __reduce_ex__(proto) :canonical: simvx.core.physics.world.BodyMode.__reduce_ex__ ```` ````{py:method} __deepcopy__(memo) :canonical: simvx.core.physics.world.BodyMode.__deepcopy__ ```` ````{py:method} __copy__() :canonical: simvx.core.physics.world.BodyMode.__copy__ ```` ````{py:method} name() :canonical: simvx.core.physics.world.BodyMode.name ```` ````{py:method} value() :canonical: simvx.core.physics.world.BodyMode.value ```` ````` `````{py:class} RaycastHit :canonical: simvx.core.physics.world.RaycastHit ```{autodoc2-docstring} simvx.core.physics.world.RaycastHit ``` ````{py:attribute} body :canonical: simvx.core.physics.world.RaycastHit.body :type: simvx.core.physics.world.BodyHandle :value: > None ```{autodoc2-docstring} simvx.core.physics.world.RaycastHit.body ``` ```` ````{py:attribute} point :canonical: simvx.core.physics.world.RaycastHit.point :type: simvx.core.math.Vec3 :value: > None ```{autodoc2-docstring} simvx.core.physics.world.RaycastHit.point ``` ```` ````{py:attribute} normal :canonical: simvx.core.physics.world.RaycastHit.normal :type: simvx.core.math.Vec3 :value: > None ```{autodoc2-docstring} simvx.core.physics.world.RaycastHit.normal ``` ```` ````{py:attribute} distance :canonical: simvx.core.physics.world.RaycastHit.distance :type: float :value: > None ```{autodoc2-docstring} simvx.core.physics.world.RaycastHit.distance ``` ```` ````` `````{py:class} Contact :canonical: simvx.core.physics.world.Contact ```{autodoc2-docstring} simvx.core.physics.world.Contact ``` ````{py:attribute} body :canonical: simvx.core.physics.world.Contact.body :type: simvx.core.physics.world.BodyHandle :value: > None ```{autodoc2-docstring} simvx.core.physics.world.Contact.body ``` ```` ````{py:attribute} point :canonical: simvx.core.physics.world.Contact.point :type: simvx.core.math.Vec3 :value: > None ```{autodoc2-docstring} simvx.core.physics.world.Contact.point ``` ```` ````{py:attribute} normal :canonical: simvx.core.physics.world.Contact.normal :type: simvx.core.math.Vec3 :value: > None ```{autodoc2-docstring} simvx.core.physics.world.Contact.normal ``` ```` ````{py:attribute} distance :canonical: simvx.core.physics.world.Contact.distance :type: float :value: > None ```{autodoc2-docstring} simvx.core.physics.world.Contact.distance ``` ```` ````` `````{py:class} ContactPhase :canonical: simvx.core.physics.world.ContactPhase Bases: {py:obj}`enum.Enum` ```{autodoc2-docstring} simvx.core.physics.world.ContactPhase ``` ````{py:attribute} ENTER :canonical: simvx.core.physics.world.ContactPhase.ENTER :value: > 'enter' ```{autodoc2-docstring} simvx.core.physics.world.ContactPhase.ENTER ``` ```` ````{py:attribute} EXIT :canonical: simvx.core.physics.world.ContactPhase.EXIT :value: > 'exit' ```{autodoc2-docstring} simvx.core.physics.world.ContactPhase.EXIT ``` ```` ````{py:method} __new__(value) :canonical: simvx.core.physics.world.ContactPhase.__new__ ```` ````{py:method} __repr__() :canonical: simvx.core.physics.world.ContactPhase.__repr__ ```` ````{py:method} __str__() :canonical: simvx.core.physics.world.ContactPhase.__str__ ```` ````{py:method} __dir__() :canonical: simvx.core.physics.world.ContactPhase.__dir__ ```` ````{py:method} __format__(format_spec) :canonical: simvx.core.physics.world.ContactPhase.__format__ ```` ````{py:method} __hash__() :canonical: simvx.core.physics.world.ContactPhase.__hash__ ```` ````{py:method} __reduce_ex__(proto) :canonical: simvx.core.physics.world.ContactPhase.__reduce_ex__ ```` ````{py:method} __deepcopy__(memo) :canonical: simvx.core.physics.world.ContactPhase.__deepcopy__ ```` ````{py:method} __copy__() :canonical: simvx.core.physics.world.ContactPhase.__copy__ ```` ````{py:method} name() :canonical: simvx.core.physics.world.ContactPhase.name ```` ````{py:method} value() :canonical: simvx.core.physics.world.ContactPhase.value ```` ````` `````{py:class} ContactEvent :canonical: simvx.core.physics.world.ContactEvent ```{autodoc2-docstring} simvx.core.physics.world.ContactEvent ``` ````{py:attribute} a :canonical: simvx.core.physics.world.ContactEvent.a :type: simvx.core.physics.world.BodyHandle :value: > None ```{autodoc2-docstring} simvx.core.physics.world.ContactEvent.a ``` ```` ````{py:attribute} b :canonical: simvx.core.physics.world.ContactEvent.b :type: simvx.core.physics.world.BodyHandle :value: > None ```{autodoc2-docstring} simvx.core.physics.world.ContactEvent.b ``` ```` ````{py:attribute} phase :canonical: simvx.core.physics.world.ContactEvent.phase :type: simvx.core.physics.world.ContactPhase :value: > None ```{autodoc2-docstring} simvx.core.physics.world.ContactEvent.phase ``` ```` ````{py:attribute} point :canonical: simvx.core.physics.world.ContactEvent.point :type: simvx.core.math.Vec3 :value: > None ```{autodoc2-docstring} simvx.core.physics.world.ContactEvent.point ``` ```` ````{py:attribute} normal :canonical: simvx.core.physics.world.ContactEvent.normal :type: simvx.core.math.Vec3 :value: > None ```{autodoc2-docstring} simvx.core.physics.world.ContactEvent.normal ``` ```` ````{py:attribute} impulse :canonical: simvx.core.physics.world.ContactEvent.impulse :type: float :value: > None ```{autodoc2-docstring} simvx.core.physics.world.ContactEvent.impulse ``` ```` ````{py:attribute} rel_velocity :canonical: simvx.core.physics.world.ContactEvent.rel_velocity :type: simvx.core.math.Vec3 :value: > None ```{autodoc2-docstring} simvx.core.physics.world.ContactEvent.rel_velocity ``` ```` ````` `````{py:class} OverlapEvent :canonical: simvx.core.physics.world.OverlapEvent ```{autodoc2-docstring} simvx.core.physics.world.OverlapEvent ``` ````{py:attribute} sensor :canonical: simvx.core.physics.world.OverlapEvent.sensor :type: simvx.core.physics.world.BodyHandle :value: > None ```{autodoc2-docstring} simvx.core.physics.world.OverlapEvent.sensor ``` ```` ````{py:attribute} other :canonical: simvx.core.physics.world.OverlapEvent.other :type: simvx.core.physics.world.BodyHandle :value: > None ```{autodoc2-docstring} simvx.core.physics.world.OverlapEvent.other ``` ```` ````{py:attribute} phase :canonical: simvx.core.physics.world.OverlapEvent.phase :type: simvx.core.physics.world.ContactPhase :value: > None ```{autodoc2-docstring} simvx.core.physics.world.OverlapEvent.phase ``` ```` ````` `````{py:class} CharacterMoveResult :canonical: simvx.core.physics.world.CharacterMoveResult ```{autodoc2-docstring} simvx.core.physics.world.CharacterMoveResult ``` ````{py:attribute} velocity :canonical: simvx.core.physics.world.CharacterMoveResult.velocity :type: simvx.core.math.Vec3 :value: > None ```{autodoc2-docstring} simvx.core.physics.world.CharacterMoveResult.velocity ``` ```` ````{py:attribute} on_floor :canonical: simvx.core.physics.world.CharacterMoveResult.on_floor :type: bool :value: > None ```{autodoc2-docstring} simvx.core.physics.world.CharacterMoveResult.on_floor ``` ```` ````{py:attribute} on_wall :canonical: simvx.core.physics.world.CharacterMoveResult.on_wall :type: bool :value: > None ```{autodoc2-docstring} simvx.core.physics.world.CharacterMoveResult.on_wall ``` ```` ````{py:attribute} on_ceiling :canonical: simvx.core.physics.world.CharacterMoveResult.on_ceiling :type: bool :value: > None ```{autodoc2-docstring} simvx.core.physics.world.CharacterMoveResult.on_ceiling ``` ```` ````{py:attribute} floor_normal :canonical: simvx.core.physics.world.CharacterMoveResult.floor_normal :type: simvx.core.math.Vec3 :value: > None ```{autodoc2-docstring} simvx.core.physics.world.CharacterMoveResult.floor_normal ``` ```` ````` `````{py:class} PhysicsWorld(*, gravity: simvx.core.math.Vec3) :canonical: simvx.core.physics.world.PhysicsWorld Bases: {py:obj}`abc.ABC` ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld ``` ```{rubric} Initialization ``` ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.__init__ ``` ````{py:property} gravity :canonical: simvx.core.physics.world.PhysicsWorld.gravity :type: simvx.core.math.Vec3 ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.gravity ``` ```` ````{py:method} capabilities() -> frozenset[simvx.core.physics.capability.Capability] :canonical: simvx.core.physics.world.PhysicsWorld.capabilities ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.capabilities ``` ```` ````{py:method} create_sphere(radius: float) -> simvx.core.physics.world.ShapeHandle :canonical: simvx.core.physics.world.PhysicsWorld.create_sphere :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.create_sphere ``` ```` ````{py:method} create_box(half_extents: simvx.core.math.Vec3) -> simvx.core.physics.world.ShapeHandle :canonical: simvx.core.physics.world.PhysicsWorld.create_box :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.create_box ``` ```` ````{py:method} create_capsule(radius: float, height: float) -> simvx.core.physics.world.ShapeHandle :canonical: simvx.core.physics.world.PhysicsWorld.create_capsule :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.create_capsule ``` ```` ````{py:method} create_cylinder(radius: float, height: float) -> simvx.core.physics.world.ShapeHandle :canonical: simvx.core.physics.world.PhysicsWorld.create_cylinder :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.create_cylinder ``` ```` ````{py:method} create_convex_hull(points: numpy.ndarray) -> simvx.core.physics.world.ShapeHandle :canonical: simvx.core.physics.world.PhysicsWorld.create_convex_hull :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.create_convex_hull ``` ```` ````{py:method} create_mesh(vertices: numpy.ndarray, indices: numpy.ndarray) -> simvx.core.physics.world.ShapeHandle :canonical: simvx.core.physics.world.PhysicsWorld.create_mesh :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.create_mesh ``` ```` ````{py:method} create_body(shape: simvx.core.physics.world.ShapeHandle, body_type: simvx.core.physics.world.BodyMode, transform: typing.Any, *, mass: float = 1.0, collision_layer: int = 1, collision_mask: int = 4294967295, is_sensor: bool = False, friction: float = 0.5, restitution: float = 0.0, friction_combine: simvx.core.physics.material.CombineMode = CombineMode.AVERAGE, restitution_combine: simvx.core.physics.material.CombineMode = CombineMode.AVERAGE, continuous: bool = False) -> simvx.core.physics.world.BodyHandle :canonical: simvx.core.physics.world.PhysicsWorld.create_body :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.create_body ``` ```` ````{py:method} destroy_body(handle: simvx.core.physics.world.BodyHandle) -> None :canonical: simvx.core.physics.world.PhysicsWorld.destroy_body :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.destroy_body ``` ```` ````{py:method} set_body_transform(handle: simvx.core.physics.world.BodyHandle, transform: typing.Any) -> None :canonical: simvx.core.physics.world.PhysicsWorld.set_body_transform :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.set_body_transform ``` ```` ````{py:method} set_body_velocity(handle: simvx.core.physics.world.BodyHandle, linear: simvx.core.math.Vec3, angular: simvx.core.math.Vec3 | None = None) -> None :canonical: simvx.core.physics.world.PhysicsWorld.set_body_velocity :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.set_body_velocity ``` ```` ````{py:method} set_body_mode(handle: simvx.core.physics.world.BodyHandle, mode: simvx.core.physics.world.BodyMode) -> None :canonical: simvx.core.physics.world.PhysicsWorld.set_body_mode :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.set_body_mode ``` ```` ````{py:method} body_velocity(handle: simvx.core.physics.world.BodyHandle) -> tuple[simvx.core.math.Vec3, simvx.core.math.Vec3] :canonical: simvx.core.physics.world.PhysicsWorld.body_velocity :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.body_velocity ``` ```` ````{py:method} sleeping(handle: simvx.core.physics.world.BodyHandle) -> bool :canonical: simvx.core.physics.world.PhysicsWorld.sleeping :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.sleeping ``` ```` ````{py:method} apply_impulse(handle: simvx.core.physics.world.BodyHandle, impulse: simvx.core.math.Vec3, *, at: simvx.core.math.Vec3 | None = None, angular: simvx.core.math.Vec3 | None = None) -> None :canonical: simvx.core.physics.world.PhysicsWorld.apply_impulse :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.apply_impulse ``` ```` ````{py:method} apply_force(handle: simvx.core.physics.world.BodyHandle, force: simvx.core.math.Vec3, *, at: simvx.core.math.Vec3 | None = None) -> None :canonical: simvx.core.physics.world.PhysicsWorld.apply_force :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.apply_force ``` ```` ````{py:method} apply_torque(handle: simvx.core.physics.world.BodyHandle, torque: simvx.core.math.Vec3) -> None :canonical: simvx.core.physics.world.PhysicsWorld.apply_torque :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.apply_torque ``` ```` ````{py:method} create_fixed_joint(a: simvx.core.physics.world.BodyHandle, b: simvx.core.physics.world.BodyHandle) -> simvx.core.physics.world.JointHandle :canonical: simvx.core.physics.world.PhysicsWorld.create_fixed_joint :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.create_fixed_joint ``` ```` ````{py:method} create_pin_joint(a: simvx.core.physics.world.BodyHandle, b: simvx.core.physics.world.BodyHandle, anchor: simvx.core.math.Vec3) -> simvx.core.physics.world.JointHandle :canonical: simvx.core.physics.world.PhysicsWorld.create_pin_joint :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.create_pin_joint ``` ```` ````{py:method} create_hinge_joint(a: simvx.core.physics.world.BodyHandle, b: simvx.core.physics.world.BodyHandle, anchor: simvx.core.math.Vec3, axis: simvx.core.math.Vec3) -> simvx.core.physics.world.JointHandle :canonical: simvx.core.physics.world.PhysicsWorld.create_hinge_joint :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.create_hinge_joint ``` ```` ````{py:method} create_spring_joint(a: simvx.core.physics.world.BodyHandle, b: simvx.core.physics.world.BodyHandle, rest_length: float, stiffness: float, damping: float) -> simvx.core.physics.world.JointHandle :canonical: simvx.core.physics.world.PhysicsWorld.create_spring_joint :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.create_spring_joint ``` ```` ````{py:method} remove_joint(handle: simvx.core.physics.world.JointHandle) -> None :canonical: simvx.core.physics.world.PhysicsWorld.remove_joint :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.remove_joint ``` ```` ````{py:property} body_count :canonical: simvx.core.physics.world.PhysicsWorld.body_count :abstractmethod: :type: int ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.body_count ``` ```` ````{py:method} clear() -> None :canonical: simvx.core.physics.world.PhysicsWorld.clear :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.clear ``` ```` ````{py:method} step(dt: float) -> None :canonical: simvx.core.physics.world.PhysicsWorld.step :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.step ``` ```` ````{py:method} drain_contact_events() -> list[simvx.core.physics.world.ContactEvent] :canonical: simvx.core.physics.world.PhysicsWorld.drain_contact_events :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.drain_contact_events ``` ```` ````{py:method} drain_overlap_events() -> list[simvx.core.physics.world.OverlapEvent] :canonical: simvx.core.physics.world.PhysicsWorld.drain_overlap_events :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.drain_overlap_events ``` ```` ````{py:method} register_bodies(handles: list[simvx.core.physics.world.BodyHandle]) -> None :canonical: simvx.core.physics.world.PhysicsWorld.register_bodies :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.register_bodies ``` ```` ````{py:method} read_transforms(out: numpy.ndarray) -> None :canonical: simvx.core.physics.world.PhysicsWorld.read_transforms :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.read_transforms ``` ```` ````{py:method} read_velocities(out: numpy.ndarray) -> None :canonical: simvx.core.physics.world.PhysicsWorld.read_velocities :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.read_velocities ``` ```` ````{py:method} raycast(origin: simvx.core.math.Vec3, direction: simvx.core.math.Vec3, max_dist: float, *, mask: int = 4294967295) -> simvx.core.physics.world.RaycastHit | None :canonical: simvx.core.physics.world.PhysicsWorld.raycast :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.raycast ``` ```` ````{py:method} raycast_all(origin: simvx.core.math.Vec3, direction: simvx.core.math.Vec3, max_dist: float, *, mask: int = 4294967295) -> list[simvx.core.physics.world.RaycastHit] :canonical: simvx.core.physics.world.PhysicsWorld.raycast_all :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.raycast_all ``` ```` ````{py:method} shapecast(shape: simvx.core.physics.world.ShapeHandle, origin: simvx.core.math.Vec3, direction: simvx.core.math.Vec3, max_dist: float, *, mask: int = 4294967295) -> simvx.core.physics.world.Contact | None :canonical: simvx.core.physics.world.PhysicsWorld.shapecast :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.shapecast ``` ```` ````{py:method} overlap(shape: simvx.core.physics.world.ShapeHandle, transform: typing.Any, *, mask: int = 4294967295) -> list[simvx.core.physics.world.BodyHandle] :canonical: simvx.core.physics.world.PhysicsWorld.overlap :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.overlap ``` ```` ````{py:method} move_and_collide(handle: simvx.core.physics.world.BodyHandle, motion: simvx.core.math.Vec3) -> simvx.core.physics.world.Contact | None :canonical: simvx.core.physics.world.PhysicsWorld.move_and_collide :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.move_and_collide ``` ```` ````{py:method} body_transform(handle: simvx.core.physics.world.BodyHandle) -> tuple[simvx.core.math.Vec3, simvx.core.math.Quat] :canonical: simvx.core.physics.world.PhysicsWorld.body_transform :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.body_transform ``` ```` ````{py:method} create_character(shape: simvx.core.physics.world.ShapeHandle, transform: typing.Any, *, up: simvx.core.math.Vec3 = _DEFAULT_UP, slope_limit: float = math.radians(45.0), step_height: float = 0.0, skin_width: float = 0.001, collision_layer: int = 1, collision_mask: int = 4294967295) -> simvx.core.physics.world.CharacterHandle :canonical: simvx.core.physics.world.PhysicsWorld.create_character :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.create_character ``` ```` ````{py:method} destroy_character(handle: simvx.core.physics.world.CharacterHandle) -> None :canonical: simvx.core.physics.world.PhysicsWorld.destroy_character :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.destroy_character ``` ```` ````{py:method} set_character_transform(handle: simvx.core.physics.world.CharacterHandle, transform: typing.Any) -> None :canonical: simvx.core.physics.world.PhysicsWorld.set_character_transform :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.set_character_transform ``` ```` ````{py:method} character_transform(handle: simvx.core.physics.world.CharacterHandle) -> tuple[simvx.core.math.Vec3, simvx.core.math.Quat] :canonical: simvx.core.physics.world.PhysicsWorld.character_transform :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.character_transform ``` ```` ````{py:method} character_move_and_slide(handle: simvx.core.physics.world.CharacterHandle, velocity: simvx.core.math.Vec3, dt: float, *, up: simvx.core.math.Vec3, max_slides: int = 4) -> simvx.core.physics.world.CharacterMoveResult :canonical: simvx.core.physics.world.PhysicsWorld.character_move_and_slide :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world.PhysicsWorld.character_move_and_slide ``` ```` ````{py:attribute} __slots__ :canonical: simvx.core.physics.world.PhysicsWorld.__slots__ :value: > () ```` ````` ````{py:data} __all__ :canonical: simvx.core.physics.world.__all__ :value: > ['BodyMode', 'Capability', 'CombineMode', 'RaycastHit', 'Contact', 'ContactPhase', 'ContactEvent', '... ```{autodoc2-docstring} simvx.core.physics.world.__all__ ``` ````