@startuml class SocketPoint { + CanAccept(otherSocket:ISocket, isJoint:bool) : bool + GetNormal() : Vector3 + Highlight(state:HighlightState) : void + GetTransform() : Transform + GetSocketType() : SocketType + GetSocketRadius() : float + SetSocketRadius(radius:float) : void + IsOccupied() : bool + IsJointOccupied() : bool + GetOccupyingObject() : GameObject + GetJointObject() : GameObject + SetOccupied(obj:GameObject) : void + SetJointOccupied(jointObject:GameObject) : void + ReleaseJoint() : void + Release() : void } enum HighlightState { Default, Active, Compatible, Incompatible, } MonoBehaviour <|-- SocketPoint ISocket <|-- SocketPoint @enduml