simvx.core.physics_nodes¶

Physics/collision nodes: CharacterBody, CollisionShape, Area, ShapeCast (2D and 3D).

Module Contents¶

Classes¶

CharacterBody2D

2D node with velocity, movement, and collision response.

CollisionShape2D

Circle collision shape. Attach as child of a CharacterBody2D.

Area2D

2D trigger zone that detects overlapping bodies and areas.

CharacterBody3D

3D node with velocity, movement, and collision response.

CollisionShape3D

Sphere collision shape. Attach as child of a CharacterBody3D.

Area3D

3D trigger zone that detects overlapping bodies and areas.

ShapeCast2D

Swept shape query node for 2D. Like a thick raycast.

ShapeCast3D

Swept shape query node for 3D. Like a thick raycast.

API¶

class simvx.core.physics_nodes.CharacterBody2D(collision=None, **kwargs)¶

Bases: simvx.core.physics_nodes._CharacterBodyBase, simvx.core.nodes_2d.Node2D

2D node with velocity, movement, and collision response.

Uses circle-circle collision via CollisionShape2D children. Screen coordinates: Y-down, so floor normal defaults to (0, -1).

Initialization

collision_layer¶

‘Property(…)’

collision_mask¶

‘Property(…)’

max_slides¶

‘Property(…)’

move_and_slide(dt: float = 1.0)¶

Apply velocity with collision response. Resolves overlaps and slides along surfaces.

get_overlapping(group: str = None, body_type: type = None) list[simvx.core.physics_nodes.CharacterBody2D]¶

Find all CharacterBody2D nodes whose collision overlaps ours.

is_on_floor() bool¶
is_on_wall() bool¶
is_on_ceiling() bool¶
z_index¶

‘Property(…)’

z_as_relative¶

‘Property(…)’

property absolute_z_index: int¶
property position: simvx.core.math.types.Vec2¶
property rotation: float¶
property rotation_degrees: float¶
property scale: simvx.core.math.types.Vec2¶
property global_position: simvx.core.math.types.Vec2¶
property global_rotation: float¶
property global_scale: simvx.core.math.types.Vec2¶
property forward: simvx.core.math.types.Vec2¶
property right: simvx.core.math.types.Vec2¶
translate(offset: tuple[float, float] | numpy.ndarray)¶
rotate(radians: float)¶
rotate_deg(degrees: float)¶
look_at(target: tuple[float, float] | numpy.ndarray)¶
transform_points(points: list[simvx.core.math.types.Vec2]) list[simvx.core.math.types.Vec2]¶
draw_polygon(renderer, points: list[simvx.core.math.types.Vec2], closed=True, color=None)¶
wrap_screen(margin: float = 20)¶
script_error_raised¶

‘Signal(…)’

classmethod __init_subclass__(**kwargs)¶
property name: str¶
property process_mode: simvx.core.descriptors.ProcessMode¶
reset_error() None¶
add_child(node: simvx.core.node.Node) simvx.core.node.Node¶
remove_child(node: simvx.core.node.Node)¶
reparent(new_parent: simvx.core.node.Node)¶
get_node(path: str) simvx.core.node.Node¶
find_child(name: str, recursive: bool = False) simvx.core.node.Node | None¶
find(node_type: type) simvx.core.node.Node | None¶
find_all(node_type: type, recursive: bool = True) list¶
property path: str¶
add_to_group(group: str)¶
remove_from_group(group: str)¶
is_in_group(group: str) bool¶
ready() None¶
enter_tree() None¶
exit_tree() None¶
process(dt: float) None¶
physics_process(dt: float) None¶
draw(renderer) None¶
input_event(event: simvx.core.events.InputEvent) None¶
input(event: simvx.core.events.TreeInputEvent) None¶
unhandled_input(event: simvx.core.events.TreeInputEvent) None¶
start_coroutine(gen: simvx.core.descriptors.Coroutine) simvx.core.descriptors.CoroutineHandle¶
stop_coroutine(gen_or_handle)¶
destroy()¶
queue_free¶

None

property tree: simvx.core.scene_tree.SceneTree¶
get_tree() simvx.core.scene_tree.SceneTree¶
__getitem__(key: str)¶
classmethod get_properties() dict[str, simvx.core.descriptors.Property]¶
get_settings¶

None

__repr__()¶
class simvx.core.physics_nodes.CollisionShape2D(position=None, rotation: float = 0.0, scale=None, **kwargs)¶

Bases: simvx.core.physics_nodes._CollisionShapeBase, simvx.core.nodes_2d.Node2D

Circle collision shape. Attach as child of a CharacterBody2D.

Initialization

radius¶

‘Property(…)’

overlaps(other: simvx.core.physics_nodes.CollisionShape2D) bool¶

Test circle-circle overlap with another collision shape.

overlaps_point(point: tuple[float, float] | numpy.ndarray) bool¶

Test if a point is inside this circle.

z_index¶

‘Property(…)’

z_as_relative¶

‘Property(…)’

property absolute_z_index: int¶
property position: simvx.core.math.types.Vec2¶
property rotation: float¶
property rotation_degrees: float¶
property scale: simvx.core.math.types.Vec2¶
property global_position: simvx.core.math.types.Vec2¶
property global_rotation: float¶
property global_scale: simvx.core.math.types.Vec2¶
property forward: simvx.core.math.types.Vec2¶
property right: simvx.core.math.types.Vec2¶
translate(offset: tuple[float, float] | numpy.ndarray)¶
rotate(radians: float)¶
rotate_deg(degrees: float)¶
look_at(target: tuple[float, float] | numpy.ndarray)¶
transform_points(points: list[simvx.core.math.types.Vec2]) list[simvx.core.math.types.Vec2]¶
draw_polygon(renderer, points: list[simvx.core.math.types.Vec2], closed=True, color=None)¶
wrap_screen(margin: float = 20)¶
script_error_raised¶

‘Signal(…)’

classmethod __init_subclass__(**kwargs)¶
property name: str¶
property process_mode: simvx.core.descriptors.ProcessMode¶
reset_error() None¶
add_child(node: simvx.core.node.Node) simvx.core.node.Node¶
remove_child(node: simvx.core.node.Node)¶
reparent(new_parent: simvx.core.node.Node)¶
get_node(path: str) simvx.core.node.Node¶
find_child(name: str, recursive: bool = False) simvx.core.node.Node | None¶
find(node_type: type) simvx.core.node.Node | None¶
find_all(node_type: type, recursive: bool = True) list¶
property path: str¶
add_to_group(group: str)¶
remove_from_group(group: str)¶
is_in_group(group: str) bool¶
ready() None¶
enter_tree() None¶
exit_tree() None¶
process(dt: float) None¶
physics_process(dt: float) None¶
draw(renderer) None¶
input_event(event: simvx.core.events.InputEvent) None¶
input(event: simvx.core.events.TreeInputEvent) None¶
unhandled_input(event: simvx.core.events.TreeInputEvent) None¶
start_coroutine(gen: simvx.core.descriptors.Coroutine) simvx.core.descriptors.CoroutineHandle¶
stop_coroutine(gen_or_handle)¶
destroy()¶
queue_free¶

None

property tree: simvx.core.scene_tree.SceneTree¶
get_tree() simvx.core.scene_tree.SceneTree¶
__getitem__(key: str)¶
classmethod get_properties() dict[str, simvx.core.descriptors.Property]¶
get_settings¶

None

__repr__()¶
class simvx.core.physics_nodes.Area2D(**kwargs)¶

Bases: simvx.core.physics_nodes._AreaBase, simvx.core.nodes_2d.Node2D

2D trigger zone that detects overlapping bodies and areas.

Add CollisionShape2D children to define the detection region. Emits body_entered/body_exited when CharacterBody2D nodes overlap, and area_entered/area_exited for other Area2D nodes.

Initialization

collision_layer¶

‘Property(…)’

collision_mask¶

‘Property(…)’

monitoring¶

‘Property(…)’

physics_process(dt: float)¶
get_overlapping_bodies() list¶
get_overlapping_areas() list¶
has_overlapping_bodies() bool¶
has_overlapping_areas() bool¶
z_index¶

‘Property(…)’

z_as_relative¶

‘Property(…)’

property absolute_z_index: int¶
property position: simvx.core.math.types.Vec2¶
property rotation: float¶
property rotation_degrees: float¶
property scale: simvx.core.math.types.Vec2¶
property global_position: simvx.core.math.types.Vec2¶
property global_rotation: float¶
property global_scale: simvx.core.math.types.Vec2¶
property forward: simvx.core.math.types.Vec2¶
property right: simvx.core.math.types.Vec2¶
translate(offset: tuple[float, float] | numpy.ndarray)¶
rotate(radians: float)¶
rotate_deg(degrees: float)¶
look_at(target: tuple[float, float] | numpy.ndarray)¶
transform_points(points: list[simvx.core.math.types.Vec2]) list[simvx.core.math.types.Vec2]¶
draw_polygon(renderer, points: list[simvx.core.math.types.Vec2], closed=True, color=None)¶
wrap_screen(margin: float = 20)¶
script_error_raised¶

‘Signal(…)’

classmethod __init_subclass__(**kwargs)¶
property name: str¶
property process_mode: simvx.core.descriptors.ProcessMode¶
reset_error() None¶
add_child(node: simvx.core.node.Node) simvx.core.node.Node¶
remove_child(node: simvx.core.node.Node)¶
reparent(new_parent: simvx.core.node.Node)¶
get_node(path: str) simvx.core.node.Node¶
find_child(name: str, recursive: bool = False) simvx.core.node.Node | None¶
find(node_type: type) simvx.core.node.Node | None¶
find_all(node_type: type, recursive: bool = True) list¶
property path: str¶
add_to_group(group: str)¶
remove_from_group(group: str)¶
is_in_group(group: str) bool¶
ready() None¶
enter_tree() None¶
exit_tree() None¶
process(dt: float) None¶
draw(renderer) None¶
input_event(event: simvx.core.events.InputEvent) None¶
input(event: simvx.core.events.TreeInputEvent) None¶
unhandled_input(event: simvx.core.events.TreeInputEvent) None¶
start_coroutine(gen: simvx.core.descriptors.Coroutine) simvx.core.descriptors.CoroutineHandle¶
stop_coroutine(gen_or_handle)¶
destroy()¶
queue_free¶

None

property tree: simvx.core.scene_tree.SceneTree¶
get_tree() simvx.core.scene_tree.SceneTree¶
__getitem__(key: str)¶
classmethod get_properties() dict[str, simvx.core.descriptors.Property]¶
get_settings¶

None

__repr__()¶
class simvx.core.physics_nodes.CharacterBody3D(collision=None, **kwargs)¶

Bases: simvx.core.physics_nodes._CharacterBodyBase, simvx.core.nodes_3d.Node3D

3D node with velocity, movement, and collision response.

Uses sphere-sphere collision via CollisionShape3D children. Y-up convention: floor normal defaults to (0, 1, 0).

Initialization

collision_layer¶

‘Property(…)’

collision_mask¶

‘Property(…)’

max_slides¶

‘Property(…)’

move_and_slide(dt: float = 1.0)¶

Apply velocity with collision response. Resolves overlaps and slides along surfaces.

get_overlapping(group: str = None, body_type: type = None) list[simvx.core.physics_nodes.CharacterBody3D]¶
is_on_floor() bool¶
is_on_wall() bool¶
is_on_ceiling() bool¶
property position¶
property rotation: simvx.core.math.types.Quat¶
property scale¶
property rotation_degrees: simvx.core.math.types.Vec3¶
property global_position: simvx.core.math.types.Vec3¶
property global_rotation: simvx.core.math.types.Quat¶
property global_scale: simvx.core.math.types.Vec3¶
property forward: simvx.core.math.types.Vec3¶
property right: simvx.core.math.types.Vec3¶
property up: simvx.core.math.types.Vec3¶
translate(offset: tuple[float, float, float] | numpy.ndarray)¶
translate_global(offset: tuple[float, float, float] | numpy.ndarray)¶
rotate(axis: tuple[float, float, float] | numpy.ndarray, angle: float)¶
rotate_x(angle: float)¶
rotate_y(angle: float)¶
rotate_z(angle: float)¶
look_at(target: tuple[float, float, float] | numpy.ndarray, up=None)¶
wrap_bounds(bounds: tuple[float, float, float] | numpy.ndarray, margin: float = 1.0)¶
script_error_raised¶

‘Signal(…)’

classmethod __init_subclass__(**kwargs)¶
property name: str¶
property process_mode: simvx.core.descriptors.ProcessMode¶
reset_error() None¶
add_child(node: simvx.core.node.Node) simvx.core.node.Node¶
remove_child(node: simvx.core.node.Node)¶
reparent(new_parent: simvx.core.node.Node)¶
get_node(path: str) simvx.core.node.Node¶
find_child(name: str, recursive: bool = False) simvx.core.node.Node | None¶
find(node_type: type) simvx.core.node.Node | None¶
find_all(node_type: type, recursive: bool = True) list¶
property path: str¶
add_to_group(group: str)¶
remove_from_group(group: str)¶
is_in_group(group: str) bool¶
ready() None¶
enter_tree() None¶
exit_tree() None¶
process(dt: float) None¶
physics_process(dt: float) None¶
draw(renderer) None¶
input_event(event: simvx.core.events.InputEvent) None¶
input(event: simvx.core.events.TreeInputEvent) None¶
unhandled_input(event: simvx.core.events.TreeInputEvent) None¶
start_coroutine(gen: simvx.core.descriptors.Coroutine) simvx.core.descriptors.CoroutineHandle¶
stop_coroutine(gen_or_handle)¶
destroy()¶
queue_free¶

None

property tree: simvx.core.scene_tree.SceneTree¶
get_tree() simvx.core.scene_tree.SceneTree¶
__getitem__(key: str)¶
classmethod get_properties() dict[str, simvx.core.descriptors.Property]¶
get_settings¶

None

__repr__()¶
class simvx.core.physics_nodes.CollisionShape3D(position=None, rotation=None, scale=None, **kwargs)¶

Bases: simvx.core.physics_nodes._CollisionShapeBase, simvx.core.nodes_3d.Node3D

Sphere collision shape. Attach as child of a CharacterBody3D.

Initialization

radius¶

‘Property(…)’

pickable¶

‘Property(…)’

overlaps(other: simvx.core.physics_nodes.CollisionShape3D) bool¶
overlaps_point(point: tuple[float, float, float] | numpy.ndarray) bool¶
property position¶
property rotation: simvx.core.math.types.Quat¶
property scale¶
property rotation_degrees: simvx.core.math.types.Vec3¶
property global_position: simvx.core.math.types.Vec3¶
property global_rotation: simvx.core.math.types.Quat¶
property global_scale: simvx.core.math.types.Vec3¶
property forward: simvx.core.math.types.Vec3¶
property right: simvx.core.math.types.Vec3¶
property up: simvx.core.math.types.Vec3¶
translate(offset: tuple[float, float, float] | numpy.ndarray)¶
translate_global(offset: tuple[float, float, float] | numpy.ndarray)¶
rotate(axis: tuple[float, float, float] | numpy.ndarray, angle: float)¶
rotate_x(angle: float)¶
rotate_y(angle: float)¶
rotate_z(angle: float)¶
look_at(target: tuple[float, float, float] | numpy.ndarray, up=None)¶
wrap_bounds(bounds: tuple[float, float, float] | numpy.ndarray, margin: float = 1.0)¶
script_error_raised¶

‘Signal(…)’

classmethod __init_subclass__(**kwargs)¶
property name: str¶
property process_mode: simvx.core.descriptors.ProcessMode¶
reset_error() None¶
add_child(node: simvx.core.node.Node) simvx.core.node.Node¶
remove_child(node: simvx.core.node.Node)¶
reparent(new_parent: simvx.core.node.Node)¶
get_node(path: str) simvx.core.node.Node¶
find_child(name: str, recursive: bool = False) simvx.core.node.Node | None¶
find(node_type: type) simvx.core.node.Node | None¶
find_all(node_type: type, recursive: bool = True) list¶
property path: str¶
add_to_group(group: str)¶
remove_from_group(group: str)¶
is_in_group(group: str) bool¶
ready() None¶
enter_tree() None¶
exit_tree() None¶
process(dt: float) None¶
physics_process(dt: float) None¶
draw(renderer) None¶
input_event(event: simvx.core.events.InputEvent) None¶
input(event: simvx.core.events.TreeInputEvent) None¶
unhandled_input(event: simvx.core.events.TreeInputEvent) None¶
start_coroutine(gen: simvx.core.descriptors.Coroutine) simvx.core.descriptors.CoroutineHandle¶
stop_coroutine(gen_or_handle)¶
destroy()¶
queue_free¶

None

property tree: simvx.core.scene_tree.SceneTree¶
get_tree() simvx.core.scene_tree.SceneTree¶
__getitem__(key: str)¶
classmethod get_properties() dict[str, simvx.core.descriptors.Property]¶
get_settings¶

None

__repr__()¶
class simvx.core.physics_nodes.Area3D(**kwargs)¶

Bases: simvx.core.physics_nodes._AreaBase, simvx.core.nodes_3d.Node3D

3D trigger zone that detects overlapping bodies and areas.

Add CollisionShape3D children to define the detection region. Emits body_entered/body_exited when CharacterBody3D nodes overlap, and area_entered/area_exited for other Area3D nodes.

Initialization

collision_layer¶

‘Property(…)’

collision_mask¶

‘Property(…)’

monitoring¶

‘Property(…)’

physics_process(dt: float)¶
get_overlapping_bodies() list¶
get_overlapping_areas() list¶
has_overlapping_bodies() bool¶
has_overlapping_areas() bool¶
property position¶
property rotation: simvx.core.math.types.Quat¶
property scale¶
property rotation_degrees: simvx.core.math.types.Vec3¶
property global_position: simvx.core.math.types.Vec3¶
property global_rotation: simvx.core.math.types.Quat¶
property global_scale: simvx.core.math.types.Vec3¶
property forward: simvx.core.math.types.Vec3¶
property right: simvx.core.math.types.Vec3¶
property up: simvx.core.math.types.Vec3¶
translate(offset: tuple[float, float, float] | numpy.ndarray)¶
translate_global(offset: tuple[float, float, float] | numpy.ndarray)¶
rotate(axis: tuple[float, float, float] | numpy.ndarray, angle: float)¶
rotate_x(angle: float)¶
rotate_y(angle: float)¶
rotate_z(angle: float)¶
look_at(target: tuple[float, float, float] | numpy.ndarray, up=None)¶
wrap_bounds(bounds: tuple[float, float, float] | numpy.ndarray, margin: float = 1.0)¶
script_error_raised¶

‘Signal(…)’

classmethod __init_subclass__(**kwargs)¶
property name: str¶
property process_mode: simvx.core.descriptors.ProcessMode¶
reset_error() None¶
add_child(node: simvx.core.node.Node) simvx.core.node.Node¶
remove_child(node: simvx.core.node.Node)¶
reparent(new_parent: simvx.core.node.Node)¶
get_node(path: str) simvx.core.node.Node¶
find_child(name: str, recursive: bool = False) simvx.core.node.Node | None¶
find(node_type: type) simvx.core.node.Node | None¶
find_all(node_type: type, recursive: bool = True) list¶
property path: str¶
add_to_group(group: str)¶
remove_from_group(group: str)¶
is_in_group(group: str) bool¶
ready() None¶
enter_tree() None¶
exit_tree() None¶
process(dt: float) None¶
draw(renderer) None¶
input_event(event: simvx.core.events.InputEvent) None¶
input(event: simvx.core.events.TreeInputEvent) None¶
unhandled_input(event: simvx.core.events.TreeInputEvent) None¶
start_coroutine(gen: simvx.core.descriptors.Coroutine) simvx.core.descriptors.CoroutineHandle¶
stop_coroutine(gen_or_handle)¶
destroy()¶
queue_free¶

None

property tree: simvx.core.scene_tree.SceneTree¶
get_tree() simvx.core.scene_tree.SceneTree¶
__getitem__(key: str)¶
classmethod get_properties() dict[str, simvx.core.descriptors.Property]¶
get_settings¶

None

__repr__()¶
class simvx.core.physics_nodes.ShapeCast2D(shape: simvx.core.collision.CollisionShape | None = None, **kwargs)¶

Bases: simvx.core.nodes_2d.Node2D

Swept shape query node for 2D. Like a thick raycast.

Sweeps a collision shape from this node’s global position to global_position + target_position, reporting all bodies intersected.

Initialization

target_position¶

‘Property(…)’

collision_mask¶

‘Property(…)’

max_results¶

‘Property(…)’

enabled¶

‘Property(…)’

exclude_parent¶

‘Property(…)’

margin¶

‘Property(…)’

collision_detected¶

‘Signal(…)’

property shape: simvx.core.collision.CollisionShape¶
property is_colliding: bool¶
property collision_count: int¶
get_collider(index: int = 0) Any¶
get_collision_point(index: int = 0) simvx.core.math.types.Vec2¶
get_collision_normal(index: int = 0) simvx.core.math.types.Vec2¶
get_collision_fraction(index: int = 0) float¶
force_update()¶
enter_tree()¶
exit_tree()¶
physics_process(dt: float)¶
z_index¶

‘Property(…)’

z_as_relative¶

‘Property(…)’

property absolute_z_index: int¶
property position: simvx.core.math.types.Vec2¶
property rotation: float¶
property rotation_degrees: float¶
property scale: simvx.core.math.types.Vec2¶
property global_position: simvx.core.math.types.Vec2¶
property global_rotation: float¶
property global_scale: simvx.core.math.types.Vec2¶
property forward: simvx.core.math.types.Vec2¶
property right: simvx.core.math.types.Vec2¶
translate(offset: tuple[float, float] | numpy.ndarray)¶
rotate(radians: float)¶
rotate_deg(degrees: float)¶
look_at(target: tuple[float, float] | numpy.ndarray)¶
transform_points(points: list[simvx.core.math.types.Vec2]) list[simvx.core.math.types.Vec2]¶
draw_polygon(renderer, points: list[simvx.core.math.types.Vec2], closed=True, color=None)¶
wrap_screen(margin: float = 20)¶
script_error_raised¶

‘Signal(…)’

classmethod __init_subclass__(**kwargs)¶
property name: str¶
property process_mode: simvx.core.descriptors.ProcessMode¶
reset_error() None¶
add_child(node: simvx.core.node.Node) simvx.core.node.Node¶
remove_child(node: simvx.core.node.Node)¶
reparent(new_parent: simvx.core.node.Node)¶
get_node(path: str) simvx.core.node.Node¶
find_child(name: str, recursive: bool = False) simvx.core.node.Node | None¶
find(node_type: type) simvx.core.node.Node | None¶
find_all(node_type: type, recursive: bool = True) list¶
property path: str¶
add_to_group(group: str)¶
remove_from_group(group: str)¶
is_in_group(group: str) bool¶
ready() None¶
process(dt: float) None¶
draw(renderer) None¶
input_event(event: simvx.core.events.InputEvent) None¶
input(event: simvx.core.events.TreeInputEvent) None¶
unhandled_input(event: simvx.core.events.TreeInputEvent) None¶
start_coroutine(gen: simvx.core.descriptors.Coroutine) simvx.core.descriptors.CoroutineHandle¶
stop_coroutine(gen_or_handle)¶
destroy()¶
queue_free¶

None

property tree: simvx.core.scene_tree.SceneTree¶
get_tree() simvx.core.scene_tree.SceneTree¶
__getitem__(key: str)¶
classmethod get_properties() dict[str, simvx.core.descriptors.Property]¶
get_settings¶

None

__repr__()¶
class simvx.core.physics_nodes.ShapeCast3D(shape: simvx.core.collision.CollisionShape | None = None, **kwargs)¶

Bases: simvx.core.nodes_3d.Node3D

Swept shape query node for 3D. Like a thick raycast.

Sweeps a collision shape from this node’s global position to global_position + target_position, reporting all bodies intersected.

Initialization

target_position¶

‘Property(…)’

collision_mask¶

‘Property(…)’

max_results¶

‘Property(…)’

enabled¶

‘Property(…)’

exclude_parent¶

‘Property(…)’

margin¶

‘Property(…)’

collision_detected¶

‘Signal(…)’

property shape: simvx.core.collision.CollisionShape¶
property is_colliding: bool¶
property collision_count: int¶
get_collider(index: int = 0) Any¶
get_collision_point(index: int = 0) simvx.core.math.types.Vec3¶
get_collision_normal(index: int = 0) simvx.core.math.types.Vec3¶
get_collision_fraction(index: int = 0) float¶
force_update()¶
enter_tree()¶
exit_tree()¶
physics_process(dt: float)¶
property position¶
property rotation: simvx.core.math.types.Quat¶
property scale¶
property rotation_degrees: simvx.core.math.types.Vec3¶
property global_position: simvx.core.math.types.Vec3¶
property global_rotation: simvx.core.math.types.Quat¶
property global_scale: simvx.core.math.types.Vec3¶
property forward: simvx.core.math.types.Vec3¶
property right: simvx.core.math.types.Vec3¶
property up: simvx.core.math.types.Vec3¶
translate(offset: tuple[float, float, float] | numpy.ndarray)¶
translate_global(offset: tuple[float, float, float] | numpy.ndarray)¶
rotate(axis: tuple[float, float, float] | numpy.ndarray, angle: float)¶
rotate_x(angle: float)¶
rotate_y(angle: float)¶
rotate_z(angle: float)¶
look_at(target: tuple[float, float, float] | numpy.ndarray, up=None)¶
wrap_bounds(bounds: tuple[float, float, float] | numpy.ndarray, margin: float = 1.0)¶
script_error_raised¶

‘Signal(…)’

classmethod __init_subclass__(**kwargs)¶
property name: str¶
property process_mode: simvx.core.descriptors.ProcessMode¶
reset_error() None¶
add_child(node: simvx.core.node.Node) simvx.core.node.Node¶
remove_child(node: simvx.core.node.Node)¶
reparent(new_parent: simvx.core.node.Node)¶
get_node(path: str) simvx.core.node.Node¶
find_child(name: str, recursive: bool = False) simvx.core.node.Node | None¶
find(node_type: type) simvx.core.node.Node | None¶
find_all(node_type: type, recursive: bool = True) list¶
property path: str¶
add_to_group(group: str)¶
remove_from_group(group: str)¶
is_in_group(group: str) bool¶
ready() None¶
process(dt: float) None¶
draw(renderer) None¶
input_event(event: simvx.core.events.InputEvent) None¶
input(event: simvx.core.events.TreeInputEvent) None¶
unhandled_input(event: simvx.core.events.TreeInputEvent) None¶
start_coroutine(gen: simvx.core.descriptors.Coroutine) simvx.core.descriptors.CoroutineHandle¶
stop_coroutine(gen_or_handle)¶
destroy()¶
queue_free¶

None

property tree: simvx.core.scene_tree.SceneTree¶
get_tree() simvx.core.scene_tree.SceneTree¶
__getitem__(key: str)¶
classmethod get_properties() dict[str, simvx.core.descriptors.Property]¶
get_settings¶

None

__repr__()¶