private void OnSwitcherWidgetClick()
        {
            ButtonWidget handler = EventSystem.current.currentSelectedGameObject.GetComponent <ButtonWidget>();

            if (handler.switcherModule is ModuleB9PartSwitch)
            {
                ModuleB9PartSwitch b9Switch = (ModuleB9PartSwitch)handler.switcherModule;
                int nextSubtype             = b9Switch.currentSubtypeIndex == b9Switch.SubtypesCount - 1 ? 0 : b9Switch.currentSubtypeIndex + 1;
                b9Switch.SwitchSubtype(b9Switch.subtypes[nextSubtype].subtypeName);
                delayedTooltipUpdate = 1;
            }
            else if (handler.switcherModule is ModulePartVariants)
            {
                ModulePartVariants pmv     = (ModulePartVariants)handler.switcherModule;
                int    currentVariantIndex = pmv.variantList.IndexOf(pmv.SelectedVariant);
                int    nextvariant         = currentVariantIndex == pmv.variantList.Count - 1 ? 0 : currentVariantIndex + 1;
                string nextVariantName     = pmv.variantList[nextvariant].Name;
                pmv.SetVariant(nextVariantName);
                for (int i = 0; i < pmv.part.symmetryCounterparts.Count; i++)
                {
                    PartModule pmSym = pmv.part.symmetryCounterparts[i].Modules[pmv.part.Modules.IndexOf(pmv)];
                    if (pmSym != null && pmSym is ModulePartVariants)
                    {
                        ((ModulePartVariants)pmSym).SetVariant(nextVariantName);
                    }
                }

                UpdateInfoToolTip(false);
            }
        }
示例#2
0
 public SubtypeVolumeProvider(ModuleB9PartSwitch parent, float volumeMultiplier, float volumeAdded)
 {
     parent.ThrowIfNullArgument(nameof(parent));
     this.parent           = parent;
     this.volumeMultiplier = volumeMultiplier;
     this.volumeAdded      = volumeAdded;
 }
        public override void Setup(UIPartActionWindow window, Part part, PartModule partModule, UI_Scene scene, UI_Control control, BaseField field)
        {
            base.Setup(window, part, partModule, scene, control, field);

            ModuleB9PartSwitch switcherModule = (ModuleB9PartSwitch)partModule;

            SwitcherSubtypeDescriptionGenerator subtypeDescriptionGenerator = new SwitcherSubtypeDescriptionGenerator(switcherModule);

            subtypeButtons = new List <UIPartActionSubtypeButton>(switcherModule.subtypes.Count);
            for (int i = 0; i < switcherModule.subtypes.Count; i++)
            {
                PartSubtype subtype = switcherModule.subtypes[i];
                if (!subtype.IsUnlocked())
                {
                    continue;
                }
                GameObject buttonGameObject             = Instantiate(prefabVariantButton, scrollMain.content);
                UIPartActionSubtypeButton subtypeButton = buttonGameObject.GetComponent <UIPartActionSubtypeButton>();

                // prevent capturing in closures
                int index = i;

                subtypeButton.Setup(
                    subtype.title,
                    subtypeDescriptionGenerator.GetFullSubtypeDescription(subtype),
                    subtype.PrimaryColor,
                    subtype.SecondaryColor,
                    () => SetSubtype(index)
                    );

                subtypeButtons.Add(subtypeButton);
            }

            subtypeButtons[0].previousItem = subtypeButtons[subtypeButtons.Count - 1];
            subtypeButtons[0].nextItem     = subtypeButtons[1];
            for (int i = 1; i < subtypeButtons.Count - 1; i++)
            {
                subtypeButtons[i].previousItem = subtypeButtons[i - 1];
                subtypeButtons[i].nextItem     = subtypeButtons[i + 1];
            }
            subtypeButtons[subtypeButtons.Count - 1].previousItem = subtypeButtons[subtypeButtons.Count - 2];
            subtypeButtons[subtypeButtons.Count - 1].nextItem     = subtypeButtons[0];

            switcherDescriptionText.text = switcherModule.switcherDescription;

            TooltipHelper.SetupSubtypeInfoTooltip(buttonPreviousTooltipController, "", "");
            TooltipHelper.SetupSubtypeInfoTooltip(buttonNextTooltipController, "", "");

            SetTooltips(switcherModule.currentSubtypeIndex);

            buttonPrevious.onClick.AddListener(PreviousSubtype);
            buttonNext.onClick.AddListener(NextSubtype);

            subtypeTitleText.text = switcherModule.CurrentSubtype.title;

            subtypeButtons[switcherModule.currentSubtypeIndex].Activate();
        }
        private void GetB9Info(ModuleB9PartSwitch b9, out string title, out string info)
        {
            title = b9.switcherDescription + " (" + b9.subtypes.Count + " subtypes)";
            info  = "";
            for (int i = 0; i < b9.subtypes.Count; i++)
            {
                if (b9.CurrentSubtype == b9.subtypes[i])
                {
                    info += $"<b><color=#ffd200>> {b9.subtypes[i].title}</color></b>";
                }
                else
                {
                    info += $"- {b9.subtypes[i].title}";
                }

                ModuleB9PartSwitch parent = b9.part.Modules.OfType <ModuleB9PartSwitch>().FirstOrDefault(module => module.moduleID == b9.parentID);
                if (b9.parentID != "" && parent != null && parent.CurrentSubtype.HasTank && parent.baseVolume != 0)
                {
                    info += $" - Volume : {parent.baseVolume + b9.subtypes[i].volumeAddedToParent}";
                }

                if (b9.subtypes[i].HasTank && b9.part.Modules.OfType <ModuleB9PartSwitch>().FirstOrDefault(module => module.parentID == b9.moduleID) == null)
                {
                    info += $" - Volume : {b9.subtypes[i].TotalVolume}";
                }

                foreach (var resource in b9.subtypes[i].tankType)
                {
                    info += $"\n  <color=#99ff00ff>- {resource.resourceDefinition.displayName}</color> : {resource.unitsPerVolume * b9.subtypes[i].TotalVolume:F1}";
                }
                if (i != b9.subtypes.Count)
                {
                    info += "\n";
                }
                ;
            }
        }
示例#5
0
 public PartSubtypeContext(Part part, ModuleB9PartSwitch module, PartSubtype subtype)
 {
     Part    = part;
     Module  = module;
     Subtype = subtype;
 }
 public PartSubtypeContext(Part part, ModuleB9PartSwitch module, PartSubtype subtype)
 {
     Part = part;
     Module = module;
     Subtype = subtype;
 }
示例#7
0
        public SwitcherSubtypeDescriptionGenerator(ModuleB9PartSwitch module)
        {
            module.ThrowIfNullArgument(nameof(module));
            this.module = module;

            Part partPrefab = module.part.GetPrefab();

            float prefabMass = partPrefab.mass;

            partDryMass = prefabMass + module.part.GetModuleMass(prefabMass);
            partWetMass = partDryMass + module.part.GetResourceMassMax();

            baseDryMass = partDryMass - module.GetDryMass(module.CurrentSubtype) - module.GetParentDryMass(module.CurrentSubtype);
            baseWetMass = partWetMass - module.GetWetMass(module.CurrentSubtype) - module.GetParentWetMass(module.CurrentSubtype);

            float prefabCost = module.part.partInfo.cost;

            partWetCost = prefabCost + module.part.GetModuleCosts(prefabCost);
            partDryCost = partWetCost - module.part.GetResourceCostMax();

            baseDryCost = partDryCost - module.GetDryCost(module.CurrentSubtype) - module.GetParentDryCost(module.CurrentSubtype);
            baseWetCost = partWetCost - module.GetWetCost(module.CurrentSubtype) - module.GetParentWetCost(module.CurrentSubtype);

            showWetMass  = module.ChangesResourceMass;
            showWetMass |= module.Parent?.CurrentTankType.ChangesResourceMass ?? false;

            showDryMass  = showWetMass;
            showDryMass |= module.ChangesDryMass;
            showDryMass |= (module.Parent?.CurrentTankType.tankMass ?? 0) != 0;

            showWetCost  = module.ChangesResourceCost;
            showWetCost |= module.Parent?.CurrentTankType.ChangesResourceCost ?? false;

            showDryCost  = showWetCost;
            showDryCost |= module.ChangesDryCost;
            showDryCost |= (module.Parent?.CurrentTankType.tankCost ?? 0) != 0;

            showMaxTemp        = module.HasPartAspectLock("maxTemp");
            showSkinMaxTemp    = module.HasPartAspectLock("skinMaxTemp");
            showCrashTolerance = module.HasPartAspectLock("crashTolerance");

            prefabMaxTemp        = (float)partPrefab.maxTemp;
            prefabSkinMaxTemp    = (float)partPrefab.skinMaxTemp;
            prefabCrashTolerance = partPrefab.crashTolerance;

            currentMaxTemp        = (float)module.part.maxTemp;
            currentSkinMaxTemp    = (float)module.part.skinMaxTemp;
            currentCrashTolerance = module.part.crashTolerance;

            float currentParentVolume = module.Parent?.GetTotalVolume(module.Parent.CurrentSubtype) ?? 0;

            baseParentVolume = currentParentVolume - (module.CurrentSubtype.volumeAddedToParent * module.VolumeScale);

            parentResources = new KeyValuePair <TankResource, float> [module.Parent?.CurrentTankType.resources.Count ?? 0];

            for (int i = 0; i < parentResources.Length; i++)
            {
                TankResource resource = module.Parent.CurrentTankType[i];
                parentResources[i] = new KeyValuePair <TankResource, float>(resource, resource.unitsPerVolume * currentParentVolume);
            }
        }
示例#8
0
        public override void OnStart(StartState state)
        {
            Debug.Log("ModuleKerBalloon Loaded");

            if (HighLogic.LoadedSceneIsEditor)
            {
                var switches = part.FindModulesImplementing <ModuleB9PartSwitch>();
                sizeSwitch   = switches.Find(s => s.moduleID == "balloonSizeSwitch");
                planetSwitch = switches.Find(s => s.moduleID == "planetSwitch");
                if (sizeSwitch == null)
                {
                    Log.Error("sizeSwitch is null");
                }
                if (planetSwitch == null)
                {
                    Log.Error("planetSwitch is null");
                }
                foreach (var s in planetSwitch.Fields)
                {
                    s.guiActiveEditor = false;
                }
                planetSwitch.Events["ShowSubtypesWindow"].guiActiveEditor = false;
                bodyName = recommendedBody;
                UpdatePersistentData();
            }
            if (HighLogic.LoadedSceneIsFlight)
            {
                balloonObject      = getChildGameObject(this.part.gameObject, CFGballoonObject, 0);      // balloonSize);
                ropeObject         = getChildGameObject(this.part.gameObject, CFGropeObject, 0);         //balloonSize);
                capObject          = getChildGameObject(this.part.gameObject, CFGcapObject, 0);          //balloonSize);
                liftPointObject    = getChildGameObject(this.part.gameObject, CFGliftPointObject, 0);    //balloonSize);
                balloonPointObject = getChildGameObject(this.part.gameObject, CFGballoonPointObject, 0); //balloonSize);

                balloonObject.transform.localScale = new Vector3(0.01f, 0.01f, 0.01f);

                initialBalloonScale = balloonObject.transform.localScale;
                initialBalloonPos   = balloonObject.transform.transform.localPosition;
                initialRopeScale    = ropeObject.transform.localScale;

                if (hasInflated && !isInflated)
                {
                    balloonObject.SetActive(false);
                    ropeObject.SetActive(false);
                    capObject.SetActive(false);
                }
                else if (isInflating)
                {
                    repackBalloon();
                }
                else if (isDeflating)
                {
                    balloonObject.SetActive(false);
                    ropeObject.SetActive(false);

                    isInflated  = false;
                    isDeflating = false;
                    isRepacked  = false;
                }

                if (!isInflated && !isInflating && !isDeflating && !isRepacked)
                {
                    Events["repackBalloon"].active = true;
                }
                if (isInflated)
                {
                    Log.Info("isInflated");
                    Events["inflateBalloon"].active = false;
                    Events["deflateBalloon"].active = true;
                    balloonObject.SetActive(true);
                    ropeObject.SetActive(true);
                    capObject.SetActive(false);


                    ropeObject.transform.rotation   = Quaternion.Slerp(ropeObject.transform.rotation, Quaternion.LookRotation(vessel.upAxis, vessel.upAxis), BalloonProperties.getLift(this) / 10);
                    ropeObject.transform.localScale = new Vector3(1, 1, 1);
                }
            }
        }