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; }
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); } }
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; }
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(); } } } }
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 + ")"); } } }
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 + ")"); } } }
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); } }
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); } }
public bool strutConnected() { KASModuleStrut moduleStrut = this.part.GetComponent <KASModuleStrut>(); if (moduleStrut) { if (moduleStrut.linkedStrutModule) { return(true); } } return(false); }
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); } }
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 !"); } } }
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; }
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; }
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)); }
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; }
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); }
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; }