InvalidateContextMenu() публичный статический Метод

public static InvalidateContextMenu ( Part part ) : void
part Part
Результат void
Пример #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;
 }
Пример #2
0
 private void StopPump()
 {
     UnlinkPump();
     pumpFuel = false;
     Events["ContextMenuTogglePump"].guiName = "Pump Here";
     KAS_Shared.InvalidateContextMenu(this.part);
 }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
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);
        }