Exemple #1
0
 /// <summary>
 /// 各メンバーの値を設定する。CalcValue()の前に呼び出して設定しないといけない。
 /// </summary>
 public void SetValue(Color c, EngineDefineEx engineDefineEx, EngineConfig config, EnginePreset preset, bool ponder)
 {
     EngineDefines[(int)c] = engineDefineEx;
     EngineConfigs[(int)c] = config;
     EnginePresets[(int)c] = preset;
     Ponders[(int)c]       = ponder;
 }
Exemple #2
0
 /// <summary>
 /// 初期化する。
 /// </summary>
 public void Init()
 {
     EngineDefines = new EngineDefineEx[2];      /*  { null, null }    */
     EngineConfigs = new EngineConfig[2];        /*  { null, null }    */
     EnginePresets = new EnginePreset[2];        /*  { null, null }    */
     Ponders       = new bool[2];                /*  { false , false } */
     HashSize      = new long[2];                /*  { 0, 0 }          */
     Threads       = new int[2];                 /*  { 0, 0 }          */
 }
        private bool TryRefreshEngineLoadout(EngineStorage engineStorage, EnginePreset enginePreset)
        {
            if (OverrideLoadoutWasBlocked(engineStorage))
            {
                return(false);
            }

            var acceleration = 0f;
            var topSpeed     = 0f;
            var fuelEconomy  = 0f;

            for (var slot = 0; slot < engineStorage.inventory.capacity; slot++)
            {
                var engineItemType = engineStorage.slotTypes[slot];

                var item      = engineStorage.inventory.GetSlot(slot);
                var itemValue = 0f;
                if (item != null && !item.isBroken)
                {
                    var component = item.info.GetComponent <ItemModEngineItem>();
                    if (component != null)
                    {
                        itemValue = item.amount * engineStorage.GetTierValue(component.tier);
                    }
                }

                if (engineItemType.BoostsAcceleration())
                {
                    acceleration += Math.Max(itemValue, enginePreset.acceleration);
                }

                if (engineItemType.BoostsFuelEconomy())
                {
                    fuelEconomy += Math.Max(itemValue, enginePreset.fuelEconomy);
                }

                if (engineItemType.BoostsTopSpeed())
                {
                    topSpeed += Math.Max(itemValue, enginePreset.topSpeed);
                }
            }

            engineStorage.isUsable = acceleration > 0 && topSpeed > 0 && fuelEconomy > 0;
            engineStorage.accelerationBoostPercent = acceleration / engineStorage.accelerationBoostSlots;
            engineStorage.fuelEconomyBoostPercent  = fuelEconomy / engineStorage.fuelEconomyBoostSlots;
            engineStorage.topSpeedBoostPercent     = topSpeed / engineStorage.topSpeedBoostSlots;
            engineStorage.SendNetworkUpdate();
            engineStorage.GetEngineModule()?.RefreshPerformanceStats(engineStorage);

            return(true);
        }