Exemplo n.º 1
0
        public static bool DoComplexCalcs(Fire __instance)
        {
            bool flag = false;
            //flammableList.Clear();
            List <Thing> flammableList = new List <Thing>();

            flammabilityMax(__instance) = 0.0f;
            if (null != __instance.Map)
            {
                if (!__instance.Position.GetTerrain(__instance.Map).extinguishesFire)
                {
                    if (__instance.parent == null)
                    {
                        if (__instance.Position.TerrainFlammableNow(__instance.Map))
                        {
                            flammabilityMax(__instance) = __instance.Position.GetTerrain(__instance.Map).GetStatValueAbstract(StatDefOf.Flammability, (ThingDef)null);
                        }
                        List <Thing> thingList = __instance.Map.thingGrid.ThingsListAt(__instance.Position);
                        for (int index = 0; index < thingList.Count; ++index)
                        {
                            Thing thing = thingList[index];
                            if (thing is Building_Door)
                            {
                                flag = true;
                            }
                            float statValue = thing.GetStatValue(StatDefOf.Flammability, true);
                            if ((double)statValue >= 0.00999999977648258)
                            {
                                flammableList.Add(thingList[index]);
                                if ((double)statValue > (double)flammabilityMax(__instance))
                                {
                                    flammabilityMax(__instance) = statValue;
                                }
                                if (__instance.parent == null && (double)__instance.fireSize > 0.400000005960464 && (thingList[index].def.category == ThingCategory.Pawn && Rand.Chance(FireUtility.ChanceToAttachFireCumulative(thingList[index], 150f))))
                                {
                                    thingList[index].TryAttachFire(__instance.fireSize * 0.2f);
                                }
                            }
                        }
                    }
                    else
                    {
                        flammableList.Add(__instance.parent);
                        flammabilityMax(__instance) = __instance.parent.GetStatValue(StatDefOf.Flammability, true);
                    }
                }
                if ((double)flammabilityMax(__instance) < 0.00999999977648258)
                {
                    __instance.Destroy(DestroyMode.Vanish);
                }
                else
                {
                    Thing targ = __instance.parent == null ? (flammableList.Count <= 0 ? (Thing)null : flammableList[Rand.Range(0, flammableList.Count)]) : __instance.parent;
                    if (targ != null && ((double)__instance.fireSize >= 0.400000005960464 || targ == __instance.parent || targ.def.category != ThingCategory.Pawn))
                    {
                        DoFireDamage(__instance, targ);
                    }
                    if (!__instance.Spawned)
                    {
                        return(false);
                    }
                    float energy = __instance.fireSize * 160f;
                    if (flag)
                    {
                        energy *= 0.15f;
                    }
                    GenTemperature.PushHeat(__instance.Position, __instance.Map, energy);
                    if ((double)Rand.Value < 0.400000005960464)
                    {
                        SnowUtility.AddSnowRadial(__instance.Position, __instance.Map, __instance.fireSize * 3f, (float)-((double)__instance.fireSize * 0.100000001490116));
                    }
                    __instance.fireSize += (float)(0.000549999997019768 * (double)flammabilityMax(__instance) * 150.0);
                    if ((double)__instance.fireSize > 1.75)
                    {
                        __instance.fireSize = 1.75f;
                    }
                    if ((double)__instance.Map.weatherManager.RainRate <= 0.00999999977648258 || !VulnerableToRain(__instance) || (double)Rand.Value >= 6.0)
                    {
                        return(false);
                    }
                    //__instance.TakeDamage(new DamageInfo(DamageDefOf.Extinguish, 10f, 0.0f, -1f, (Thing)null, (BodyPartRecord)null, (ThingDef)null, DamageInfo.SourceCategory.ThingOrUnknown, (Thing)null));
                    DamageInfo daminfo = new DamageInfo(DamageDefOf.Extinguish, 10f, 0.0f, -1f, (Thing)null, (BodyPartRecord)null, (ThingDef)null, DamageInfo.SourceCategory.ThingOrUnknown, (Thing)null);
                    DamageWorker.DamageResult dresult = new DamageWorker.DamageResult();
                    Thing_Patch.TakeDamage(__instance, ref dresult, daminfo);
                }
            }
            return(false);
        }
Exemplo n.º 2
0
        // Token: 0x06005189 RID: 20873 RVA: 0x001B7D9C File Offset: 0x001B5F9C
        private void DoComplexCalcs()
        {
            bool flag = false;

            PsychicFire.flammableList.Clear();
            this.flammabilityMax = 0f;
            if (!base.Position.GetTerrain(base.Map).extinguishesFire)
            {
                if (this.parent == null)
                {
                    if (base.Position.TerrainFlammableNow(base.Map))
                    {
                        this.flammabilityMax = base.Position.GetTerrain(base.Map).GetStatValueAbstract(StatDefOf.Flammability, null);
                    }
                    List <Thing> list = base.Map.thingGrid.ThingsListAt(base.Position);
                    for (int i = 0; i < list.Count; i++)
                    {
                        Thing thing = list[i];
                        if (thing is Building_Door)
                        {
                            flag = true;
                        }
                        float statValue = thing.GetStatValue(StatDefOf.Flammability, true);
                        if (statValue >= 0.01f)
                        {
                            PsychicFire.flammableList.Add(list[i]);
                            if (statValue > this.flammabilityMax)
                            {
                                this.flammabilityMax = statValue;
                            }
                            if (this.parent == null && this.fireSize > 0.4f && list[i].def.category == ThingCategory.Pawn && Rand.Chance(FireUtility.ChanceToAttachFireCumulative(list[i], 150f)))
                            {
                                list[i].TryAttachFire(this.fireSize * 0.2f);
                            }
                        }
                    }
                }
                else
                {
                    PsychicFire.flammableList.Add(this.parent);
                    this.flammabilityMax = this.parent.GetStatValue(StatDefOf.Flammability, true);
                }
            }
            if (this.flammabilityMax < 0.01f)
            {
                this.Destroy(DestroyMode.Vanish);
                return;
            }
            Thing thing2;

            if (this.parent != null)
            {
                thing2 = this.parent;
            }
            else if (PsychicFire.flammableList.Count > 0)
            {
                thing2 = PsychicFire.flammableList.RandomElement <Thing>();
            }
            else
            {
                thing2 = null;
            }
            if (thing2 != null && (this.fireSize >= 0.4f || thing2 == this.parent || thing2.def.category != ThingCategory.Pawn))
            {
                this.DoFireDamage(thing2);
            }
            if (base.Spawned)
            {
                float num = this.fireSize * 160f;
                if (flag)
                {
                    num *= 0.15f;
                }
                GenTemperature.PushHeat(base.Position, base.Map, num);
                if (Rand.Value < 0.4f)
                {
                    float radius = this.fireSize * 3f;
                    SnowUtility.AddSnowRadial(base.Position, base.Map, radius, -(this.fireSize * 0.1f));
                }
                this.fireSize += 0.00055f * this.flammabilityMax * 150f;
                if (this.fireSize > 1.75f)
                {
                    this.fireSize = 1.75f;
                }
                if (base.Map.weatherManager.RainRate > 0.01f && this.VulnerableToRain() && Rand.Value < 6f)
                {
                    base.TakeDamage(new DamageInfo(DamageDefOf.Extinguish, 10f, 0f, -1f, null, null, null, DamageInfo.SourceCategory.ThingOrUnknown, null));
                }
            }
        }