Пример #1
0
        // Token: 0x0600006F RID: 111 RVA: 0x00004414 File Offset: 0x00002614
        public override string GetInspectString()
        {
            var stringBuilder = new StringBuilder();

            stringBuilder.Append(base.GetInspectString());
            if (FlickUtility.WantsToBeOn(this))
            {
                return(stringBuilder.ToString());
            }

            if (stringBuilder.Length > 0)
            {
                stringBuilder.AppendLine();
            }

            stringBuilder.Append("VentClosed".Translate());

            return(stringBuilder.ToString());
        }
Пример #2
0
 public float MitigateSurge(float amount)
 {
     if (compBreakdownable == null || !compBreakdownable.BrokenDown)
     {
         if (compBreakdownable != null && breakdownOnTrip)
         {
             compBreakdownable.DoBreakdown();
             return(surgeMitigation);
         }
         else if (compFlickable != null)
         {
             compFlickable.ResetToOn();
             compFlickable.DoFlick();
             FlickUtility.UpdateFlickDesignation(parent);
             return(surgeMitigation);
         }
     }
     return(0.0f);
 }
        public override void PostSpawnSetup(bool respawningAfterLoad)
        {
            base.PostSpawnSetup(respawningAfterLoad);

            RunningTrack_southSheet.Add(RunningTrack_south0);
            RunningTrack_southSheet.Add(RunningTrack_south1);
            RunningTrack_southSheet.Add(RunningTrack_south2);
            RunningTrack_southSheet.Add(RunningTrack_south3);
            RunningTrack_southSheet.Add(RunningTrack_south4);
            RunningTrack_southSheet.Add(RunningTrack_south5);
            RunningTrack_southSheet.Add(RunningTrack_south6);
            RunningTrack_southSheet.Add(RunningTrack_south7);
            RunningTrack_southSheet.Add(RunningTrack_south8);

            RunningTrack_northSheet.Add(RunningTrack_north0);
            RunningTrack_northSheet.Add(RunningTrack_north1);
            RunningTrack_northSheet.Add(RunningTrack_north2);
            RunningTrack_northSheet.Add(RunningTrack_north3);
            RunningTrack_northSheet.Add(RunningTrack_north4);
            RunningTrack_northSheet.Add(RunningTrack_north5);
            RunningTrack_northSheet.Add(RunningTrack_north6);
            RunningTrack_northSheet.Add(RunningTrack_north7);
            RunningTrack_northSheet.Add(RunningTrack_north8);

            RunningTrack_eastSheet.Add(RunningTrack_east0);
            RunningTrack_eastSheet.Add(RunningTrack_east1);
            RunningTrack_eastSheet.Add(RunningTrack_east2);
            RunningTrack_eastSheet.Add(RunningTrack_east3);
            RunningTrack_eastSheet.Add(RunningTrack_east4);
            RunningTrack_eastSheet.Add(RunningTrack_east5);
            RunningTrack_eastSheet.Add(RunningTrack_east6);
            RunningTrack_eastSheet.Add(RunningTrack_east7);
            RunningTrack_eastSheet.Add(RunningTrack_east8);

            compMannable = parent.TryGetComp <CompMannable>();
            if (base.Props.basePowerConsumption <= 0f && !parent.IsBrokenDown() && FlickUtility.WantsToBeOn(parent))
            {
                base.PowerOn = true;
            }

            //Log.Message("RunningTrack_southSheet frames count = " + RunningTrack_southSheet.Count);
        }
            public void Flick()
            {
                if (FlickComp == null)
                {
                    return;
                }

                bool currentWantsToBeOn = (bool)WantsToBeOnInfo.GetValue(FlickComp);

                WantsToBeOnInfo.SetValue(FlickComp, !currentWantsToBeOn);

                if (InstantFlickActive)
                {
                    FlickComp.DoFlick();
                }
                else
                {
                    FlickUtility.UpdateFlickDesignation(Thing);
                }
            }
Пример #5
0
        public override string GetInspectString()
        {
            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.Append(base.GetInspectString());
            if (stringBuilder.Length != 0)
            {
                stringBuilder.AppendLine();
            }
            stringBuilder.Append("PowerSwitch_Power".Translate() + ": ");
            if (FlickUtility.WantsToBeOn(this))
            {
                stringBuilder.Append("On".Translate().ToLower());
            }
            else
            {
                stringBuilder.Append("Off".Translate().ToLower());
            }
            return(stringBuilder.ToString());
        }
 public override IEnumerable <Command> CompGetGizmosExtra()
 {
     if (canSwitchModes)
     {
         Command_Action commandModeSwitch = new Command_Action();
         commandModeSwitch.groupKey = 676192;
         if (switchedToChunkSilo)
         {
             commandModeSwitch.defaultLabel = "CompRTDeviceModeSwitcher_StockpileModeLabel".Translate();
             commandModeSwitch.defaultDesc  = "CompRTDeviceModeSwitcher_StockpileModeDesc".Translate();
             commandModeSwitch.icon         = Resources.stockpileTexture;
         }
         else
         {
             commandModeSwitch.defaultLabel = "CompRTDeviceModeSwitcher_ChunkSiloModeLabel".Translate();
             commandModeSwitch.defaultDesc  = "CompRTDeviceModeSwitcher_ChunkSiloModeDesc".Translate();
             commandModeSwitch.icon         = Resources.chunkSiloTexture;
         }
         commandModeSwitch.action = () =>
         {
             CompFlickable compFlickable = parent.TryGetComp <CompFlickable>();
             if (compFlickable != null)
             {
                 compFlickable.ResetToOn();
                 compFlickable.DoFlick();
                 FlickUtility.UpdateFlickDesignation(parent);
             }
             if (switchedToChunkSilo)
             {
                 CompRTQuantumChunkSilo compChunkSilo = parent.TryGetComp <CompRTQuantumChunkSilo>();
                 if (compChunkSilo != null)
                 {
                     compChunkSilo.EmptyOut();
                 }
             }
             switchedToChunkSilo = !switchedToChunkSilo;
             SortOutComps();
         };
         yield return(commandModeSwitch);
     }
 }
Пример #7
0
        // Token: 0x0600006E RID: 110 RVA: 0x00004338 File Offset: 0x00002538
        public override void TickRare()
        {
            var tempRange = default(FloatRange);

            GetSafeTemps(this, UseFixed, out var tempMin, out var tempMax);
            tempRange.min = tempMin;
            tempRange.max = tempMax;
            if (UseFixed && RPGVentCheckTemps(this, tempRange) || !UseFixed)
            {
                if (!InRangeATM && VentIsWorking(this))
                {
                    InRangeATM = !InRangeATM;
                    if (!flickableComp.SwitchIsOn)
                    {
                        flickableComp.DoFlick();
                    }
                }

                if (!FlickUtility.WantsToBeOn(this))
                {
                    return;
                }

                if (VentIsWorking(this))
                {
                    GenTemperature.EqualizeTemperaturesThroughBuilding(this, 20f, true);
                    return;
                }

                GenTemperature.EqualizeTemperaturesThroughBuilding(this, 14f, true);
            }
            else
            {
                InRangeATM = false;
                if (VentIsWorking(this) && flickableComp.SwitchIsOn)
                {
                    flickableComp.DoFlick();
                }
            }
        }
        public void ProcessCell(IntVec3 cell)
        {
            PowerNet powerNet = PowerNetGrid.TransmittedPowerNetAt(cell);

            if (powerNet != null)
            {
                float maxEnergy    = 0.0f;
                float storedEnergy = 0.0f;
                float currentRate  = powerNet.CurrentEnergyGainRate();
                foreach (CompPowerBattery compPowerBattery in powerNet.batteryComps)
                {
                    maxEnergy    += compPowerBattery.Props.storedEnergyMax;
                    storedEnergy += compPowerBattery.StoredEnergy;
                }

                if (!compFlickable.SwitchIsOn &&
                    currentRate < 0 &&
                    storedEnergy < -currentRate * GenDate.TicksPerHour / 6.0f)
                {
                    System.Reflection.FieldInfo fieldInfo = typeof(CompFlickable).GetField(
                        "wantSwitchOn",                         // Thanks Haplo!
                        System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
                    fieldInfo.SetValue(compFlickable, true);
                    compFlickable.SwitchIsOn = true;
                    FlickUtility.UpdateFlickDesignation(parent);
                }
                else
                {
                    if (storedEnergy >= maxEnergy)
                    {
                        System.Reflection.FieldInfo fieldInfo = typeof(CompFlickable).GetField(
                            "wantSwitchOn",                             // Thanks Haplo!
                            System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
                        fieldInfo.SetValue(compFlickable, false);
                        compFlickable.SwitchIsOn = false;
                        FlickUtility.UpdateFlickDesignation(parent);
                    }
                }
            }
        }
Пример #9
0
        public void ProcessCell(IntVec3 cell)
        {
            PowerNet powerNet = parent.Map.powerNetGrid.TransmittedPowerNetAt(cell);

            if (powerNet != null)
            {
                float maxEnergy    = 0.0f;
                float storedEnergy = 0.0f;
                float currentRate  = powerNet.CurrentEnergyGainRate();
                foreach (CompPowerBattery compPowerBattery in powerNet.batteryComps)
                {
                    maxEnergy    += compPowerBattery.Props.storedEnergyMax;
                    storedEnergy += compPowerBattery.StoredEnergy;
                }

                if (compFlickable.SwitchIsOn)
                {
                    if (storedEnergy >= maxEnergy)
                    {
                        wantsSwitchOnField.SetValue(compFlickable, false);
                        compFlickable.SwitchIsOn = false;
                        FlickUtility.UpdateFlickDesignation(parent);
                    }
                }
                else
                {
                    if (currentRate <= 0 &&
                        storedEnergy <= -currentRate * GenDate.TicksPerHour / 6.0f)
                    {
                        wantsSwitchOnField.SetValue(compFlickable, true);
                        compFlickable.SwitchIsOn = true;
                        FlickUtility.UpdateFlickDesignation(parent);
                    }
                }
            }
        }
Пример #10
0
        protected override Job TryGivePlayJob(Pawn pawn, Thing thing)
        {
            CompPowerTrader compPowerTrader = (CompPowerTrader)thing.TryGetComp <CompPowerTrader>();

            if (compPowerTrader != null)
            {
                if (compPowerTrader.PowerNet.CurrentStoredEnergy() <= 0 || thing.IsBrokenDown() || !FlickUtility.WantsToBeOn(thing))
                {
                    return(null);
                }
            }

            Room room = pawn.GetRoom(RegionType.Set_Passable);

            if (room != null)
            {
                List <Building_Bed> containedBeds = room.ContainedBeds.ToList();
                for (int i = 0; i < containedBeds.Count(); i++)
                {
                    Building_Bed bed = containedBeds[i];
                    if (bed.owners != null)
                    {
                        for (int j = 0; j < bed.owners.Count(); j++)
                        {
                            Pawn bedOwner = bed.owners[j];
                            if (bedOwner.CurrentBed() == bed)
                            {
                                return(null);
                            }
                        }
                    }
                }
            }

            List <IntVec3> thingWatchCells = WatchBuildingUtility.CalculateWatchCells(thing.def, thing.Position, thing.Rotation, thing.Map).ToList();

            for (int i = 0; i < thingWatchCells.Count(); i++)
            {
                int     cellRand = Rand.RangeInclusive(0, thingWatchCells.Count());
                IntVec3 cell     = thingWatchCells[cellRand];
                if (cell.Standable(pawn.Map))
                {
                    //Log.Message(pawn + " watch cell = " + cellRand + " of " + thingWatchCells.Count());
                    return(new Job(def.jobDef, thing, cell));
                }
            }

            return(null);
        }
Пример #11
0
        public override void CompTick()
        {
            base.CompTick();

            if (parent.IsHashIntervalTick(8))
            {
                if (compPowerTrader != null)
                {
                    if (compPowerTrader.PowerNet.CurrentStoredEnergy() <= 0 || parent.IsBrokenDown() || !FlickUtility.WantsToBeOn(parent))
                    {
                        powered = false;
                        return;
                    }
                }

                powered = true;
                //Log.Message("currFrame = " + currFrame);
                if (currFrame >= 19)
                {
                    currFrame = -1;
                }
                currFrame++;
            }
        }
        public override void PostSpawnSetup(bool respawningAfterLoad)
        {
            base.PostSpawnSetup(respawningAfterLoad);
            this.refuelableComp         = this.parent.GetComp <CompRefuelable>();
            this.breakdownableComp      = this.parent.GetComp <CompBreakdownable>();
            this.variableHeatPusherComp = this.parent.GetComp <CompVariableHeatPusher>();

            if (base.Props.basePowerConsumption < 0f && !this.parent.IsBrokenDown() && FlickUtility.WantsToBeOn(this.parent))
            {
                base.PowerOn = true;
            }
        }
Пример #13
0
 public override void PostSpawnSetup(bool respawningAfterLoad)
 {
     base.PostSpawnSetup(respawningAfterLoad);
     //this.mannableComp = this.parent.GetComp<CompMannable>();
     this.breakdownableComp = this.parent.GetComp <CompBreakdownable>();
     this.hpgmcyclecomp     = this.parent.GetComp <HPGMcyclecomp>();
     if (base.Props.basePowerConsumption < 0f && !this.parent.IsBrokenDown() && FlickUtility.WantsToBeOn(this.parent))
     {
         base.PowerOn = true;
     }
 }
Пример #14
0
        public void WaterNetTick()
        {
            float num  = this.CurrentWaterGainRate();
            float num2 = this.CurrentStoredWater();

            if (num2 + num >= -1E-07f && !this.Map.gameConditionManager.ConditionIsActive(GameConditionDefOf.SolarFlare))
            {
                float num3;
                if (this.batteryComps.Count > 0 && num2 >= 0.1f)
                {
                    num3 = num2 - 5f;
                }
                else
                {
                    num3 = num2;
                }
                if (UnityData.isDebugBuild)
                {
                    this.debugLastApparentStoredWater = num3;
                    this.debugLastCreatedWater        = num;
                    this.debugLastRawStoredWater      = num2;
                }
                if (num3 + num >= 0f)
                {
                    WaterNet.partsWantingWaterOn.Clear();
                    for (int i = 0; i < this.WaterComps.Count; i++)
                    {
                        if (!this.WaterComps[i].WaterOn && FlickUtility.WantsToBeOn(this.WaterComps[i].parent) && !this.WaterComps[i].parent.IsBrokenDown())
                        {
                            WaterNet.partsWantingWaterOn.Add(this.WaterComps[i]);
                        }
                    }
                    if (WaterNet.partsWantingWaterOn.Count > 0)
                    {
                        int num4 = 200 / WaterNet.partsWantingWaterOn.Count;
                        if (num4 < 30)
                        {
                            num4 = 30;
                        }
                        if (Find.TickManager.TicksGame % num4 == 0)
                        {
                            int num5 = Mathf.Max(1, Mathf.RoundToInt((float)WaterNet.partsWantingWaterOn.Count * 0.05f));
                            for (int j = 0; j < num5; j++)
                            {
                                CompWaterTrader compWaterTrader = WaterNet.partsWantingWaterOn.RandomElement <CompWaterTrader>();
                                if (!compWaterTrader.WaterOn)
                                {
                                    if (num + num2 >= -(compWaterTrader.WaterOutputPerTick + 1E-07f))
                                    {
                                        compWaterTrader.WaterOn = true;
                                        num += compWaterTrader.WaterOutputPerTick;
                                    }
                                }
                            }
                        }
                    }
                }
                this.ChangeStoredWater(num);
            }
            else if (Find.TickManager.TicksGame % 20 == 0)
            {
                WaterNet.potentialShutdownParts.Clear();
                for (int k = 0; k < this.WaterComps.Count; k++)
                {
                    if (this.WaterComps[k].WaterOn && this.WaterComps[k].WaterOutputPerTick < 0f)
                    {
                        WaterNet.potentialShutdownParts.Add(this.WaterComps[k]);
                    }
                }
                if (WaterNet.potentialShutdownParts.Count > 0)
                {
                    int num6 = Mathf.Max(1, Mathf.RoundToInt((float)WaterNet.potentialShutdownParts.Count * 0.05f));
                    for (int l = 0; l < num6; l++)
                    {
                        WaterNet.potentialShutdownParts.RandomElement <CompWaterTrader>().WaterOn = false;
                    }
                }
            }
        }
Пример #15
0
 public static bool Prefix(PowerNet __instance)
 {
     if (__instance.transmitters.Any(connector => connector.parent.GetComp <CompSteamAlternator>() != null))
     {
         float num  = __instance.CurrentEnergyGainRate();
         float num2 = __instance.CurrentStoredEnergy();
         if (num2 + num >= -1E-07f)
         {
             float num3;
             if (__instance.batteryComps.Count > 0 && num2 >= 0.1f)
             {
                 num3 = num2 - 5f;
             }
             else
             {
                 num3 = num2;
             }
             if (num3 + num >= 0f)
             {
                 List <CompPowerTrader> partsWantingPowerOn = new List <CompPowerTrader>();
                 for (int i = 0; i < __instance.powerComps.Count; i++)
                 {
                     if (!__instance.powerComps[i].PowerOn && FlickUtility.WantsToBeOn(__instance.powerComps[i].parent) && !__instance.powerComps[i].parent.IsBrokenDown())
                     {
                         partsWantingPowerOn.Add(__instance.powerComps[i]);
                     }
                 }
                 if (partsWantingPowerOn.Count > 0)
                 {
                     int num4 = 200 / partsWantingPowerOn.Count;
                     if (num4 < 30)
                     {
                         num4 = 30;
                     }
                     if (Find.TickManager.TicksGame % num4 == 0)
                     {
                         CompPowerTrader compPowerTrader = partsWantingPowerOn.RandomElement();
                         if (num + num2 >= -(compPowerTrader.EnergyOutputPerTick + 1E-07f))
                         {
                             compPowerTrader.PowerOn = true;
                             num += compPowerTrader.EnergyOutputPerTick;
                         }
                     }
                 }
             }
             Traverse.Create(__instance).Method("ChangeStoredEnergy", num).GetValue();
         }
         else if (Find.TickManager.TicksGame % 20 == 0)
         {
             List <CompPowerTrader> potentialShutdownParts = new List <CompPowerTrader>();
             for (int j = 0; j < __instance.powerComps.Count; j++)
             {
                 if (__instance.powerComps[j].PowerOn && __instance.powerComps[j].EnergyOutputPerTick < 0f)
                 {
                     potentialShutdownParts.Add(__instance.powerComps[j]);
                 }
             }
             if (potentialShutdownParts.Count > 0)
             {
                 potentialShutdownParts.RandomElement().PowerOn = false;
             }
         }
         return(false);
     }
     return(true);
 }
Пример #16
0
        public void PowerNetTick()
        {
            float num  = this.CurrentEnergyGainRate();
            float num2 = this.CurrentStoredEnergy();

            if (num2 + num >= -1E-07f && !this.shieldNetManager.map.gameConditionManager.ConditionIsActive(GameConditionDefOf.SolarFlare))
            {
                float num3;
                if (this.batteryComps.Count > 0 && num2 >= 0.1f)
                {
                    num3 = num2 - 5f;
                }
                else
                {
                    num3 = num2;
                }
                if (UnityData.isDebugBuild)
                {
                    this.debugLastApparentStoredEnergy = num3;
                    this.debugLastCreatedEnergy        = num;
                    this.debugLastRawStoredEnergy      = num2;
                }
                if (num3 + num >= 0f)
                {
                    ShieldNet.partsWantingPowerOn.Clear();
                    for (int i = 0; i < this.powerComps.Count; i++)
                    {
                        if (!this.powerComps[i].PowerOn && FlickUtility.WantsToBeOn(this.powerComps[i].parent) && !this.powerComps[i].parent.IsBrokenDown())
                        {
                            ShieldNet.partsWantingPowerOn.Add(this.powerComps[i]);
                        }
                    }
                    if (ShieldNet.partsWantingPowerOn.Count > 0)
                    {
                        int num4 = 200 / ShieldNet.partsWantingPowerOn.Count;
                        if (num4 < 30)
                        {
                            num4 = 30;
                        }
                        if (Find.TickManager.TicksGame % num4 == 0)
                        {
                            CompShieldTrader compPowerTrader = ShieldNet.partsWantingPowerOn.RandomElement <CompShieldTrader>();
                            if (num + num2 >= -(compPowerTrader.EnergyOutputPerTick + 1E-07f))
                            {
                                compPowerTrader.PowerOn = true;
                                num += compPowerTrader.EnergyOutputPerTick;
                            }
                        }
                    }
                }
                this.ChangeStoredEnergy(num);
            }
            else if (Find.TickManager.TicksGame % 20 == 0)
            {
                ShieldNet.potentialShutdownParts.Clear();
                for (int j = 0; j < this.powerComps.Count; j++)
                {
                    if (this.powerComps[j].PowerOn && this.powerComps[j].EnergyOutputPerTick < 0f)
                    {
                        ShieldNet.potentialShutdownParts.Add(this.powerComps[j]);
                    }
                }
                if (ShieldNet.potentialShutdownParts.Count > 0)
                {
                    ShieldNet.potentialShutdownParts.RandomElement <CompShieldTrader>().PowerOn = false;
                }
            }
        }
 public override void PostSpawnSetup(bool respawningAfterLoad)
 {
     base.PostSpawnSetup(respawningAfterLoad);
     refuelableComp    = parent.GetComp <CompRefuelable>();
     breakdownableComp = parent.GetComp <CompBreakdownable>();
     waterTankComp     = parent.GetComp <CompWaterTank>();
     if ((Props.baseSteamConsumption < 0f || Props.baseWaterConsumption < 0f) && !parent.IsBrokenDown() && FlickUtility.WantsToBeOn(parent))
     {
         SteamOn = true;
     }
 }
Пример #18
0
 public override void PostSpawnSetup(bool respawningAfterLoad)
 {
     base.PostSpawnSetup(respawningAfterLoad);
     this.breakdownableComp = this.parent.GetComp <CompBreakdownable>();
     if (base.Props.basePowerConsumption < 0f && !this.parent.IsBrokenDown() && FlickUtility.WantsToBeOn(this.parent))
     {
         base.PowerOn = true;
     }
     if (parent.GetComp <CompPowerBattery>() != null)
     {
         compPowerBattery = parent.GetComp <CompPowerBattery>();
     }
 }
Пример #19
0
        static bool Prefix(ref PowerNet __instance)
        {
            float extra = __instance.CurrentEnergyGainRate() * RefcellRespeedConfig.currentTimeMultiplier;
            float num1  = __instance.CurrentStoredEnergy();

            if ((double)num1 + (double)extra >= -1.0000000116861E-07 && !__instance.Map.gameConditionManager.ElectricityDisabled)
            {
                if ((__instance.batteryComps.Count <= 0 || (double)num1 < 0.100000001490116 ? (double)num1 : (double)(num1 - 5f)) + (double)extra >= 0.0)
                {
                    PowerNet.partsWantingPowerOn.Clear();
                    for (int index = 0; index < __instance.powerComps.Count; ++index)
                    {
                        if (!__instance.powerComps[index].PowerOn && FlickUtility.WantsToBeOn((Thing)__instance.powerComps[index].parent) && !__instance.powerComps[index].parent.IsBrokenDown())
                        {
                            PowerNet.partsWantingPowerOn.Add(__instance.powerComps[index]);
                        }
                    }
                    if (PowerNet.partsWantingPowerOn.Count > 0)
                    {
                        int num2 = 200 / PowerNet.partsWantingPowerOn.Count;
                        if (num2 < 30)
                        {
                            num2 = 30;
                        }
                        if (Find.TickManager.TicksGame % num2 < RefcellRespeedConfig.currentTimeMultiplier)
                        {
                            int num3 = Mathf.Max(1, Mathf.RoundToInt((float)PowerNet.partsWantingPowerOn.Count * 0.05f));
                            for (int index = 0; index < num3; ++index)
                            {
                                CompPowerTrader compPowerTrader = PowerNet.partsWantingPowerOn.RandomElement <CompPowerTrader>();
                                if (!compPowerTrader.PowerOn && (double)extra + (double)num1 >= -((double)compPowerTrader.EnergyOutputPerTick + 1.0000000116861E-07))
                                {
                                    compPowerTrader.PowerOn = true;
                                    extra += compPowerTrader.EnergyOutputPerTick;
                                }
                            }
                        }
                    }
                }
                __instance.ChangeStoredEnergy(extra);
            }
            else
            {
                if (Find.TickManager.TicksGame % 20 > RefcellRespeedConfig.currentTimeMultiplier - 1)
                {
                    return(false);
                }
                PowerNet.potentialShutdownParts.Clear();
                for (int index = 0; index < __instance.powerComps.Count; ++index)
                {
                    if (__instance.powerComps[index].PowerOn && (double)__instance.powerComps[index].EnergyOutputPerTick < 0.0)
                    {
                        PowerNet.potentialShutdownParts.Add(__instance.powerComps[index]);
                    }
                }
                if (PowerNet.potentialShutdownParts.Count <= 0)
                {
                    return(false);
                }
                int num2 = Mathf.Max(1, Mathf.RoundToInt((float)PowerNet.potentialShutdownParts.Count * 0.05f));
                for (int index = 0; index < num2; ++index)
                {
                    PowerNet.potentialShutdownParts.RandomElement <CompPowerTrader>().PowerOn = false;
                }
            }
            return(false);
        }
Пример #20
0
        protected override IEnumerable <Toil> MakeNewToils()
        {
            this.EndOnDespawnedOrNull(thingInd, JobCondition.Incompletable);             // thing
            this.FailOnForbidden(thingInd);

            yield return(Toils_Goto.GotoCell(TargetIndex.B, PathEndMode.OnCell));            // cell

            CompPowerTrader compPowerTrader = (CompPowerTrader)thing.TryGetComp <CompPowerTrader>();
            float           statValue       = TargetThingA.GetStatValue(StatDefOf.JoyGainFactor, true);
            Toil            sing            = new Toil();

            sing.tickAction = delegate
            {
                pawn.rotationTracker.FaceCell(TargetA.Cell);

                if (compPowerTrader != null)
                {
                    if (compPowerTrader.PowerNet.CurrentStoredEnergy() <= 0 || thing.IsBrokenDown() || !FlickUtility.WantsToBeOn(thing))
                    {
                        pawn.jobs.EndCurrentJob(JobCondition.InterruptForced);
                    }
                }

                JoyUtility.JoyTickCheckEnd(pawn, JoyTickFullJoyAction.EndJob, statValue);

                if (pawn.IsHashIntervalTick(100))
                {
                    MoteMaker.ThrowMetaIcon(pawn.Position, pawn.Map, ThingDefOf.Mote_Note);

                    // add thought to everyone in room

                    Room room = pawn.GetRoom(RegionType.Set_Passable);
                    if (room != null)
                    {
                        int         stage    = 0;
                        SkillRecord artSkill = pawn.skills.GetSkill(SkillDefOf.Artistic);
                        if (!artSkill.TotallyDisabled)
                        {
                            float stageFloat = GetSingThoughtState(artSkill.Level) * pawn.health.capacities.GetLevel(PawnCapacityDefOf.Talking) * pawn.health.capacities.GetLevel(PawnCapacityDefOf.Hearing);
                            stage = (int)stageFloat;
                            if (stage > 4)
                            {
                                stage = 4;
                            }
                        }

                        List <Thing> containedAndAdjacentThings = room.ContainedAndAdjacentThings;
                        for (int i = 0; i < containedAndAdjacentThings.Count; i++)
                        {
                            Pawn pawn2 = containedAndAdjacentThings[i] as Pawn;
                            if (pawn2 != null)
                            {
                                if (pawn2 != pawn && pawn2.RaceProps.Humanlike)
                                {
                                    //Log.Message("Singer: " + pawn + ". Stage: " + stage);
                                    //Log.Message("Listener: " + pawn2);
                                    if (pawn.health.hediffSet.HasHediff(HediffDefOf.AvaliBiology))                                     // Avali singer
                                    {
                                        if (pawn2.health.hediffSet.HasHediff(HediffDefOf.AvaliBiology))                                // Avali listener
                                        {
                                            if (stage < 2)
                                            {
                                                stage = 2;
                                            }
                                            stage = CheckSingerTraits(stage);
                                            pawn2.GiveThoughtWithStage(ThoughtDefOf.ListenerAvali, stage);
                                        }
                                        else                                         // non Avali listener
                                        {
                                            if (stage < 1)
                                            {
                                                stage = 1;
                                            }
                                            stage = CheckSingerTraits(stage);
                                            pawn2.GiveThoughtWithStage(ThoughtDefOf.ListenerAny, stage);
                                        }
                                    }
                                    else                                     // non Avali singer
                                    {
                                        stage = CheckSingerTraits(stage);
                                        if (pawn2.health.hediffSet.HasHediff(HediffDefOf.AvaliBiology))                                         // Avali listener
                                        {
                                            pawn2.GiveThoughtWithStage(ThoughtDefOf.ListenerAvali, stage);
                                        }
                                        else                                         // non Avali listener
                                        {
                                            pawn2.GiveThoughtWithStage(ThoughtDefOf.ListenerAny, stage);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            };
            sing.handlingFacing      = true;
            sing.socialMode          = RandomSocialMode.Off;
            sing.defaultCompleteMode = ToilCompleteMode.Delay;
            sing.defaultDuration     = job.def.joyDuration;
            sing.AddFinishAction(delegate
            {
                JoyUtility.TryGainRecRoomThought(pawn);
            });

            yield return(sing);

            yield break;
        }
Пример #21
0
 private void SetFlicked(bool flicked)
 {
     wantsSwitchOnField.SetValue(compFlickable, flicked);
     compFlickable.SwitchIsOn = flicked;
     FlickUtility.UpdateFlickDesignation(parent);
 }
Пример #22
0
        public new void PowerNetTick()
        {
            List <CompPowerTrader> partsWantingPowerOn = HighVoltagePowerNet.partsWantingPowerOn;

            float consumed;
            float generated;

            this.GetEnergyRates(out generated, out consumed);
            float gainRate     = consumed + generated;
            float storedEnergy = this.CurrentStoredEnergy();

            if (storedEnergy + gainRate >= -1E-07f && !this.Map.gameConditionManager.ElectricityDisabled)
            {
                float num3;
                if (this.batteryComps.Count > 0 && storedEnergy >= 0.1f)
                {
                    num3 = storedEnergy - 5f;
                }
                else
                {
                    num3 = storedEnergy;
                }
                if (num3 + gainRate >= 0f)
                {
                    partsWantingPowerOn.Clear();
                    for (int i = 0; i < this.powerComps.Count; i++)
                    {
                        if (!this.powerComps[i].PowerOn && FlickUtility.WantsToBeOn(this.powerComps[i].parent) && !this.powerComps[i].parent.IsBrokenDown())
                        {
                            partsWantingPowerOn.Add(this.powerComps[i]);
                        }
                    }
                    if (partsWantingPowerOn.Count > 0)
                    {
                        int num4 = 200 / partsWantingPowerOn.Count;
                        if (num4 < 30)
                        {
                            num4 = 30;
                        }
                        if (Find.TickManager.TicksGame % num4 == 0)
                        {
                            int num5 = Mathf.Max(1, Mathf.RoundToInt((float)partsWantingPowerOn.Count * 0.05f));
                            for (int j = 0; j < num5; j++)
                            {
                                CompPowerTrader compPowerTrader = partsWantingPowerOn.RandomElement <CompPowerTrader>();
                                if (!compPowerTrader.PowerOn && gainRate + storedEnergy >= -(compPowerTrader.EnergyOutputPerTick + 1E-07f))
                                {
                                    compPowerTrader.PowerOn = true;
                                    gainRate += compPowerTrader.EnergyOutputPerTick;
                                }
                            }
                        }
                    }
                }
                this.ChangeStoredEnergy(gainRate);
                return;
            }
            if (Find.TickManager.TicksGame % 20 == 0)
            {
                List <CompPowerTrader> potentialShutdownParts = HighVoltagePowerNet.potentialShutdownParts;
                potentialShutdownParts.Clear();
                for (int k = 0; k < this.powerComps.Count; k++)
                {
                    if (this.powerComps[k].PowerOn && this.powerComps[k].EnergyOutputPerTick < 0f)
                    {
                        potentialShutdownParts.Add(this.powerComps[k]);
                    }
                }
                if (potentialShutdownParts.Count > 0)
                {
                    int num6 = Mathf.Max(1, Mathf.RoundToInt((float)potentialShutdownParts.Count * 0.05f));
                    for (int l = 0; l < num6; l++)
                    {
                        potentialShutdownParts.RandomElement <CompPowerTrader>().PowerOn = false;
                    }
                }
            }
            return;
        }
Пример #23
0
        public override void PostSpawnSetup(bool respawningAfterLoad)
        {
            this.breakdownableComp = this.parent.GetComp <CompBreakdownable>();
            if (base.Props.basePowerConsumption < 0f && !this.parent.IsBrokenDown() && FlickUtility.WantsToBeOn(this.parent))
            {
                base.PowerOn = true;
            }
            if (parent.GetComp <CompPowerBattery>() != null)
            {
                compPowerBattery = parent.GetComp <CompPowerBattery>();
            }
            currentPowerEfficiency = 1;
            additionalEfficiency   = ((CompPropertie_ResonancePowerPlant)Props).additionalEfficiency;
            linkedBuildings.Add(parent);
            LinkToNearbyBuildings();

            /*Log.Message(parent.def.label + ": " + parent.GetHashCode() + " List");
             * foreach(Thing t in linkedBuildings)
             * {
             *  Log.Message(t.def.label + ": " + t.GetHashCode());
             * }*/
        }
Пример #24
0
        public void PowerNetTick()
        {
            float num  = this.CurrentEnergyGainRate();
            float num2 = this.CurrentStoredEnergy();

            if (num2 + num >= -1E-07f)
            {
                float num3;
                if (this.batteryComps.Count > 0 && num2 >= 0.1f)
                {
                    num3 = num2 - 5f;
                }
                else
                {
                    num3 = num2;
                }

                if (num3 + num >= 0f)
                {
                    partsWantingPowerOn.Clear();
                    for (int i = 0; i < this.powerComps.Count; i++)
                    {
                        if (!this.powerComps[i].PowerOn && FlickUtility.WantsToBeOn(this.powerComps[i].parent) && !this.powerComps[i].parent.IsBrokenDown())
                        {
                            partsWantingPowerOn.Add(this.powerComps[i]);
                        }
                    }
                    if (partsWantingPowerOn.Count > 0)
                    {
                        int num4 = 200 / partsWantingPowerOn.Count;
                        if (num4 < 30)
                        {
                            num4 = 30;
                        }
                        if (Find.TickManager.TicksGame % num4 == 0)
                        {
                            int num5 = Mathf.Max(1, Mathf.RoundToInt((float)partsWantingPowerOn.Count * 0.05f));
                            for (int j = 0; j < num5; j++)
                            {
                                CompPipeTrader compPowerTrader = partsWantingPowerOn.RandomElement <CompPipeTrader>();
                                if (!compPowerTrader.PowerOn)
                                {
                                    if (num + num2 >= -(compPowerTrader.EnergyOutputPerTick + 1E-07f))
                                    {
                                        compPowerTrader.PowerOn = true;
                                        num += compPowerTrader.EnergyOutputPerTick;
                                    }
                                }
                            }
                        }
                    }
                }
                this.ChangeStoredEnergy(num);
            }
            else if (Find.TickManager.TicksGame % 20 == 0)
            {
                potentialShutdownParts.Clear();
                for (int k = 0; k < this.powerComps.Count; k++)
                {
                    if (this.powerComps[k].PowerOn && this.powerComps[k].EnergyOutputPerTick < 0f)
                    {
                        potentialShutdownParts.Add(this.powerComps[k]);
                    }
                }
                if (potentialShutdownParts.Count > 0)
                {
                    int num6 = Mathf.Max(1, Mathf.RoundToInt((float)potentialShutdownParts.Count * 0.05f));
                    for (int l = 0; l < num6; l++)
                    {
                        potentialShutdownParts.RandomElement <CompPipeTrader>().PowerOn = false;
                    }
                }
            }
        }
 private bool WantOnline()
 {
     return(FlickUtility.WantsToBeOn(parent));
 }
Пример #26
0
 public override void PostSpawnSetup(bool respawningAfterLoad)
 {
     this.breakdownableComp = this.parent.GetComp <CompBreakdownable>();
     if (base.Props.basePowerConsumption < 0f && !this.parent.IsBrokenDown() && FlickUtility.WantsToBeOn(this.parent))
     {
         base.PowerOn = true;
     }
     if (parent.GetComp <CompPowerBattery>() != null)
     {
         compPowerBattery = parent.GetComp <CompPowerBattery>();
     }
     currentPowerEfficiency = 1;
     additionalEfficiency   = ((CompPropertie_ResonancePowerPlant)Props).additionalEfficiency;
     linkedBuildings.Add(parent);
     LinkToNearbyBuildings();
 }