# {py:mod}`simvx.core.physics.world2d` ```{py:module} simvx.core.physics.world2d ``` ```{autodoc2-docstring} simvx.core.physics.world2d :allowtitles: ``` ## Module Contents ### Classes ````{list-table} :class: autosummary longtable :align: left * - {py:obj}`RaycastHit2D ` - ```{autodoc2-docstring} simvx.core.physics.world2d.RaycastHit2D :summary: ``` * - {py:obj}`Contact2D ` - ```{autodoc2-docstring} simvx.core.physics.world2d.Contact2D :summary: ``` * - {py:obj}`ContactEvent2D ` - ```{autodoc2-docstring} simvx.core.physics.world2d.ContactEvent2D :summary: ``` * - {py:obj}`OverlapEvent2D ` - ```{autodoc2-docstring} simvx.core.physics.world2d.OverlapEvent2D :summary: ``` * - {py:obj}`CharacterMoveResult2D ` - ```{autodoc2-docstring} simvx.core.physics.world2d.CharacterMoveResult2D :summary: ``` * - {py:obj}`Physics2DWorld ` - ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld :summary: ``` ```` ### Data ````{list-table} :class: autosummary longtable :align: left * - {py:obj}`BodyHandle ` - ```{autodoc2-docstring} simvx.core.physics.world2d.BodyHandle :summary: ``` * - {py:obj}`ShapeHandle ` - ```{autodoc2-docstring} simvx.core.physics.world2d.ShapeHandle :summary: ``` * - {py:obj}`CharacterHandle ` - ```{autodoc2-docstring} simvx.core.physics.world2d.CharacterHandle :summary: ``` * - {py:obj}`JointHandle ` - ```{autodoc2-docstring} simvx.core.physics.world2d.JointHandle :summary: ``` * - {py:obj}`__all__ ` - ```{autodoc2-docstring} simvx.core.physics.world2d.__all__ :summary: ``` ```` ### API ````{py:data} BodyHandle :canonical: simvx.core.physics.world2d.BodyHandle :value: > None ```{autodoc2-docstring} simvx.core.physics.world2d.BodyHandle ``` ```` ````{py:data} ShapeHandle :canonical: simvx.core.physics.world2d.ShapeHandle :value: > None ```{autodoc2-docstring} simvx.core.physics.world2d.ShapeHandle ``` ```` ````{py:data} CharacterHandle :canonical: simvx.core.physics.world2d.CharacterHandle :value: > None ```{autodoc2-docstring} simvx.core.physics.world2d.CharacterHandle ``` ```` ````{py:data} JointHandle :canonical: simvx.core.physics.world2d.JointHandle :value: > None ```{autodoc2-docstring} simvx.core.physics.world2d.JointHandle ``` ```` `````{py:class} RaycastHit2D :canonical: simvx.core.physics.world2d.RaycastHit2D ```{autodoc2-docstring} simvx.core.physics.world2d.RaycastHit2D ``` ````{py:attribute} body :canonical: simvx.core.physics.world2d.RaycastHit2D.body :type: simvx.core.physics.world2d.BodyHandle :value: > None ```{autodoc2-docstring} simvx.core.physics.world2d.RaycastHit2D.body ``` ```` ````{py:attribute} point :canonical: simvx.core.physics.world2d.RaycastHit2D.point :type: simvx.core.math.Vec2 :value: > None ```{autodoc2-docstring} simvx.core.physics.world2d.RaycastHit2D.point ``` ```` ````{py:attribute} normal :canonical: simvx.core.physics.world2d.RaycastHit2D.normal :type: simvx.core.math.Vec2 :value: > None ```{autodoc2-docstring} simvx.core.physics.world2d.RaycastHit2D.normal ``` ```` ````{py:attribute} distance :canonical: simvx.core.physics.world2d.RaycastHit2D.distance :type: float :value: > None ```{autodoc2-docstring} simvx.core.physics.world2d.RaycastHit2D.distance ``` ```` ````` `````{py:class} Contact2D :canonical: simvx.core.physics.world2d.Contact2D ```{autodoc2-docstring} simvx.core.physics.world2d.Contact2D ``` ````{py:attribute} body :canonical: simvx.core.physics.world2d.Contact2D.body :type: simvx.core.physics.world2d.BodyHandle :value: > None ```{autodoc2-docstring} simvx.core.physics.world2d.Contact2D.body ``` ```` ````{py:attribute} point :canonical: simvx.core.physics.world2d.Contact2D.point :type: simvx.core.math.Vec2 :value: > None ```{autodoc2-docstring} simvx.core.physics.world2d.Contact2D.point ``` ```` ````{py:attribute} normal :canonical: simvx.core.physics.world2d.Contact2D.normal :type: simvx.core.math.Vec2 :value: > None ```{autodoc2-docstring} simvx.core.physics.world2d.Contact2D.normal ``` ```` ````{py:attribute} distance :canonical: simvx.core.physics.world2d.Contact2D.distance :type: float :value: > None ```{autodoc2-docstring} simvx.core.physics.world2d.Contact2D.distance ``` ```` ````` `````{py:class} ContactEvent2D :canonical: simvx.core.physics.world2d.ContactEvent2D ```{autodoc2-docstring} simvx.core.physics.world2d.ContactEvent2D ``` ````{py:attribute} a :canonical: simvx.core.physics.world2d.ContactEvent2D.a :type: simvx.core.physics.world2d.BodyHandle :value: > None ```{autodoc2-docstring} simvx.core.physics.world2d.ContactEvent2D.a ``` ```` ````{py:attribute} b :canonical: simvx.core.physics.world2d.ContactEvent2D.b :type: simvx.core.physics.world2d.BodyHandle :value: > None ```{autodoc2-docstring} simvx.core.physics.world2d.ContactEvent2D.b ``` ```` ````{py:attribute} phase :canonical: simvx.core.physics.world2d.ContactEvent2D.phase :type: simvx.core.physics.world.ContactPhase :value: > None ```{autodoc2-docstring} simvx.core.physics.world2d.ContactEvent2D.phase ``` ```` ````{py:attribute} point :canonical: simvx.core.physics.world2d.ContactEvent2D.point :type: simvx.core.math.Vec2 :value: > None ```{autodoc2-docstring} simvx.core.physics.world2d.ContactEvent2D.point ``` ```` ````{py:attribute} normal :canonical: simvx.core.physics.world2d.ContactEvent2D.normal :type: simvx.core.math.Vec2 :value: > None ```{autodoc2-docstring} simvx.core.physics.world2d.ContactEvent2D.normal ``` ```` ````{py:attribute} impulse :canonical: simvx.core.physics.world2d.ContactEvent2D.impulse :type: float :value: > None ```{autodoc2-docstring} simvx.core.physics.world2d.ContactEvent2D.impulse ``` ```` ````{py:attribute} rel_velocity :canonical: simvx.core.physics.world2d.ContactEvent2D.rel_velocity :type: simvx.core.math.Vec2 :value: > None ```{autodoc2-docstring} simvx.core.physics.world2d.ContactEvent2D.rel_velocity ``` ```` ````` `````{py:class} OverlapEvent2D :canonical: simvx.core.physics.world2d.OverlapEvent2D ```{autodoc2-docstring} simvx.core.physics.world2d.OverlapEvent2D ``` ````{py:attribute} sensor :canonical: simvx.core.physics.world2d.OverlapEvent2D.sensor :type: simvx.core.physics.world2d.BodyHandle :value: > None ```{autodoc2-docstring} simvx.core.physics.world2d.OverlapEvent2D.sensor ``` ```` ````{py:attribute} other :canonical: simvx.core.physics.world2d.OverlapEvent2D.other :type: simvx.core.physics.world2d.BodyHandle :value: > None ```{autodoc2-docstring} simvx.core.physics.world2d.OverlapEvent2D.other ``` ```` ````{py:attribute} phase :canonical: simvx.core.physics.world2d.OverlapEvent2D.phase :type: simvx.core.physics.world.ContactPhase :value: > None ```{autodoc2-docstring} simvx.core.physics.world2d.OverlapEvent2D.phase ``` ```` ````` `````{py:class} CharacterMoveResult2D :canonical: simvx.core.physics.world2d.CharacterMoveResult2D ```{autodoc2-docstring} simvx.core.physics.world2d.CharacterMoveResult2D ``` ````{py:attribute} velocity :canonical: simvx.core.physics.world2d.CharacterMoveResult2D.velocity :type: simvx.core.math.Vec2 :value: > None ```{autodoc2-docstring} simvx.core.physics.world2d.CharacterMoveResult2D.velocity ``` ```` ````{py:attribute} on_floor :canonical: simvx.core.physics.world2d.CharacterMoveResult2D.on_floor :type: bool :value: > None ```{autodoc2-docstring} simvx.core.physics.world2d.CharacterMoveResult2D.on_floor ``` ```` ````{py:attribute} on_wall :canonical: simvx.core.physics.world2d.CharacterMoveResult2D.on_wall :type: bool :value: > None ```{autodoc2-docstring} simvx.core.physics.world2d.CharacterMoveResult2D.on_wall ``` ```` ````{py:attribute} on_ceiling :canonical: simvx.core.physics.world2d.CharacterMoveResult2D.on_ceiling :type: bool :value: > None ```{autodoc2-docstring} simvx.core.physics.world2d.CharacterMoveResult2D.on_ceiling ``` ```` ````{py:attribute} floor_normal :canonical: simvx.core.physics.world2d.CharacterMoveResult2D.floor_normal :type: simvx.core.math.Vec2 :value: > None ```{autodoc2-docstring} simvx.core.physics.world2d.CharacterMoveResult2D.floor_normal ``` ```` ````` `````{py:class} Physics2DWorld(*, gravity: simvx.core.math.Vec2) :canonical: simvx.core.physics.world2d.Physics2DWorld Bases: {py:obj}`abc.ABC` ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld ``` ```{rubric} Initialization ``` ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.__init__ ``` ````{py:property} gravity :canonical: simvx.core.physics.world2d.Physics2DWorld.gravity :type: simvx.core.math.Vec2 ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.gravity ``` ```` ````{py:method} capabilities() -> frozenset[simvx.core.physics.capability.Capability] :canonical: simvx.core.physics.world2d.Physics2DWorld.capabilities ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.capabilities ``` ```` ````{py:method} create_circle(radius: float) -> simvx.core.physics.world2d.ShapeHandle :canonical: simvx.core.physics.world2d.Physics2DWorld.create_circle :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.create_circle ``` ```` ````{py:method} create_box(half_extents: simvx.core.math.Vec2) -> simvx.core.physics.world2d.ShapeHandle :canonical: simvx.core.physics.world2d.Physics2DWorld.create_box :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.create_box ``` ```` ````{py:method} create_capsule(radius: float, height: float) -> simvx.core.physics.world2d.ShapeHandle :canonical: simvx.core.physics.world2d.Physics2DWorld.create_capsule :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.create_capsule ``` ```` ````{py:method} create_segment(a: simvx.core.math.Vec2, b: simvx.core.math.Vec2, radius: float = 0.0) -> simvx.core.physics.world2d.ShapeHandle :canonical: simvx.core.physics.world2d.Physics2DWorld.create_segment :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.create_segment ``` ```` ````{py:method} create_convex_polygon(points: numpy.ndarray) -> simvx.core.physics.world2d.ShapeHandle :canonical: simvx.core.physics.world2d.Physics2DWorld.create_convex_polygon :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.create_convex_polygon ``` ```` ````{py:method} create_concave_polygon(segments: numpy.ndarray) -> simvx.core.physics.world2d.ShapeHandle :canonical: simvx.core.physics.world2d.Physics2DWorld.create_concave_polygon :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.create_concave_polygon ``` ```` ````{py:method} create_body(shape: simvx.core.physics.world2d.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.world2d.BodyHandle :canonical: simvx.core.physics.world2d.Physics2DWorld.create_body :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.create_body ``` ```` ````{py:method} destroy_body(handle: simvx.core.physics.world2d.BodyHandle) -> None :canonical: simvx.core.physics.world2d.Physics2DWorld.destroy_body :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.destroy_body ``` ```` ````{py:method} set_body_transform(handle: simvx.core.physics.world2d.BodyHandle, transform: typing.Any) -> None :canonical: simvx.core.physics.world2d.Physics2DWorld.set_body_transform :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.set_body_transform ``` ```` ````{py:method} set_body_velocity(handle: simvx.core.physics.world2d.BodyHandle, linear: simvx.core.math.Vec2, angular: float = 0.0) -> None :canonical: simvx.core.physics.world2d.Physics2DWorld.set_body_velocity :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.set_body_velocity ``` ```` ````{py:method} set_body_mode(handle: simvx.core.physics.world2d.BodyHandle, mode: simvx.core.physics.world.BodyMode) -> None :canonical: simvx.core.physics.world2d.Physics2DWorld.set_body_mode :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.set_body_mode ``` ```` ````{py:method} body_velocity(handle: simvx.core.physics.world2d.BodyHandle) -> tuple[simvx.core.math.Vec2, float] :canonical: simvx.core.physics.world2d.Physics2DWorld.body_velocity :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.body_velocity ``` ```` ````{py:method} body_transform(handle: simvx.core.physics.world2d.BodyHandle) -> tuple[simvx.core.math.Vec2, float] :canonical: simvx.core.physics.world2d.Physics2DWorld.body_transform :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.body_transform ``` ```` ````{py:method} sleeping(handle: simvx.core.physics.world2d.BodyHandle) -> bool :canonical: simvx.core.physics.world2d.Physics2DWorld.sleeping :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.sleeping ``` ```` ````{py:method} apply_impulse(handle: simvx.core.physics.world2d.BodyHandle, impulse: simvx.core.math.Vec2, *, at: simvx.core.math.Vec2 | None = None, angular: float = 0.0) -> None :canonical: simvx.core.physics.world2d.Physics2DWorld.apply_impulse :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.apply_impulse ``` ```` ````{py:method} apply_force(handle: simvx.core.physics.world2d.BodyHandle, force: simvx.core.math.Vec2, *, at: simvx.core.math.Vec2 | None = None) -> None :canonical: simvx.core.physics.world2d.Physics2DWorld.apply_force :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.apply_force ``` ```` ````{py:method} apply_torque(handle: simvx.core.physics.world2d.BodyHandle, torque: float) -> None :canonical: simvx.core.physics.world2d.Physics2DWorld.apply_torque :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.apply_torque ``` ```` ````{py:method} create_fixed_joint(a: simvx.core.physics.world2d.BodyHandle, b: simvx.core.physics.world2d.BodyHandle) -> simvx.core.physics.world2d.JointHandle :canonical: simvx.core.physics.world2d.Physics2DWorld.create_fixed_joint :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.create_fixed_joint ``` ```` ````{py:method} create_pin_joint(a: simvx.core.physics.world2d.BodyHandle, b: simvx.core.physics.world2d.BodyHandle, anchor: simvx.core.math.Vec2) -> simvx.core.physics.world2d.JointHandle :canonical: simvx.core.physics.world2d.Physics2DWorld.create_pin_joint :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.create_pin_joint ``` ```` ````{py:method} create_hinge_joint(a: simvx.core.physics.world2d.BodyHandle, b: simvx.core.physics.world2d.BodyHandle, anchor: simvx.core.math.Vec2) -> simvx.core.physics.world2d.JointHandle :canonical: simvx.core.physics.world2d.Physics2DWorld.create_hinge_joint :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.create_hinge_joint ``` ```` ````{py:method} create_spring_joint(a: simvx.core.physics.world2d.BodyHandle, b: simvx.core.physics.world2d.BodyHandle, rest_length: float, stiffness: float, damping: float) -> simvx.core.physics.world2d.JointHandle :canonical: simvx.core.physics.world2d.Physics2DWorld.create_spring_joint :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.create_spring_joint ``` ```` ````{py:method} create_groove_joint(a: simvx.core.physics.world2d.BodyHandle, b: simvx.core.physics.world2d.BodyHandle, groove_a: simvx.core.math.Vec2, groove_b: simvx.core.math.Vec2, anchor_b: simvx.core.math.Vec2) -> simvx.core.physics.world2d.JointHandle :canonical: simvx.core.physics.world2d.Physics2DWorld.create_groove_joint :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.create_groove_joint ``` ```` ````{py:method} remove_joint(handle: simvx.core.physics.world2d.JointHandle) -> None :canonical: simvx.core.physics.world2d.Physics2DWorld.remove_joint :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.remove_joint ``` ```` ````{py:property} body_count :canonical: simvx.core.physics.world2d.Physics2DWorld.body_count :abstractmethod: :type: int ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.body_count ``` ```` ````{py:method} clear() -> None :canonical: simvx.core.physics.world2d.Physics2DWorld.clear :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.clear ``` ```` ````{py:method} step(dt: float) -> None :canonical: simvx.core.physics.world2d.Physics2DWorld.step :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.step ``` ```` ````{py:method} drain_contact_events() -> list[simvx.core.physics.world2d.ContactEvent2D] :canonical: simvx.core.physics.world2d.Physics2DWorld.drain_contact_events :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.drain_contact_events ``` ```` ````{py:method} drain_overlap_events() -> list[simvx.core.physics.world2d.OverlapEvent2D] :canonical: simvx.core.physics.world2d.Physics2DWorld.drain_overlap_events :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.drain_overlap_events ``` ```` ````{py:method} set_one_way(handle: simvx.core.physics.world2d.BodyHandle, enabled: bool, normal: simvx.core.math.Vec2 = _DEFAULT_UP_2D) -> None :canonical: simvx.core.physics.world2d.Physics2DWorld.set_one_way :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.set_one_way ``` ```` ````{py:method} register_bodies(handles: list[simvx.core.physics.world2d.BodyHandle]) -> None :canonical: simvx.core.physics.world2d.Physics2DWorld.register_bodies :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.register_bodies ``` ```` ````{py:method} read_transforms(out: numpy.ndarray) -> None :canonical: simvx.core.physics.world2d.Physics2DWorld.read_transforms :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.read_transforms ``` ```` ````{py:method} read_velocities(out: numpy.ndarray) -> None :canonical: simvx.core.physics.world2d.Physics2DWorld.read_velocities :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.read_velocities ``` ```` ````{py:method} raycast(origin: simvx.core.math.Vec2, direction: simvx.core.math.Vec2, max_dist: float, *, mask: int = 4294967295) -> simvx.core.physics.world2d.RaycastHit2D | None :canonical: simvx.core.physics.world2d.Physics2DWorld.raycast :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.raycast ``` ```` ````{py:method} raycast_all(origin: simvx.core.math.Vec2, direction: simvx.core.math.Vec2, max_dist: float, *, mask: int = 4294967295) -> list[simvx.core.physics.world2d.RaycastHit2D] :canonical: simvx.core.physics.world2d.Physics2DWorld.raycast_all :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.raycast_all ``` ```` ````{py:method} shapecast(shape: simvx.core.physics.world2d.ShapeHandle, origin: simvx.core.math.Vec2, direction: simvx.core.math.Vec2, max_dist: float, *, mask: int = 4294967295) -> simvx.core.physics.world2d.Contact2D | None :canonical: simvx.core.physics.world2d.Physics2DWorld.shapecast :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.shapecast ``` ```` ````{py:method} overlap(shape: simvx.core.physics.world2d.ShapeHandle, transform: typing.Any, *, mask: int = 4294967295) -> list[simvx.core.physics.world2d.BodyHandle] :canonical: simvx.core.physics.world2d.Physics2DWorld.overlap :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.overlap ``` ```` ````{py:method} move_and_collide(handle: simvx.core.physics.world2d.BodyHandle, motion: simvx.core.math.Vec2) -> simvx.core.physics.world2d.Contact2D | None :canonical: simvx.core.physics.world2d.Physics2DWorld.move_and_collide :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.move_and_collide ``` ```` ````{py:method} create_character(shape: simvx.core.physics.world2d.ShapeHandle, transform: typing.Any, *, up: simvx.core.math.Vec2 = _DEFAULT_UP_2D, 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.world2d.CharacterHandle :canonical: simvx.core.physics.world2d.Physics2DWorld.create_character :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.create_character ``` ```` ````{py:method} destroy_character(handle: simvx.core.physics.world2d.CharacterHandle) -> None :canonical: simvx.core.physics.world2d.Physics2DWorld.destroy_character :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.destroy_character ``` ```` ````{py:method} set_character_transform(handle: simvx.core.physics.world2d.CharacterHandle, transform: typing.Any) -> None :canonical: simvx.core.physics.world2d.Physics2DWorld.set_character_transform :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.set_character_transform ``` ```` ````{py:method} character_transform(handle: simvx.core.physics.world2d.CharacterHandle) -> tuple[simvx.core.math.Vec2, float] :canonical: simvx.core.physics.world2d.Physics2DWorld.character_transform :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.character_transform ``` ```` ````{py:method} character_move_and_slide(handle: simvx.core.physics.world2d.CharacterHandle, velocity: simvx.core.math.Vec2, dt: float, *, up: simvx.core.math.Vec2, max_slides: int = 4) -> simvx.core.physics.world2d.CharacterMoveResult2D :canonical: simvx.core.physics.world2d.Physics2DWorld.character_move_and_slide :abstractmethod: ```{autodoc2-docstring} simvx.core.physics.world2d.Physics2DWorld.character_move_and_slide ``` ```` ````{py:attribute} __slots__ :canonical: simvx.core.physics.world2d.Physics2DWorld.__slots__ :value: > () ```` ````` ````{py:data} __all__ :canonical: simvx.core.physics.world2d.__all__ :value: > ['BodyMode', 'Capability', 'CombineMode', 'PhysicsMaterial', 'ContactPhase', 'RaycastHit2D', 'Contac... ```{autodoc2-docstring} simvx.core.physics.world2d.__all__ ``` ````