public EngineHandler(PowerUpgradeModuleMk2 upgradeMk2, PowerUpgradeModuleMk3 upgradeMk3, SubRoot cyclops)
            : base(BaseValue, cyclops)
        {
            TieredUpgradeHandler <int> tier1 = CreateTier(TechType.PowerUpgradeModule, 1);

            tier1.MaxCount = MaxAllowedPerTier;

            TieredUpgradeHandler <int> tier2 = CreateTier(upgradeMk2.TechType, 2);

            tier2.MaxCount = MaxAllowedPerTier;

            TieredUpgradeHandler <int> tier3 = CreateTier(upgradeMk3.TechType, 3);

            tier3.MaxCount = MaxAllowedPerTier;

            OnFinishedUpgrades = () =>
            {
                int powerIndex = this.HighestValue;

                if (lastKnownPowerIndex != powerIndex)
                {
                    lastKnownPowerIndex = powerIndex;

                    base.Cyclops.silentRunningPowerCost = SilentRunningPowerCosts[powerIndex];
                    base.Cyclops.sonarPowerCost         = SonarPowerCosts[powerIndex];
                    base.Cyclops.shieldPowerCost        = ShieldPowerCosts[powerIndex];
                    this.RatingManager.ApplyPowerRatingModifier(TechType.PowerUpgradeModule, EnginePowerRatings[powerIndex]);
                }
            };
        }
Пример #2
0
        private void SetupPowerManagerUpgrades(PowerManager powerManager, int maxModules)
        {
            RegisterOneTimeUseHandlerCreator(() =>
            {
                QuickLogger.Debug("UpgradeHandler Registered: Engine Upgrades Collection");
                var efficiencyUpgrades = new TieredUpgradesHandlerCollection <int>(0);

                QuickLogger.Debug("UpgradeHandler Registered: Engine Upgrade Mk1");
                TieredUpgradeHandler <int> engine1 = efficiencyUpgrades.CreateTier(TechType.PowerUpgradeModule, 1);

                QuickLogger.Debug("UpgradeHandler Registered: Engine Upgrade Mk2");
                TieredUpgradeHandler <int> engine2 = efficiencyUpgrades.CreateTier(CyclopsModule.PowerUpgradeMk2ID, 2);

                QuickLogger.Debug("UpgradeHandler Registered: Engine Upgrade Mk3");
                TieredUpgradeHandler <int> engine3 = efficiencyUpgrades.CreateTier(CyclopsModule.PowerUpgradeMk3ID, 3);

                powerManager.EngineEfficientyUpgrades = efficiencyUpgrades;
                return(efficiencyUpgrades);
            });

            RegisterOneTimeUseHandlerCreator(() =>
            {
                QuickLogger.Debug("UpgradeHandler Registered: SpeedBooster Upgrade");
                var speed = new UpgradeHandler(CyclopsModule.SpeedBoosterModuleID)
                {
                    MaxCount = maxModules,
                    OnFirstTimeMaxCountReached = () =>
                    {
                        ErrorMessage.AddMessage(CyclopsSpeedBooster.MaxRatingAchived);
                    }
                };
                powerManager.SpeedBoosters = speed;
                return(speed);
            });
        }
        public CyNukeEnhancerHandler(SubRoot cyclops) : base(NoUpgradesValue, cyclops)
        {
            tier1          = CreateTier(CyNukeEnhancerMk1.TechTypeID, Mk1UpgradeValue);
            tier1.MaxCount = 1;
            tier2          = CreateTier(CyNukeEnhancerMk2.TechTypeID, Mk2UpgradeValue);
            tier2.MaxCount = 1;

            OnFinishedUpgrades = () =>
            {
                MCUServices.Logger.Debug($"Handling all CyNukeEnhancers at {this.HighestValue}");

                this.Manager?.ApplyToAll((reactor) => reactor.UpdateUpgradeLevel(this.HighestValue));
            };
        }
Пример #4
0
        public CyNukeEnhancerHandler(SubRoot cyclops) : base(NoUpgradesValue, cyclops)
        {
            tier1          = CreateTier(CyNukeEnhancerMk1.TechTypeID, Mk1UpgradeValue);
            tier1.MaxCount = 1;
            tier2          = CreateTier(CyNukeEnhancerMk2.TechTypeID, Mk2UpgradeValue);
            tier2.MaxCount = 1;

            OnUpgradeCounted = () => // Doing the final sync during HandleUpgrades may be unorthodox, but it somehow doesn't want to work any other way.
            {
                if (manager == null)
                {
                    manager = MCUServices.Find.AuxCyclopsManager <CyNukeManager>(cyclops);
                }

                OnUpgradeCounted = null; // This method only needs to be called once
            };

            OnFinishedUpgrades = EnhanceCyNukeReactors;
        }