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; }
private void StopPump() { UnlinkPump(); pumpFuel = false; Events["ContextMenuTogglePump"].guiName = "Pump Here"; KAS_Shared.InvalidateContextMenu(this.part); }
private void StartPump(bool from_ui) { StopPump(); if (!linkedStrutModule || linkedStrutModule.part.vessel != part.vessel) { if (from_ui) { ScreenMessages.PostScreenMessage("Can't pump when not connected to the same vessel!", 3, ScreenMessageStyle.UPPER_CENTER); } return; } Part target = part.srfAttachNode.attachedPart; Part source = linkedStrutModule.part.srfAttachNode.attachedPart; if (!target || !source) { if (from_ui) { ScreenMessages.PostScreenMessage("Can't pump when an end is dangling!", 3, ScreenMessageStyle.UPPER_CENTER); } return; } pumpTo = target; pumpFrom = source; pumpTo.fuelLookupTargets.Add(pumpFrom); pumpFuel = true; Events["ContextMenuTogglePump"].guiName = "Stop Pumping"; KAS_Shared.InvalidateContextMenu(this.part); }
public void RefreshContextMenu() { if (grabbed) { Events["ContextMenuGrab"].guiActiveUnfocused = false; Events["ContextMenuDrop"].guiActiveUnfocused = true; Events["ContextMenuDrop"].guiActive = true; } else { Events["ContextMenuGrab"].guiActiveUnfocused = true; Events["ContextMenuDrop"].guiActiveUnfocused = false; Events["ContextMenuDrop"].guiActive = false; } Events["ContextMenuGrab"].unfocusedRange = KASAddonControlKey.radius; Events["ContextMenuGrab"].guiName = "Grab" + " (Key " + KASAddonControlKey.grabPartKey.ToUpper() + ")"; if (attachOnPart || attachOnEva || attachOnStatic) { Events["ContextMenuEvaAttach"].guiActiveUnfocused = true; if (grabbed) { Events["ContextMenuEvaAttach"].guiActive = true; } else { Events["ContextMenuEvaAttach"].guiActive = false; } } else { Events["ContextMenuEvaAttach"].guiActiveUnfocused = false; Events["ContextMenuEvaAttach"].guiActive = false; } KAS_Shared.InvalidateContextMenu(this.part); }
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); }