@startuml class JointBlock { - jointType : JointBlockType - jointLength : float = 1f - socketEnd1 : SocketPoint - socketEnd2 : SocketPoint - usePhysics : bool = true - jointBreakForce : float - jointBreakTorque : float + connectedBlocks : List - createdJoints : List - isPlaced : bool = false - jointPlacementHandler : JointPlacementHandler - Awake() : void + TryPlaceJoint(targetSockets:List, isGhost:bool) : bool - AlignToSockets(targetSockets:List, isGhost:bool) : void + CreatePhysicsJoint(targetObj:GameObject, socket:SocketPoint) : void - CreatePhysicsJoints(targetSockets:List) : void - CreateJointByType(connectedBody:Rigidbody, socket:SocketPoint) : Joint - CreateFixedJoint(connectedBody:Rigidbody) : FixedJoint - CreateHingeJoint(connectedBody:Rigidbody, socket:SocketPoint) : HingeJoint - CreateConfigurableJoint(connectedBody:Rigidbody, socket:SocketPoint) : ConfigurableJoint - MarkSocketsOccupied(targetSockets:List) : void + RemoveJoint() : void + GetJointType() : JointBlockType + GetSocketEnd1() : SocketPoint + GetSocketEnd2() : SocketPoint + IsPlaced() : bool } enum JointBlockType { FixedPivot, HingePivot, ConfigurablePivot, } MonoBehaviour <|-- JointBlock @enduml