Source code for bascenev1._collision

# Released under the MIT License. See LICENSE for details.
#
"""Collision related functionality."""

from __future__ import annotations

from typing import TYPE_CHECKING

import babase
import _bascenev1

if TYPE_CHECKING:
    import bascenev1


[docs] class Collision: """A class providing info about occurring collisions.""" @property def position(self) -> bascenev1.Vec3: """The position of the current collision.""" return babase.Vec3(_bascenev1.get_collision_info('position')) @property def sourcenode(self) -> bascenev1.Node: """The node containing the material triggering the current callback. Throws a :class:`~babase.NodeNotFoundError` if the node does not exist, though the node should always exist (at least at the start of the collision callback). """ node = _bascenev1.get_collision_info('sourcenode') assert isinstance(node, (_bascenev1.Node, type(None))) if not node: raise babase.NodeNotFoundError() return node @property def opposingnode(self) -> bascenev1.Node: """The node the current callback material node is hitting. Throws a :class:`~babase.NodeNotFoundError` if the node does not exist. This can be expected in some cases such as in 'disconnect' callbacks triggered by deleting a currently-colliding node. """ node = _bascenev1.get_collision_info('opposingnode') assert isinstance(node, (_bascenev1.Node, type(None))) if not node: raise babase.NodeNotFoundError() return node @property def opposingbody(self) -> int: """The body index on the opposing node in the current collision.""" body = _bascenev1.get_collision_info('opposingbody') assert isinstance(body, int) return body
# Simply recycle one instance... _collision = Collision()
[docs] def getcollision() -> Collision: """Return the in-progress collision.""" return _collision
# Docs-generation hack; import some stuff that we likely only forward-declared # in our actual source code so that docs tools can find it. from typing import (Coroutine, Any, Literal, Callable, Generator, Awaitable, Sequence, Self) import asyncio from concurrent.futures import Future from pathlib import Path from enum import Enum