public void GrabHead(Vessel kerbalEvaVessel, KASModulePort grabbedPort = null)
{
KAS_Shared.DebugLog("GrabHead(Winch) Grabbing part");
//Drop already grabbed head
KASModuleWinch tmpGrabbbedHead = KAS_Shared.GetWinchModuleGrabbed(kerbalEvaVessel);
if (tmpGrabbbedHead) {
KAS_Shared.DebugLog("GrabHead(Winch) - Drop current grabbed head");
tmpGrabbbedHead.DropHead();
}
if (headState == PlugState.PlugDocked || headState == PlugState.PlugUndocked) {
KAS_Shared.DebugLog("GrabHead(Winch) - Unplug head");
UnplugHead();
}
if (headState == PlugState.Locked) {
KAS_Shared.DebugLog("GrabHead(Winch) - Deploy head");
Deploy();
}
evaCollider = KAS_Shared.GetEvaCollider(kerbalEvaVessel, "jetpackCollider");
evaHeadNodeTransform = new GameObject("KASEvaHeadNode").transform;
evaHeadNodeTransform.parent = evaCollider.transform;
evaHeadNodeTransform.localPosition = evaGrabHeadPos;
evaHeadNodeTransform.rotation =
KAS_Shared.DirectionToQuaternion(evaCollider.transform, evaGrabHeadDir);
SetHeadToPhysic(false);
grabbedPortModule = grabbedPort;
if (grabbedPort) {
KAS_Shared.DebugLog("GrabHead(Winch) - Moving head to grabbed port node...");
headTransform.rotation =
Quaternion.FromToRotation(headPortNode.forward, -grabbedPort.portNode.forward)
* headTransform.rotation;
headTransform.position =
headTransform.position - (headPortNode.position - grabbedPort.portNode.position);
} else {
KAS_Shared.DebugLog("GrabHead(Winch) - Moving head to eva node...");
KAS_Shared.MoveAlign(headTransform, headPortNode, evaHeadNodeTransform);
}
// Set cable joint connected body to eva
SetCableJointConnectedBody(kerbalEvaVessel.rootPart.rb);
headTransform.parent = evaHeadNodeTransform;
cableJointLength = cableRealLenght;
evaHolderPart = kerbalEvaVessel.rootPart;
release.active = true;
fxSndHeadGrab.audio.Play();
}