Inheritance: KASModuleAttachCore
Example #1
0
 private void Unlink()
 {
     // Unload tube renderer
     if (linkedStrutModule)
     {
         linkedStrutModule.UnlinkPump();
         linkedStrutModule.strutRenderer.UnLoad();
         linkedStrutModule.linked = false;
         linkedStrutModule.Events["ContextMenuUnlink"].guiActiveUnfocused = false;
         linkedStrutModule.Events["ContextMenuLink"].guiActiveUnfocused   = true;
         linkedStrutModule.Events["ContextMenuTogglePump"].active         = false;
         KAS_Shared.InvalidateContextMenu(linkedStrutModule.part);
     }
     this.UnlinkPump();
     this.strutRenderer.UnLoad();
     this.linked      = false;
     tgtStrutPartID   = null;
     tgtStrutVesselID = null;
     this.Events["ContextMenuUnlink"].guiActiveUnfocused = false;
     this.Events["ContextMenuLink"].guiActiveUnfocused   = true;
     this.Events["ContextMenuTogglePump"].active         = false;
     KAS_Shared.InvalidateContextMenu(this.part);
     // Detach parts
     if (linkedStrutModule)
     {
         linkedStrutModule.Detach();
     }
     this.Detach();
     // Clean references
     if (linkedStrutModule)
     {
         linkedStrutModule.linkedStrutModule = null;
     }
     this.linkedStrutModule = null;
 }
Example #2
0
        public void ContextMenuLink()
        {
            KASModulePort portModule = this.part.GetComponent <KASModulePort>();

            if (portModule && portModule.plugged)
            {
                ScreenMessages.PostScreenMessage("Cannot link, port is already used",
                                                 5, ScreenMessageStyle.UPPER_CENTER);
                return;
            }
            KASModuleStrut EvaLinkedStrutModule = GetEvaLinkedStrutModule(FlightGlobals.ActiveVessel);

            if (EvaLinkedStrutModule)
            {
                if (EvaLinkedStrutModule.LinkTo(this))
                {
                    fxSndLink.audio.Play();
                }
            }
            else
            {
                SetEvaLink();
                ScreenMessages.PostScreenMessage("Link mode enabled, press Escape or Enter to cancel",
                                                 10, ScreenMessageStyle.UPPER_CENTER);
            }
        }
Example #3
0
 private void Unlink()
 {
     // Unload tube renderer
     if (linkedStrutModule)
     {
         linkedStrutModule.strutRenderer.UnLoad();
         linkedStrutModule.linked = false;
         linkedStrutModule.Events["ContextMenuUnlink"].guiActiveUnfocused = false;
         linkedStrutModule.Events["ContextMenuLink"].guiActiveUnfocused   = true;
     }
     this.strutRenderer.UnLoad();
     this.linked = false;
     this.Events["ContextMenuUnlink"].guiActiveUnfocused = false;
     this.Events["ContextMenuLink"].guiActiveUnfocused   = true;
     // Detach parts
     if (linkedStrutModule)
     {
         linkedStrutModule.Detach();
     }
     this.Detach();
     // Clean references
     if (linkedStrutModule)
     {
         linkedStrutModule.linkedStrutModule = null;
     }
     this.linkedStrutModule = null;
 }
Example #4
0
        void OnVesselWasModified(Vessel vesselModified)
        {
            if (vesselModified != this.vessel)
            {
                return;
            }

            if (linked)
            {
                if (linkedStrutModule.vessel != this.vessel)
                {
                    if (allowDock)
                    {
                        KAS_Shared.DebugWarning("OnVesselWasModified(strut) Source and target vessel are different, docking strut... (allowDock = true)");
                        KASModuleStrut tmpLinkedStrutMod = linkedStrutModule;
                        Unlink();
                        LinkTo(tmpLinkedStrutMod, false);
                    }
                    else
                    {
                        KAS_Shared.DebugWarning("OnVesselWasModified(strut) Source and target vessel are different, unlinking strut... (allowDock = false)");
                        Unlink();
                        fxSndBroke.audio.Play();
                    }
                }
            }
        }
Example #5
0
        public void Update()
        {
            if (Input.GetKey(KeyCode.LeftControl) && Input.GetKeyDown(KeyCode.K))
            {
                if (GuiConfigToogle)
                {
                    Debug.Log("KASAddonDebugMenu - Closing KAS debug tools");
                    GuiConfigToogle = false;
                }
                else
                {
                    Debug.Log("KASAddonDebugMenu - Opening KAS debug tools");
                    GuiConfigToogle = true;
                }
            }

            if (GuiConfigToogle)
            {
                if (Input.GetKey(KeyCode.LeftControl) && Input.GetKeyDown(KeyCode.Mouse0))
                {
                    Debug.Log("KASAddonDebugMenu - On click");
                    clickedPart = KAS_Shared.GetPartUnderCursor();
                    if (clickedPart)
                    {
                        moduleWinch = null;
                        moduleGrab = null;
                        moduleMagnet = null;
                        moduleSuctionCup = null;
                        moduleGrapple = null;
                        moduleTimedBomb = null;
                        modulePort = null;
                        moduleAnchor = null;
                        moduleStrut = null;
                        moduleRotor = null;

                        moduleWinch = clickedPart.GetComponent<KASModuleWinch>();
                        moduleGrab = clickedPart.GetComponent<KASModuleGrab>();
                        moduleMagnet = clickedPart.GetComponent<KASModuleMagnet>();
                        moduleSuctionCup = clickedPart.GetComponent<KASModuleSuctionCup>();
                        moduleGrapple = clickedPart.GetComponent<KASModuleGrapplingHook>();
                        moduleTimedBomb = clickedPart.GetComponent<KASModuleTimedBomb>();
                        modulePort = clickedPart.GetComponent<KASModulePort>();
                        moduleAnchor = clickedPart.GetComponent<KASModuleAnchor>();
                        moduleStrut = clickedPart.GetComponent<KASModuleStrut>();
                        moduleRotor = clickedPart.GetComponent<KASModuleRotor>();
                    }     
                }
            }

            if (FlightGlobals.ActiveVessel.heightFromTerrain == -1f)
            {
                if (FlightGlobals.ActiveVessel.Landed)
                {
                    KAS_Shared.DebugWarning("Warning ! ActiveVessel is landed and heightFromTerrain are negative (" + FlightGlobals.ActiveVessel.heightFromTerrain + ")");
                }
            }
        }
Example #6
0
        public void Update()
        {
            if (Input.GetKey(KeyCode.LeftControl) && Input.GetKeyDown(KeyCode.K))
            {
                if (GuiConfigToogle)
                {
                    Debug.Log("KASAddonDebugMenu - Closing KAS debug tools");
                    GuiConfigToogle = false;
                }
                else
                {
                    Debug.Log("KASAddonDebugMenu - Opening KAS debug tools");
                    GuiConfigToogle = true;
                }
            }

            if (GuiConfigToogle)
            {
                if (Input.GetKey(KeyCode.LeftControl) && Input.GetKeyDown(KeyCode.Mouse0))
                {
                    Debug.Log("KASAddonDebugMenu - On click");
                    clickedPart = KAS_Shared.GetPartUnderCursor();
                    if (clickedPart)
                    {
                        moduleWinch      = null;
                        moduleGrab       = null;
                        moduleMagnet     = null;
                        moduleSuctionCup = null;
                        moduleGrapple    = null;
                        moduleTimedBomb  = null;
                        modulePort       = null;
                        moduleAnchor     = null;
                        moduleStrut      = null;
                        moduleRotor      = null;

                        moduleWinch      = clickedPart.GetComponent <KASModuleWinch>();
                        moduleGrab       = clickedPart.GetComponent <KASModuleGrab>();
                        moduleMagnet     = clickedPart.GetComponent <KASModuleMagnet>();
                        moduleSuctionCup = clickedPart.GetComponent <KASModuleSuctionCup>();
                        moduleGrapple    = clickedPart.GetComponent <KASModuleGrapplingHook>();
                        moduleTimedBomb  = clickedPart.GetComponent <KASModuleTimedBomb>();
                        modulePort       = clickedPart.GetComponent <KASModulePort>();
                        moduleAnchor     = clickedPart.GetComponent <KASModuleAnchor>();
                        moduleStrut      = clickedPart.GetComponent <KASModuleStrut>();
                        moduleRotor      = clickedPart.GetComponent <KASModuleRotor>();
                    }
                }
            }

            if (FlightGlobals.ActiveVessel.heightFromTerrain == -1f)
            {
                if (FlightGlobals.ActiveVessel.Landed)
                {
                    KAS_Shared.DebugWarning("Warning ! ActiveVessel is landed and heightFromTerrain are negative (" + FlightGlobals.ActiveVessel.heightFromTerrain + ")");
                }
            }
        }
Example #7
0
        protected override void InitFixedAttach()
        {
            base.InitFixedAttach();

            // Reset link if a fixed joint exist
            if (attachMode.FixedJoint)
            {
                KAS_Shared.DebugLog("OnStart(strut) Docked / fixed joint detected from save, relinking...");
                KASModuleStrut linkedStrutModuleSavedF = FixedAttach.connectedPart.GetComponent <KASModuleStrut>();
                LinkTo(linkedStrutModuleSavedF, false, true);
            }
        }
Example #8
0
        private IEnumerator <YieldInstruction> WaitAndRedock()
        {
            yield return(null);

            // If still ok, we can redock now
            if (part && vessel && linked && linkedStrutModule.vessel != this.vessel && allowDock)
            {
                KAS_Shared.DebugWarning("WaitAndRedock(strut) Source and target vessel are different, docking strut... (allowDock = true)");
                KASModuleStrut tmpLinkedStrutMod = linkedStrutModule;
                Unlink();
                LinkTo(tmpLinkedStrutMod, false);
            }
        }
Example #9
0
        public bool strutConnected()
        {
            KASModuleStrut moduleStrut = this.part.GetComponent <KASModuleStrut>();

            if (moduleStrut)
            {
                if (moduleStrut.linkedStrutModule)
                {
                    return(true);
                }
            }
            return(false);
        }
Example #10
0
        public void ContextMenuLink()
        {
            KASModuleStrut EvaLinkedStrutModule = GetEvaLinkedStrutModule(FlightGlobals.ActiveVessel);

            if (EvaLinkedStrutModule)
            {
                if (EvaLinkedStrutModule.LinkTo(this))
                {
                    fxSndLink.audio.Play();
                }
            }
            else
            {
                SetEvaLink();
                ScreenMessages.PostScreenMessage("Link mode enabled, press Escape or Enter to cancel", 10, ScreenMessageStyle.UPPER_CENTER);
            }
        }
Example #11
0
        protected override void InitFixedAttach()
        {
            base.InitFixedAttach();

            // Reset link if a fixed joint exist
            if (attachMode.FixedJoint)
            {
                KAS_Shared.DebugLog("OnStart(strut) Docked / fixed joint detected from save, relinking...");
                Part tgtStrutPart = KAS_Shared.GetPartByID(tgtStrutVesselID, tgtStrutPartID);
                if (tgtStrutPart)
                {
                    KASModuleStrut linkedStrutModuleSavedF = tgtStrutPart.GetComponent <KASModuleStrut>();
                    LinkTo(linkedStrutModuleSavedF, false, true);
                }
                else
                {
                    KAS_Shared.DebugError("OnStart(strut) Target strut part not found !");
                }
            }
        }
Example #12
0
        private bool LinkTo(KASModuleStrut tgtModule, bool checkCondition = true, bool setJointOrDock = true)
        {
            //Check condition if needed
            if (checkCondition)
            {
                if (!CheckLink(this.strutTransform, tgtModule.strutTransform, true))
                {
                    ScreenMessages.PostScreenMessage("Max angle or lenght reached, cannot link !", 5, ScreenMessageStyle.UPPER_CENTER);
                    return false;
                }

                if (tgtModule == this)
                {
                    ScreenMessages.PostScreenMessage(this.part.partInfo.title + " cannot be linked to itself !", 5, ScreenMessageStyle.UPPER_CENTER);
                    return false;
                }

                if (tgtModule.type != this.type)
                {
                    ScreenMessages.PostScreenMessage(this.part.partInfo.title + " cannot be linked to " + tgtModule.part.partInfo.title + " because they are not compatible !", 5, ScreenMessageStyle.UPPER_CENTER);
                    return false;
                }

                if (tgtModule.vessel != this.vessel && !allowDock)
                {
                    ScreenMessages.PostScreenMessage(this.part.partInfo.title + " cannot be linked to another vessel !", 5, ScreenMessageStyle.UPPER_CENTER);
                    return false;
                }
            }

            // Load tube renderer in this module
            this.StopEvaLink();
            this.strutRenderer.tgtNode = tgtModule.strutTransform;
            this.strutRenderer.shaderName = "Diffuse";
            this.strutRenderer.color = Color.white;
            this.strutRenderer.color.a = 1f;
            this.strutRenderer.Load();

            // Set references for the current module
            this.Events["ContextMenuUnlink"].guiActiveUnfocused = true;
            this.Events["ContextMenuLink"].guiActiveUnfocused = false;
            this.linkedStrutModule = tgtModule;
            this.linked = true;

            // Set references for the target module
            tgtModule.linkedStrutModule = this;
            tgtModule.Events["ContextMenuUnlink"].guiActiveUnfocused = true;
            tgtModule.Events["ContextMenuLink"].guiActiveUnfocused = false;
            tgtModule.linked = true;

            KAS_Shared.InvalidateContextMenu(this.part);

            if (setJointOrDock)
            {
                // Create joint or dock part
                if (tgtModule.vessel == this.vessel)
                {
                    if (tgtModule.part.parent != this.part && this.part.parent != tgtModule.part)
                    {
                        KAS_Shared.DebugLog("LinkTo(Strut) Parts are from the same vessel but are not connected, setting joint...");
                        AttachFixed(tgtModule.part, breakForce);
                    }
                }
                else
                {
                    KAS_Shared.DebugLog("LinkTo(Strut) Parts are from a different vessel, docking...");
                    AttachDocked(tgtModule);
                }
            }
            else
            {
                KAS_Shared.DebugLog("LinkTo(Strut) setJointOrDock = false, ignoring dock and creating joint");
            }

            return true;
        }
Example #13
0
 protected virtual void Unlink()
 {
     // Unload tube renderer
     if (linkedStrutModule) {
       linkedStrutModule.UnlinkPump();
       linkedStrutModule.strutRenderer.UnLoad();
       linkedStrutModule.linked = false;
       linkedStrutModule.Events["ContextMenuUnlink"].guiActiveUnfocused = false;
       linkedStrutModule.Events["ContextMenuLink"].guiActiveUnfocused = true;
       linkedStrutModule.Events["ContextMenuTogglePump"].active = false;
       KAS_Shared.InvalidateContextMenu(linkedStrutModule.part);
     }
     this.UnlinkPump();
     this.strutRenderer.UnLoad();
     this.linked = false;
     tgtStrutPartID = null;
     tgtStrutVesselID = null;
     this.Events["ContextMenuUnlink"].guiActiveUnfocused = false;
     this.Events["ContextMenuLink"].guiActiveUnfocused = true;
     this.Events["ContextMenuTogglePump"].active = false;
     KAS_Shared.InvalidateContextMenu(this.part);
     // Detach parts
     if (linkedStrutModule) {
       linkedStrutModule.Detach();
     }
     this.Detach();
     // Clean references
     if (linkedStrutModule) {
       linkedStrutModule.linkedStrutModule = null;
     }
     this.linkedStrutModule = null;
 }
Example #14
0
        public override void OnStart(StartState state)
        {
            base.OnStart(state);
            if (state == StartState.Editor || state == StartState.None)
            {
                return;
            }
            //Loading texture
            texStrut = GameDatabase.Instance.GetTexture(tubeTexPath, false);
            if (!texStrut)
            {
                KAS_Shared.DebugError("tube texture loading error !");
                ScreenMessages.PostScreenMessage(
                    "Texture file : " + tubeTexPath
                    + " as not been found, please check your KAS installation !",
                    10, ScreenMessageStyle.UPPER_CENTER);
            }
            // loading sounds
            KAS_Shared.createFXSound(this.part, fxSndLink, sndLinkPath, false);
            KAS_Shared.createFXSound(this.part, fxSndUnlink, sndUnlinkPath, false);
            KAS_Shared.createFXSound(this.part, fxSndBroke, sndBrokePath, false);

            // loading strut renderer
            strutRenderer = this.part.gameObject.AddComponent <KAS_Tube>();
            strutRenderer.tubeTexTilingOffset = textureTiling;
            strutRenderer.tubeScale           = tubeScale;
            strutRenderer.sphereScale         = jointScale;
            strutRenderer.tubeTexture         = texStrut;
            strutRenderer.sphereTexture       = texStrut;
            strutRenderer.tubeJoinedTexture   = texStrut;
            strutRenderer.srcNode             = strutTransform;

            // loading tube type
            switch (tubeSrcType)
            {
            case "None":
                strutRenderer.srcJointType = KAS_Tube.tubeJointType.None;
                break;

            case "Rounded":
                strutRenderer.srcJointType = KAS_Tube.tubeJointType.Rounded;
                break;

            case "ShiftedAndRounded":
                strutRenderer.srcJointType = KAS_Tube.tubeJointType.ShiftedAndRounded;
                break;

            case "Joined":
                strutRenderer.srcJointType = KAS_Tube.tubeJointType.Joined;
                break;

            default:
                strutRenderer.srcJointType = KAS_Tube.tubeJointType.Joined;
                break;
            }
            switch (tubeTgtType)
            {
            case "None":
                strutRenderer.tgtJointType = KAS_Tube.tubeJointType.None;
                break;

            case "Rounded":
                strutRenderer.tgtJointType = KAS_Tube.tubeJointType.Rounded;
                break;

            case "ShiftedAndRounded":
                strutRenderer.tgtJointType = KAS_Tube.tubeJointType.ShiftedAndRounded;
                break;

            case "Joined":
                strutRenderer.tgtJointType = KAS_Tube.tubeJointType.Joined;
                break;

            default:
                strutRenderer.tgtJointType = KAS_Tube.tubeJointType.Joined;
                break;
            }

            // Reset link if docked
            if (attachMode.Docked && !linked)
            {
                KAS_Shared.DebugLog("OnStart(strut) Docked strut detected from save, relinking...");
                KASModuleStrut linkedStrutModuleSavedD = dockedAttachModule.GetComponent <KASModuleStrut>();
                LinkTo(linkedStrutModuleSavedD, false, true);
            }

            // Loading onVesselWasModified KSP event
            GameEvents.onVesselWasModified.Add(new EventData <Vessel> .OnEvent(this.OnVesselWasModified));
        }
Example #15
0
        private bool LinkTo(KASModuleStrut tgtModule, bool checkCondition = true,
                      bool setJointOrDock = true)
        {
            //Check condition if needed
            if (checkCondition) {
              if (!CheckLink(this.strutTransform, tgtModule.strutTransform, true)) {
            ScreenMessages.PostScreenMessage("Max angle or length reached, cannot link!",
                                         5, ScreenMessageStyle.UPPER_CENTER);
            return false;
              }

              if (tgtModule == this) {
            ScreenMessages.PostScreenMessage(
            string.Format("{0} cannot be linked to itself!", part.partInfo.title),
            5, ScreenMessageStyle.UPPER_CENTER);
            return false;
              }

              if (tgtModule.type != this.type) {
            ScreenMessages.PostScreenMessage(
            string.Format("{0} cannot be linked to {1} because they are not compatible!",
                          part.partInfo.title, tgtModule.part.partInfo.title),
            5, ScreenMessageStyle.UPPER_CENTER);
            return false;
              }

              if (tgtModule.vessel != vessel && !allowDock) {
            ScreenMessages.PostScreenMessage(
            string.Format("{0} cannot be linked to another vessel!", part.partInfo.title),
            5, ScreenMessageStyle.UPPER_CENTER);
            return false;
              }
            }

            // Load tube renderer in this module
            this.StopEvaLink();
            this.strutRenderer.tgtNode = tgtModule.strutTransform;
            this.strutRenderer.shaderName = "Diffuse";
            this.strutRenderer.color = Color.white;
            this.strutRenderer.color.a = 1f;
            this.strutRenderer.Load();

            // Set references for the current module
            this.Events["ContextMenuUnlink"].guiActiveUnfocused = true;
            this.Events["ContextMenuLink"].guiActiveUnfocused = false;
            this.linkedStrutModule = tgtModule;
            this.linked = true;

            // Set references for the target module
            tgtModule.linkedStrutModule = this;
            tgtModule.Events["ContextMenuUnlink"].guiActiveUnfocused = true;
            tgtModule.Events["ContextMenuLink"].guiActiveUnfocused = false;
            tgtModule.linked = true;
            tgtStrutPartID = tgtModule.part.flightID.ToString();
            tgtStrutVesselID = tgtModule.part.vessel.id.ToString();

            KAS_Shared.InvalidateContextMenu(this.part);
            KAS_Shared.InvalidateContextMenu(tgtModule.part);

            if (setJointOrDock) {
              // Create joint or dock part
              if (tgtModule.vessel == vessel) {
            if (tgtModule.part.parent != part && part.parent != tgtModule.part) {
              KAS_Shared.DebugLog("LinkTo(Strut) Parts are from the same vessel but are not connected,"
                              + " setting joint...");
              if (part.parent && tgtModule.part.parent) {
            KAS_Shared.DebugLog("LinkTo(Strut) Set joint on struts parents");
            AttachFixed(part.parent, tgtModule.part.parent, breakForce);
              } else {
            KAS_Shared.DebugLog("LinkTo(Strut) Set joint on struts");
            AttachFixed(part, tgtModule.part, breakForce);
              }
            }
              } else {
            KAS_Shared.DebugLog("LinkTo(Strut) Parts are from a different vessel, docking...");
            AttachDocked(tgtModule);
              }
            } else {
              KAS_Shared.DebugLog("LinkTo(Strut) setJointOrDock = false, ignoring dock and creating joint");
            }

            // Connect fuel flow when appropriate
            bool both_attached =
            this.part.srfAttachNode.attachedPart && tgtModule.part.srfAttachNode.attachedPart;

            this.Events["ContextMenuTogglePump"].active = this.allowPumpFuel && both_attached;
            if (this.pumpFuel) {
              this.StartPump(checkCondition);
            }

            tgtModule.Events["ContextMenuTogglePump"].active = tgtModule.allowPumpFuel && both_attached;
            if (tgtModule.pumpFuel) {
              tgtModule.StartPump(checkCondition);
            }

            return true;
        }
Example #16
0
        private bool LinkTo(KASModuleStrut tgtModule, bool checkCondition = true,
                            bool setJointOrDock = true)
        {
            //Check condition if needed
            if (checkCondition)
            {
                if (!CheckLink(this.strutTransform, tgtModule.strutTransform, true))
                {
                    ScreenMessages.PostScreenMessage("Max angle or length reached, cannot link !",
                                                     5, ScreenMessageStyle.UPPER_CENTER);
                    return(false);
                }

                if (tgtModule == this)
                {
                    ScreenMessages.PostScreenMessage(this.part.partInfo.title + " cannot be linked to itself !",
                                                     5, ScreenMessageStyle.UPPER_CENTER);
                    return(false);
                }

                if (tgtModule.type != this.type)
                {
                    ScreenMessages.PostScreenMessage(
                        this.part.partInfo.title + " cannot be linked to " + tgtModule.part.partInfo.title
                        + " because they are not compatible !",
                        5, ScreenMessageStyle.UPPER_CENTER);
                    return(false);
                }

                if (tgtModule.vessel != this.vessel && !allowDock)
                {
                    ScreenMessages.PostScreenMessage(
                        this.part.partInfo.title + " cannot be linked to another vessel !",
                        5, ScreenMessageStyle.UPPER_CENTER);
                    return(false);
                }
            }

            // Load tube renderer in this module
            this.StopEvaLink();
            this.strutRenderer.tgtNode    = tgtModule.strutTransform;
            this.strutRenderer.shaderName = "Diffuse";
            this.strutRenderer.color      = Color.white;
            this.strutRenderer.color.a    = 1f;
            this.strutRenderer.Load();

            // Set references for the current module
            this.Events["ContextMenuUnlink"].guiActiveUnfocused = true;
            this.Events["ContextMenuLink"].guiActiveUnfocused   = false;
            this.linkedStrutModule = tgtModule;
            this.linked            = true;

            // Set references for the target module
            tgtModule.linkedStrutModule = this;
            tgtModule.Events["ContextMenuUnlink"].guiActiveUnfocused = true;
            tgtModule.Events["ContextMenuLink"].guiActiveUnfocused   = false;
            tgtModule.linked = true;
            tgtStrutPartID   = tgtModule.part.flightID.ToString();
            tgtStrutVesselID = tgtModule.part.vessel.id.ToString();

            KAS_Shared.InvalidateContextMenu(this.part);
            KAS_Shared.InvalidateContextMenu(tgtModule.part);

            if (setJointOrDock)
            {
                // Create joint or dock part
                if (tgtModule.vessel == this.vessel)
                {
                    if (tgtModule.part.parent != this.part && this.part.parent != tgtModule.part)
                    {
                        KAS_Shared.DebugLog("LinkTo(Strut) Parts are from the same vessel but are not connected,"
                                            + " setting joint...");
                        if (this.part.parent && tgtModule.part.parent)
                        {
                            KAS_Shared.DebugLog("LinkTo(Strut) Set joint on struts parents");
                            AttachFixed(this.part.parent, tgtModule.part.parent, breakForce);
                        }
                        else
                        {
                            KAS_Shared.DebugLog("LinkTo(Strut) Set joint on struts");
                            AttachFixed(this.part, tgtModule.part, breakForce);
                        }
                    }
                }
                else
                {
                    KAS_Shared.DebugLog("LinkTo(Strut) Parts are from a different vessel, docking...");
                    AttachDocked(tgtModule);
                }
            }
            else
            {
                KAS_Shared.DebugLog("LinkTo(Strut) setJointOrDock = false, ignoring dock and creating joint");
            }

            // Connect fuel flow when appropriate
            bool both_attached =
                this.part.srfAttachNode.attachedPart && tgtModule.part.srfAttachNode.attachedPart;

            this.Events["ContextMenuTogglePump"].active = this.allowPumpFuel && both_attached;
            if (this.pumpFuel)
            {
                this.StartPump(checkCondition);
            }

            tgtModule.Events["ContextMenuTogglePump"].active = tgtModule.allowPumpFuel && both_attached;
            if (tgtModule.pumpFuel)
            {
                tgtModule.StartPump(checkCondition);
            }

            return(true);
        }
Example #17
0
 private void Unlink()
 {
     // Unload tube renderer
     if (linkedStrutModule)
     {
         linkedStrutModule.strutRenderer.UnLoad();
         linkedStrutModule.linked = false;
         linkedStrutModule.Events["ContextMenuUnlink"].guiActiveUnfocused = false;
         linkedStrutModule.Events["ContextMenuLink"].guiActiveUnfocused = true;
         KAS_Shared.InvalidateContextMenu(linkedStrutModule.part);
     }
     this.strutRenderer.UnLoad();
     this.linked = false;
     this.Events["ContextMenuUnlink"].guiActiveUnfocused = false;
     this.Events["ContextMenuLink"].guiActiveUnfocused = true;
     KAS_Shared.InvalidateContextMenu(this.part);
     // Detach parts
     if (linkedStrutModule) linkedStrutModule.Detach();
     this.Detach();
     // Clean references
     if (linkedStrutModule) linkedStrutModule.linkedStrutModule = null;
     this.linkedStrutModule = null;
 }