"""
Physics forces submodule
"""
from __future__ import annotations
import basilisk
import glm
import typing
__all__: list[str] = ['Contact', 'Edges', 'FeaturePair', 'Force', 'Joint', 'Manifold', 'Motor', 'Spring']
class Contact:
    C0: glm.vec2
    feature: ...
    normal: glm.vec2
    rA: glm.vec2
    rB: glm.vec2
    stick: bool
class Edges:
    inEdge1: str
    inEdge2: str
    outEdge1: str
    outEdge2: str
class FeaturePair:
    e: ...
    @property
    def value(self) -> int:
        ...
    @value.setter
    def value(self, arg0: typing.SupportsInt) -> None:
        ...
class Force:
    def disable(self) -> None:
        ...
class Joint(Force):
    def __init__(self, solver: basilisk.Solver, bodyA: basilisk.Rigid, bodyB: basilisk.Rigid, rA: glm.vec2, rB: glm.vec2, stiffness: glm.vec3 = ..., fracture: typing.SupportsFloat = ...) -> None:
        ...
    def getC0(self) -> glm.vec3:
        ...
    def getRA(self) -> glm.vec2:
        ...
    def getRB(self) -> glm.vec2:
        ...
    def getRestAngle(self) -> float:
        ...
    def getTorqueArm(self) -> float:
        ...
    def setC0(self, arg0: glm.vec3) -> None:
        ...
    def setRA(self, arg0: glm.vec2) -> None:
        ...
    def setRB(self, arg0: glm.vec2) -> None:
        ...
    def setRestAngle(self, arg0: typing.SupportsFloat) -> None:
        ...
    def setTorqueArm(self, arg0: typing.SupportsFloat) -> None:
        ...
class Manifold(Force):
    @staticmethod
    def collide(bodyA: basilisk.Rigid, bodyB: basilisk.Rigid, contacts: Contact) -> int:
        ...
    def __init__(self, solver: basilisk.Solver, bodyA: basilisk.Rigid, bodyB: basilisk.Rigid) -> None:
        ...
    def getContact(self, arg0: typing.SupportsInt) -> Contact:
        ...
    def getContactRef(self, arg0: typing.SupportsInt) -> Contact:
        ...
    def getFriction(self) -> float:
        ...
    def getNumContacts(self) -> int:
        ...
class Motor(Force):
    def __init__(self, solver: basilisk.Solver, bodyA: basilisk.Rigid, bodyB: basilisk.Rigid, speed: typing.SupportsFloat, maxTorque: typing.SupportsFloat) -> None:
        ...
    def getSpeed(self) -> float:
        ...
    def setSpeed(self, arg0: typing.SupportsFloat) -> None:
        ...
class Spring(Force):
    def __init__(self, solver: basilisk.Solver, bodyA: basilisk.Rigid, bodyB: basilisk.Rigid, rA: glm.vec2, rB: glm.vec2, stiffness: typing.SupportsFloat, rest: typing.SupportsFloat = -1.0) -> None:
        ...
    def getRA(self) -> glm.vec2:
        ...
    def getRB(self) -> glm.vec2:
        ...
    def getRest(self) -> float:
        ...
    def setRA(self, arg0: glm.vec2) -> None:
        ...
    def setRB(self, arg0: glm.vec2) -> None:
        ...
    def setRest(self, arg0: typing.SupportsFloat) -> None:
        ...
