Exemple #1
0
 static HighVoltageBase()
 {
     foreach (ThingDef def in DefDatabase <ThingDef> .AllDefsListForReading)
     {
         if (def.GetCompProperties <CompProperties_DVoltage>() == null)
         {
             CompProperties_Power powerComp = def.GetCompProperties <CompProperties_Power>();
             if (powerComp != null)
             {
                 if (powerComp.compClass == typeof(CompPowerTransmitter))
                 {
                     if (def.stuffCategories == null)
                     {
                         if (def.costList != null)
                         {
                             StuffIt(def);
                         }
                         def.ResolveReferences();
                         def.PostLoad();
                     }
                     CompProperties_DVoltage comp = new CompProperties_DVoltage();
                     def.comps.Add(comp);
                 }
             }
         }
     }
     CostListCalculator.Reset();
     GenConstruct.Reset();
     DefDatabase <DesignationCategoryDef> .ResolveAllReferences();
 }
Exemple #2
0
        public override void SetUpPowerVars()
        {
            base.SetUpPowerVars();
            CompProperties_Power props = base.Props;

            this.PowerOutput        = -1f * props.basePowerConsumption;
            this.powerLastOutputted = (props.basePowerConsumption <= 0f);

            // === NEW ADDITION ===
            CompProperties_Power_EmergencyPowerCore props2 = base.Props as CompProperties_Power_EmergencyPowerCore;

            if (props == null)
            {
                return;
            }

            this.generatingTime             = props2.baseGeneratingTime;
            this.cooldownTime               = props2.baseCoolingTime;
            this.showEmergencyTimeInSeconds = props2.showEmergencyTimeInSeconds;
            this.explosionChance            = props2.ExplosionChance;
            this.explosionRadius            = props2.ExplosionRadius;
            this.explosionDamageDef         = props2.ExplosionDamageDef;

            // === END NEW ADDITION ===
        }
Exemple #3
0
        public void Add(Building b)
        {
            if (b.def.building != null && b.def.building.isNaturalRock)
            {
                return;
            }
            if (b.Faction == Faction.OfPlayer)
            {
                allBuildingsColonist.Add(b);
                if (b is IAttackTarget)
                {
                    allBuildingsColonistCombatTargets.Add(b);
                }
            }
            else
            {
                allBuildingsNonColonist.Add(b);
            }
            CompProperties_Power compProperties = b.def.GetCompProperties <CompProperties_Power>();

            if (compProperties != null && compProperties.shortCircuitInRain)
            {
                allBuildingsColonistElecFire.Add(b);
            }
        }
 public override void SpawnSetup(Map map, bool respawningAfterLoad)
 {
     base.SpawnSetup(map, respawningAfterLoad);
     refuelable = GetComp <CompRefuelable>();
     power      = GetComp <CompPowerTrader>();
     props      = power.Props;
     fuelprops  = refuelable.Props;
     fuelprops.fuelConsumptionRate = CryptoRestoreSettings.fuelRate / 60f;
 }
Exemple #5
0
 public override void TickRare()
 {
     if (this.compPowerTrader.PowerOn)
     {
         float ambientTemperature = base.AmbientTemperature;
         float num;
         if (ambientTemperature > this.compTempControl.targetTemperature - 1 && ambientTemperature < this.compTempControl.targetTemperature + 1)
         {
             num = 0f;
         }
         else if (ambientTemperature < this.compTempControl.targetTemperature - 1)
         {
             if (ambientTemperature < 20f)
             {
                 num = 1f;
             }
             else if (ambientTemperature > 150f)
             {
                 num = 0f;
             }
             else
             {
                 num = Mathf.InverseLerp(150f, 100f, ambientTemperature);
             }
         }
         else if (ambientTemperature > this.compTempControl.targetTemperature + 1)
         {
             if (ambientTemperature < -50f)
             {
                 num = -Mathf.InverseLerp(-273f, -50f, ambientTemperature);
             }
             else
             {
                 num = -1f;
             }
         }
         else
         {
             num = 0f;
         }
         float energyLimit          = this.compTempControl.Props.energyPerSecond * num * 4.16666651f;
         float num2                 = GenTemperature.ControlTemperatureTempChange(base.Position, base.Map, energyLimit, this.compTempControl.targetTemperature);
         bool  flag                 = !Mathf.Approximately(num2, 0f);
         CompProperties_Power props = this.compPowerTrader.Props;
         if (flag)
         {
             this.GetRoom(RegionType.Set_All).Temperature += num2;
             this.compPowerTrader.PowerOutput              = -props.basePowerConsumption;
         }
         else
         {
             this.compPowerTrader.PowerOutput = -props.basePowerConsumption * this.compTempControl.Props.lowPowerConsumptionFactor;
         }
         this.compTempControl.operatingAtHighPower = flag;
     }
 }
Exemple #6
0
        private void StartSustainerPoweredIfInactive()
        {
            CompProperties_Power props = base.Props;

            if (!props.soundAmbientPowered.NullOrUndefined() && this.sustainerPowered == null)
            {
                SoundInfo info = SoundInfo.InMap(this.parent, MaintenanceType.None);
                this.sustainerPowered = props.soundAmbientPowered.TrySpawnSustainer(info);
            }
        }
        public static void ApplyFactor(float newFactor)
        {
            CreateBaseEnergyMap();

            foreach (KeyValuePair <string, float> basePower in BaseEnergy)
            {
                ThingDef             def   = FridgeDefs[basePower.Key];
                CompProperties_Power power = def.GetCompProperties <CompProperties_Power>();
                power.basePowerConsumption = basePower.Value * newFactor;
            }
        }
Exemple #8
0
        public override void Apply()
        {
            ThoughtDef.Named("PsychicEmanatorSoothe").stages.First().baseMoodEffect = 6f;
            ThingDefOf.PsychicEmanator.specialDisplayRadius = 20f;
            CompProperties_Power power = (CompProperties_Power)ThingDefOf.PsychicEmanator.comps.FirstOrDefault(x => x is CompProperties_Power);

            if (power != null)
            {
                power.basePowerConsumption *= 1.5f;
            }
            this.Active = true;
        }
Exemple #9
0
        public void Remove(Building b)
        {
            allBuildingsColonist.Remove(b);
            if (b is IAttackTarget)
            {
                allBuildingsColonistCombatTargets.Remove(b);
            }
            CompProperties_Power compProperties = b.def.GetCompProperties <CompProperties_Power>();

            if (compProperties != null && compProperties.shortCircuitInRain)
            {
                allBuildingsColonistElecFire.Remove(b);
            }
        }
        public void Remove(Building b)
        {
            this.allBuildingsColonist.Remove(b);
            if (b is IAttackTarget)
            {
                this.allBuildingsColonistCombatTargets.Remove(b);
            }
            CompProperties_Power compProperties = b.def.GetCompProperties <CompProperties_Power>();

            if (compProperties != null && compProperties.startElectricalFires)
            {
                this.allBuildingsColonistElecFire.Remove(b);
            }
        }
        public override void TickRare()
        {
            if (this.compPowerTrader.PowerOn)
            {
                IntVec3 vecNorth  = base.Position + IntVec3.North.RotatedBy(base.Rotation);
                bool    hotIsHot  = false;
                Room    roomNorth = vecNorth.GetRoom(this.Map);
                if (!vecNorth.Impassable(base.Map) && (roomNorth != null))
                {
                    var   temperature = roomNorth.Temperature;
                    float energyMod;
                    if (temperature < 20f)
                    {
                        energyMod = 1f;
                    }
                    else
                    {
                        energyMod = temperature > 120f
                            ? 0f
                            : Mathf.InverseLerp(120f, 20f, temperature);
                    }
                    var energyLimit = compTempControl.Props.energyPerSecond * energyMod * 4.16666651f;

                    if (temperature > this.compTempControl.targetTemperature)
                    {
                        energyLimit *= -1;
                    }

                    var hotAir = GenTemperature.ControlTemperatureTempChange(vecNorth, this.Map, energyLimit,
                                                                             compTempControl.targetTemperature);

                    hotIsHot = !Mathf.Approximately(hotAir, 0f);
                    if (hotIsHot)
                    {
                        vecNorth.GetRoomGroup(base.Map).Temperature += hotAir;
                    }
                }
                CompProperties_Power props = this.compPowerTrader.Props;
                if (hotIsHot)
                {
                    this.compPowerTrader.PowerOutput = -props.basePowerConsumption;
                }
                else
                {
                    this.compPowerTrader.PowerOutput = -props.basePowerConsumption * this.compTempControl.Props.lowPowerConsumptionFactor;
                }
                this.compTempControl.operatingAtHighPower = hotIsHot;
            }
        }
        public override void SetUpPowerVars()
        {
            base.SetUpPowerVars();
            CompProperties_Power props = base.Props;

            if (compPowerBattery != null)
            {
                if (compPowerBattery.StoredEnergyPct > 0.9)
                {
                    PowerOutput = -Props.basePowerConsumption;
                    return;
                }
            }
            PowerOutput = 0;
        }
        public static bool Add(ListerBuildings __instance, Building b)
        {
            if (b.def.building != null && b.def.building.isNaturalRock)
            {
                return(false);
            }

            if (b.Faction == Faction.OfPlayer)
            {
                if (b is Building_PlantGrower building_PlantGrower)
                {
                    List <Building_PlantGrower> plantGrowers = get_AllBuildingsColonistBuilding_PlantGrower(__instance);
                    lock (plantGrowers)
                    {
                        plantGrowers.Add(building_PlantGrower);
                    }
                }
                lock (__instance.allBuildingsColonist)
                {
                    __instance.allBuildingsColonist.Add(b);
                }

                if (b is IAttackTarget)
                {
                    lock (__instance.allBuildingsColonistCombatTargets)
                    {
                        __instance.allBuildingsColonistCombatTargets.Add(b);
                    }
                }
            }
            else
            {
                lock (__instance.allBuildingsNonColonist)
                {
                    __instance.allBuildingsNonColonist.Add(b);
                }
            }

            CompProperties_Power compProperties = b.def.GetCompProperties <CompProperties_Power>();

            if (compProperties != null && compProperties.shortCircuitInRain)
            {
                __instance.allBuildingsColonistElecFire.Add(b);
            }
            return(false);
        }
        static public PowerType powerTypeFor(ThingDef def)
        {
            CompProperties_Battery powerBattery = def.GetCompProperties <CompProperties_Battery>();

            if (powerBattery != null)
            {
                return(PowerType.Storage);
            }

            CompProperties_Power power = def.GetCompProperties <CompProperties_Power>();

            if (power != null)
            {
                return(power.basePowerConsumption > 0 ? PowerType.Consumer : PowerType.Producer);
            }

            return(PowerType.None);
        }
Exemple #15
0
 public override void TickRare()
 {
     if (this.compPowerTrader.PowerOn)
     {
         IntVec3 intVec  = Position + IntVec3.South.RotatedBy(Rotation);
         IntVec3 intVec2 = Position + IntVec3.North.RotatedBy(Rotation);
         bool    flag    = false;
         if (!intVec2.Impassable() && !intVec.Impassable())
         {
             float temperature  = intVec2.GetTemperature();
             float temperature2 = intVec.GetTemperature();
             float num          = temperature - temperature2;
             //if (temperature - 40f > num)
             //{
             //	num = temperature - 40f;
             //}
             float num2 = 1f - num * 0.0076923077f;
             if (num2 < 0f)
             {
                 num2 = 0f;
             }
             float num3 = this.compTempControl.Props.energyPerSecond * num2 * 4.16666651f;
             float num4 = GenTemperature.ControlTemperatureTempChange(intVec, num3, this.compTempControl.targetTemperature);
             flag = !Mathf.Approximately(num4, 0f);
             if (flag)
             {
                 intVec.GetRoom().Temperature += num4;
                 GenTemperature.PushHeat(intVec2, -num3 * 1.25f);
             }
         }
         CompProperties_Power props = this.compPowerTrader.Props;
         if (flag)
         {
             this.compPowerTrader.PowerOutput = -props.basePowerConsumption;
         }
         else
         {
             this.compPowerTrader.PowerOutput = -props.basePowerConsumption * this.compTempControl.Props.lowPowerConsumptionFactor;
         }
         this.compTempControl.operatingAtHighPower = flag;
     }
 }
 private static void CreateBaseEnergyMap()
 {
     if (BaseEnergy == null)
     {
         BaseEnergy = new Dictionary <string, float>();
         FridgeDefs = new Dictionary <string, ThingDef>();
         foreach (ThingDef def in DefDatabase <ThingDef> .AllDefsListForReading)
         {
             if (def.defName.StartsWith("RimFridge"))
             {
                 CompProperties_Power power = def.GetCompProperties <CompProperties_Power>();
                 if (power != null)
                 {
                     BaseEnergy.Add(def.defName, power.basePowerConsumption);
                     FridgeDefs.Add(def.defName, def);
                 }
             }
         }
     }
 }
        public void Add(Building b)
        {
            if (b.def.building != null && b.def.building.isNaturalRock)
            {
                return;
            }
            if (b.Faction == Faction.OfPlayer)
            {
                this.allBuildingsColonist.Add(b);
                if (b is IAttackTarget)
                {
                    this.allBuildingsColonistCombatTargets.Add(b);
                }
            }
            CompProperties_Power compProperties = b.def.GetCompProperties <CompProperties_Power>();

            if (compProperties != null && compProperties.startElectricalFires)
            {
                this.allBuildingsColonistElecFire.Add(b);
            }
        }
Exemple #18
0
        public override void SpawnSetup(Map map, bool respawningAfterLoad)
        {
            base.SpawnSetup(map, respawningAfterLoad);
            this.currentMap = map;

            refuelable = GetComp <CompRefuelable>();
            power      = GetComp <CompPowerTrader>();
            props      = power.Props;
            fuelprops  = refuelable.Props;

            // Require more fuel for faster rates.
            float fuelPerReversedYear = 1.0f * ((float)rate / 250);

            fuelConsumption = fuelPerReversedYear / ((float)GenDate.TicksPerYear / rate);
            // Log.Message("Fuel consumption per Tick: " + fuelConsumption);

            if (HasAnyContents)
            {
                Pawn pawn = ContainedThing as Pawn;
                this.configTargetAge(pawn);
                this.determineCurableInjuries(pawn);
            }
        }
        private void DoTickerWork(int tickerAmount)
        {
            bool flag = (this.powerComp == null || this.powerComp.PowerOn);

            if (flag && base.Spawned)
            {
                if (GridsUtility.Roofed(base.Position, this.Map))
                {
                    if (!BreakdownableUtility.IsBrokenDown(this))
                    {
                        SetRoofInRange();
                        ResetRemovedRoof();
                    }
                }
                CompProperties_Power props = powerComp.Props;
                powerComp.PowerOutput = -props.basePowerConsumption;
            }
            else
            {
                // Set roofs that were changed back to being thickRoof
                ResetRoofInRange();
            }
        }
        public static bool Remove(ListerBuildings __instance, Building b)
        {
            if (b is Building_PlantGrower building_PlantGrower)
            {
                List <Building_PlantGrower> plantGrowers = get_AllBuildingsColonistBuilding_PlantGrower(__instance);
                lock (plantGrowers)
                {
                    plantGrowers.Remove(building_PlantGrower);
                }
            }
            lock (__instance.allBuildingsColonist)
            {
                __instance.allBuildingsColonist.Remove(b);
            }
            lock (__instance.allBuildingsNonColonist)
            {
                __instance.allBuildingsNonColonist.Remove(b);
            }
            if (b is IAttackTarget)
            {
                lock (__instance.allBuildingsColonistCombatTargets)
                {
                    __instance.allBuildingsColonistCombatTargets.Remove(b);
                }
            }

            CompProperties_Power compProperties = b.def.GetCompProperties <CompProperties_Power>();

            if (compProperties != null && compProperties.shortCircuitInRain)
            {
                lock (__instance.allBuildingsColonistElecFire)
                {
                    __instance.allBuildingsColonistElecFire.Remove(b);
                }
            }
            return(false);
        }
Exemple #21
0
        internal static ThingDef CreateNanoBedDefFromSupportedBed(this ThingDef bed, Action <ThingDef> fnAdditionalProcessing, List <ThingDef> linkableBuildings, List <CompProperties_Facility> facilities)
        {
            Type typeRimworldBed = typeof(Building_Bed);
            Type bedToClone      = bed.GetType();

            if (typeRimworldBed.IsAssignableFrom(bedToClone))
            {
                throw new Exception("Type [" + bedToClone.Name + "] is not supported.");
            }

            FieldInfo[] fields = typeof(ThingDef).GetFields(BindingFlags.Public | BindingFlags.Instance);
            ThingDef    nBed   = new ThingDef();

            foreach (FieldInfo field in fields)
            {
                field.SetValue(nBed, field.GetValue(bed));
            }

            nBed.comps = new List <CompProperties>();
            for (int i = 0; i < bed.comps.Count; i++)
            {
                ConstructorInfo constructor = bed.comps[i].GetType().GetConstructor(Type.EmptyTypes);
                CompProperties  comp        = (CompProperties)constructor.Invoke(null);

                fields = comp.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance);
                foreach (FieldInfo field in fields)
                {
                    field.SetValue(comp, field.GetValue(bed.comps[i]));
                }

                nBed.comps.Add(comp);
            }

            nBed.statBases.Add(new StatModifier()
            {
                stat = StatDef.Named("Ogre_NanoApparelRate"), value = 0
            });
            nBed.statBases.Add(new StatModifier()
            {
                stat = StatDef.Named("Ogre_NanoWeaponsRate"), value = 0
            });

            CompProperties_Power power = new CompProperties_Power();

            power.compClass            = typeof(CompPowerTrader);
            power.basePowerConsumption = 60f;
            power.shortCircuitInRain   = false;
            nBed.comps.Add(power);

            CompProperties_Flickable flick = new CompProperties_Flickable();

            flick.compClass = typeof(CompFlickable);
            nBed.comps.Add(flick);

            CompProperties_Refuelable fuel = new CompProperties_Refuelable();

            fuel.fuelConsumptionRate     = 0;
            fuel.fuelCapacity            = 25.0f * bed.size.x;  // same way it calculates in BedUtility
            fuel.consumeFuelOnlyWhenUsed = true;
            fuel.fuelFilter = new ThingFilter();
            fuel.fuelFilter.SetAllow(ThingDef.Named("Ogre_NanoTechFuel"), true);
            nBed.comps.Add(fuel);

            Dictionary <string, int> cost = new Dictionary <string, int>()
            {
                { "ComponentIndustrial", 1 },
                { "Steel", 5 }
            };

            if (nBed.costList == null)
            {
                nBed.costList = new List <ThingDefCountClass>();
            }

            Dictionary <string, ThingDefCountClass> current = nBed.costList.ToDictionary(x => x.thingDef.defName, y => y);


            foreach (string item in cost.Keys)
            {
                ThingDefCountClass count = null;
                if (!current.TryGetValue(item, out count))
                {
                    count = new ThingDefCountClass(ThingDef.Named(item), (cost[item] * nBed.size.x));
                    nBed.costList.Add(count);
                }
                else
                {
                    count.count += (cost[item] * nBed.size.x);
                }
            }

            bool found = false;

            nBed.researchPrerequisites = new List <ResearchProjectDef>();
            if (bed.researchPrerequisites != null && bed.researchPrerequisites.Count > 0)
            {
                foreach (ResearchProjectDef d in bed.researchPrerequisites)
                {
                    if (d.defName == "Ogre_NanoTech")
                    {
                        found = true;
                    }
                    nBed.researchPrerequisites.Add(d);
                }
            }

            if (!found)
            {
                nBed.researchPrerequisites.Add(ResearchProjectDef.Named("Ogre_NanoTech"));
            }


            nBed.defName                      += "_NanoBed";
            nBed.description                  += "\n\n" + TranslatorFormattedStringExtensions.Translate("NanoTech.Description.Short");
            nBed.label                         = TranslatorFormattedStringExtensions.Translate("NanoTech.ModName.Short") + " " + nBed.label;
            nBed.thingClass                    = typeof(NanoBed);
            nBed.tradeability                  = Tradeability.None;
            nBed.scatterableOnMapGen           = false;
            nBed.tickerType                    = TickerType.Rare;
            nBed.constructionSkillPrerequisite = bed.constructionSkillPrerequisite < 2 ? 2 : bed.constructionSkillPrerequisite;
            nBed.uiIconScale                   = 0.9f;
            nBed.techLevel                     = TechLevel.Industrial;
            nBed.shortHash                     = 0;

            // as of 1.3 without this, it wont
            // show the out of fuel icon
            nBed.drawerType = DrawerType.RealtimeOnly;

            nBed.designationCategory = DefDatabase <DesignationCategoryDef> .AllDefsListForReading.Find(x => x.defName == "Ogre_NanoRepairTech_DesignationCategory");

            MethodInfo newBluePrintDef = typeof(RimWorld.ThingDefGenerator_Buildings).GetMethod("NewBlueprintDef_Thing", BindingFlags.Static | BindingFlags.NonPublic);

            nBed.blueprintDef = (ThingDef)newBluePrintDef.Invoke(null, new object[] { nBed, false, null });

            MethodInfo newFrameDef = typeof(RimWorld.ThingDefGenerator_Buildings).GetMethod("NewFrameDef_Thing", BindingFlags.Static | BindingFlags.NonPublic);

            nBed.frameDef = (ThingDef)newFrameDef.Invoke(null, new object[] { nBed });

            if (bed.building.bed_humanlike)
            {
                CompProperties_AffectedByFacilities abf = nBed.GetCompProperties <CompProperties_AffectedByFacilities>();
                if (abf == null)
                {
                    abf = new CompProperties_AffectedByFacilities();
                    nBed.comps.Add(abf);
                }

                if (abf.linkableFacilities == null)
                {
                    abf.linkableFacilities = new List <ThingDef>();
                }

                abf.linkableFacilities.AddRange(linkableBuildings);

                foreach (CompProperties_Facility f in facilities)
                {
                    f.linkableBuildings.Add(nBed);
                }
            }

            if (fnAdditionalProcessing != null)
            {
                fnAdditionalProcessing.Invoke(nBed);
            }

            typeof(ShortHashGiver).GetMethod("GiveShortHash", BindingFlags.NonPublic | BindingFlags.Static).Invoke(null, new object[] { nBed, typeof(ThingDef) });

            return(nBed);
        }
        public override void TickRare()
        {
            //base.TickRare();
            if (this.compPowerTrader.PowerOn)
            {
                bool flag = false;
                //heating
                float outsideTemp = this.Map.mapTemperature.OutdoorTemp;
                //cooling
                float ambientTemp = this.AmbientTemperature;
                //hotside - coolside
                float num = outsideTemp - ambientTemp;
                //hotside - 40 greater than hotside - coolside
                //coolside colder than -40
                if (outsideTemp - 40f > num)
                {
                    //num = hotside - 40
                    //min coldside operating temp == 40
                    num = outsideTemp - 40f;
                }
                //num2 = total efficiency
                float num2 = 1f - num * EfficiencyLossPerDegreeDifference;
                if (num2 < 0f)
                {
                    num2 = 0f;
                }
                //num3 = EPS stat * efficiency * const// total heat push
                float num3 = this.compTempControl.Props.energyPerSecond * num2 * 4.16666651f;

                /*RoomGroup roomGroup = this.Position.GetRoomGroup(base.Map);
                 * if (roomGroup == null) {
                 *  Messages.Message("null", MessageSound.Standard);
                 * } else if(roomGroup.UsesOutdoorTemperature){
                 *  Messages.Message("outdoor", MessageSound.Standard);
                 * } else {
                 *  Messages.Message("zilch", MessageSound.Standard);
                 * }
                 * //calibrating for room size etc., no changes yet
                 * Messages.Message("num3", MessageSound.Standard);
                 * Messages.Message(string.Format("{0:N8}", num3), MessageSound.Standard);
                 * float num4 = GenTemperature.ControlTemperatureTempChange(this.Position, base.Map, num3, this.compTempControl.targetTemperature);
                 * Messages.Message(this.Position.ToString(), MessageSound.Standard);
                 * Messages.Message("num4", MessageSound.Standard);
                 * Messages.Message(string.Format("{0:N8}", num4), MessageSound.Standard);*/
                //check if close to zero
                //flag = !UnityEngine.Mathf.Approximately(num4, 0f);
                flag = Math.Abs(num3 / (float)this.compTempControl.Props.energyPerSecond) > HeatThreshold && ambientTemp > this.compTempControl.targetTemperature;

                /*Messages.Message(string.Format("{0:N8}", num3 / (float)this.compTempControl.Props.energyPerSecond), MessageSound.Standard);
                 * Messages.Message(flag.ToString(), MessageSound.Standard);*/
                if (flag)
                {
                    //cool the room
                    //this.Position.GetRoomGroup(base.Map).Temperature += num4;
                    GenTemperature.PushHeat(this.Position, base.Map, num3);
                    //heat other side * efficiency factor
                    //GenTemperature.PushHeat(intVec2, base.Map, -num3 * HeatOutputMultiplier);
                    //removed due to exhausting to Outside
                }

                CompProperties_Power props = this.compPowerTrader.Props;
                if (flag)
                {
                    this.compPowerTrader.PowerOutput = -props.basePowerConsumption;
                }
                else
                {
                    this.compPowerTrader.PowerOutput = -props.basePowerConsumption * this.compTempControl.Props.lowPowerConsumptionFactor;
                }
                this.compTempControl.operatingAtHighPower = flag;
            }
        }
Exemple #23
0
        public override void TickRare()
        {
            if (!compPowerTrader.PowerOn)
            {
                return;
            }

            IntVec3 intVec3_1 = Position + IntVec3Utility.RotatedBy(IntVec3.South, Rotation);
            IntVec3 intVec3_2 = Position + IntVec3Utility.RotatedBy(IntVec3.North, Rotation);
            bool    flag      = false;

            if (!GenGrid.Impassable(intVec3_2, Map) && !GenGrid.Impassable(intVec3_1, Map))
            {
                float temperature1 = GridsUtility.GetTemperature(intVec3_2, Map);
                float temperature2 = GridsUtility.GetTemperature(intVec3_1, Map);


                //Check for Mode
                bool _cooling = true;
                if (m_Mode == EnumCoolerMode.Cooling)
                {
                    _cooling = true;
                }
                else if (m_Mode == EnumCoolerMode.Heating)
                {
                    _cooling = false;
                }
                else if (m_Mode == EnumCoolerMode.Auto)
                {
                    if (temperature1 > compTempControl.targetTemperature)
                    {
                        //Log.Message("Auto Cooling");
                        _cooling = true;
                    }
                    else
                    {
                        //Log.Message("Auto Heating");
                        _cooling = false;
                    }
                }

                float a;
                float energyLimit;
                float _TemperatureDifferance;
                float num2;

                if (_cooling)
                {
                    //Log.Message("Cooling");
                    _TemperatureDifferance = temperature1 - temperature2;
                    if (temperature1 - TemperatureDiffThreshold > _TemperatureDifferance)
                    {
                        _TemperatureDifferance = temperature1 - TemperatureDiffThreshold;
                    }
                    num2 = 1.0f - _TemperatureDifferance * EfficiencyLossPerDegreeDifference;
                    if (num2 < 0.0f)
                    {
                        num2 = 0.0f;
                    }
                    energyLimit = (float)(compTempControl.Props.energyPerSecond * (double)num2 * UnknownConst_2);
                    a           = GenTemperature.ControlTemperatureTempChange(intVec3_1, Map, energyLimit, compTempControl.targetTemperature);
                    flag        = !Mathf.Approximately(a, 0.0f);
                }
                else
                {
                    //Log.Message("Heating");
                    _TemperatureDifferance = temperature1 - temperature2;
                    if (temperature1 + TemperatureDiffThreshold > _TemperatureDifferance)
                    {
                        _TemperatureDifferance = temperature1 + TemperatureDiffThreshold;
                    }
                    num2 = 1.0f - _TemperatureDifferance * EfficiencyLossPerDegreeDifference;
                    if (num2 < 0.0f)
                    {
                        num2 = 0.0f;
                    }
                    energyLimit = (float)(compTempControl.Props.energyPerSecond * -(double)num2 * UnknownConst_2);
                    a           = GenTemperature.ControlTemperatureTempChange(intVec3_1, Map, energyLimit, compTempControl.targetTemperature);
                    flag        = !Mathf.Approximately(a, 0.0f);
                }

                if (flag)
                {
                    GridsUtility.GetRoomGroup(intVec3_2, Map).Temperature -= a;
                    GenTemperature.PushHeat(intVec3_1, Map, (float)(+(double)energyLimit * HeatOutputMultiplier));
                }
            }


            CompProperties_Power props = compPowerTrader.Props;

            if (flag)
            {
                compPowerTrader.PowerOutput = -props.basePowerConsumption;
            }
            else
            {
                compPowerTrader.PowerOutput = -props.basePowerConsumption * compTempControl.Props.lowPowerConsumptionFactor;
            }

            compTempControl.operatingAtHighPower = flag;
        }
Exemple #24
0
        public override void TickRare()
        {
            if (!this.compPowerTrader.PowerOn)
            {
                return;
            }

            IntVec3 intVec3_1 = this.Position + IntVec3.South.RotatedBy(this.Rotation);
            IntVec3 intVec3_2 = this.Position + IntVec3.North.RotatedBy(this.Rotation);
            bool    flag      = false;

            if (!intVec3_2.Impassable(this.Map) && !intVec3_1.Impassable(this.Map))
            {
                float temperature1 = GridsUtility.GetTemperature(intVec3_2, this.Map);
                float temperature2 = GridsUtility.GetTemperature(intVec3_1, this.Map);


                //Check for Mode
                bool _cooling = true;
                if (this.m_Mode == enumCoolerMode.Cooling)
                {
                    _cooling = true;
                }
                else if (this.m_Mode == enumCoolerMode.Heating)
                {
                    _cooling = false;
                }
                else if (this.m_Mode == enumCoolerMode.Auto)
                {
                    //Log.Message("T1: " + temperature1 + "T2: " + temperature2 + "TT: " + this.compTempControl.targetTemperature);
                    if (temperature1 > this.compTempControl.targetTemperature)
                    {
                        //Log.Message("Auto Cooling");
                        _cooling = true;
                    }
                    else
                    {
                        //Log.Message("Auto Heating");
                        _cooling = false;
                    }
                }

                float a           = 0.0f;
                float energyLimit = 0.0f;

                if (_cooling)
                {
                    //Log.Message("Cooling");
                    float _TemperatureDifferance = temperature1 - temperature2;
                    if ((double)temperature1 - 40.0 > (double)_TemperatureDifferance)
                    {
                        _TemperatureDifferance = temperature1 - 40f;
                    }
                    float num2 = (float)(1.0 - (double)_TemperatureDifferance * (1.0 / 130.0));
                    if ((double)num2 < 0.0)
                    {
                        num2 = 0.0f;
                    }
                    energyLimit = (float)((double)this.compTempControl.Props.energyPerSecond * (double)num2 * 4.16666650772095);
                    a           = GenTemperature.ControlTemperatureTempChange(intVec3_1, this.Map, energyLimit, this.compTempControl.targetTemperature);
                    flag        = !Mathf.Approximately(a, 0.0f);
                }
                else
                {
                    //Log.Message("Heating");
                    float _TemperatureDifferance = temperature1 - temperature2;
                    if ((double)temperature1 + 40.0 > (double)_TemperatureDifferance)
                    {
                        _TemperatureDifferance = temperature1 + 40f;
                    }
                    float num2 = (float)(1.0 - (double)_TemperatureDifferance * (1.0 / 130.0));
                    if ((double)num2 < 0.0)
                    {
                        num2 = 0.0f;
                    }
                    energyLimit = (float)((double)this.compTempControl.Props.energyPerSecond * -(double)num2 * 4.16666650772095);
                    //energyLimit = (float)((double)this.compTempControl.Props.energyPerSecond * 4.16666650772095 * -1);
                    a    = GenTemperature.ControlTemperatureTempChange(intVec3_1, this.Map, energyLimit, this.compTempControl.targetTemperature);
                    flag = !Mathf.Approximately(a, 0.0f);
                    //Log.Message("TempDiff: " + _TemperatureDifferance + " num2: " + num2 + " EnergyLimit: " + energyLimit + " a: " + a);
                }

                if (flag)
                {
                    GridsUtility.GetRoomGroup(intVec3_2, this.Map).Temperature -= a;
                    GenTemperature.PushHeat(intVec3_1, this.Map, (float)(+(double)energyLimit * 1.25));
                }
            }


            CompProperties_Power props = this.compPowerTrader.Props;

            if (flag)
            {
                this.compPowerTrader.PowerOutput = -props.basePowerConsumption;
            }
            else
            {
                this.compPowerTrader.PowerOutput = -props.basePowerConsumption * this.compTempControl.Props.lowPowerConsumptionFactor;
            }
            this.compTempControl.operatingAtHighPower = flag;
        }